herolib-core

Crates.ioherolib-core
lib.rsherolib-core
version0.3.13
created_at2025-12-18 06:31:07.712554+00
updated_at2026-01-24 05:23:57.031896+00
descriptionCore utilities including text processing, networking, and HeroScript configuration language
homepage
repositoryhttps://forge.ourworld.tf/lhumina_code/herolib
max_upload_size
id1991809
size1,088,578
kristof de spiegeleer (despiegk)

documentation

README

herolib-core

Crates.io Documentation

Core utilities including text processing, networking, and the HeroScript configuration language.

Documentation

Interactive Shell (hero-core)

herolib-core includes hero-core, an interactive Rhai shell with full readline support:

# Install the shell
./install.sh

# Or run directly after building
./build.sh
./target/release/hero-core

Features:

  • Tab completion for all functions
  • Syntax highlighting for Rhai code
  • Command history (Up/Down arrows)
  • Function signature hints
  • Multi-line input support

Shell commands:

  • /help - Show help
  • /functions - List all available functions
  • /text - Show text module functions
  • /net - Show network functions
  • /heroscript - Show HeroScript functions
  • /scope - Show current variables
  • /load <file> - Load and execute a .rhai script
  • /quit - Exit (or Ctrl+D)

Installation

cargo add herolib-core

Or add to your Cargo.toml:

[dependencies]
herolib-core = "0.1"

Building

./build.sh

Modules

heroscript

A defensive configuration and scripting language designed for safe, predictable system orchestration.

  • Parse and execute HeroScript configuration files
  • Type-safe parameter handling
  • Wildcard action filtering
  • Struct serialization with derive macros (ToHeroScript, FromHeroScript)
  • Source tracking and write-back support
  • Include system for modular scripts
use herolib_core::heroscript::{PlayBook, PlayBookNewArgs, FindArgs};

let script = "!!server.define name:web1 host:localhost port:8080";
let playbook = PlayBook::new(PlayBookNewArgs {
    text: script.to_string(),
    ..Default::default()
})?;

let action = playbook.get("server.define")?;
let name = action.params.get("name")?;
let port = action.params.get_u16("port")?;

text

Text processing and manipulation utilities.

  • dedent / prefix - Text indentation handling
  • name_fix / path_fix - String sanitization for filenames
  • TextReplacer - Regex and literal text replacement with chaining
  • TemplateBuilder - Tera-based template rendering
use herolib_core::text::{dedent, name_fix, TextReplacer};

let clean = dedent("    indented
    text");
let safe = name_fix("Hello World!.txt");  // "hello_world_.txt"

let replacer = TextReplacer::builder()
    .pattern(r"\d+")
    .replacement("NUM")
    .regex(true)
    .build()?;
let result = replacer.replace("42 items");

net

Network connectivity utilities.

  • TCP port checking
  • HTTP endpoint validation
  • SSH connectivity testing
use herolib_core::net;

let is_up = net::tcp_check("localhost", 8080);

Rhai Integration

All modules are available in Rhai scripts (requires rhai v1.23.6).

// HeroScript
let pb = playbook_from_text("!!server.define name:web1 port:8080");
let server = pb.get("server.define");
print(server.get("name"));

// Text
let safe = name_fix("My File.txt");
let clean = dedent("    indented text");

// Replacer
let replacer = text_replacer_new()
    .pattern("old")
    .replacement("new")
    .build();
let result = replacer.replace("old text");

Related Packages

Package Description
herolib-derive Derive macros (ToHeroScript, FromHeroScript, ToSchema)

License

Apache-2.0

Commit count: 0

cargo fmt