herolib-core 0.3.13

Core utilities including text processing, networking, and HeroScript configuration language
Documentation
# herolib-core

[![Crates.io](https://img.shields.io/crates/v/herolib-core.svg)](https://crates.io/crates/herolib-core)
[![Documentation](https://docs.rs/herolib-core/badge.svg)](https://docs.rs/herolib-core)

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

## Documentation

- [API Documentation (docs.rs)]https://docs.rs/herolib-core
- [Crates.io]https://crates.io/crates/herolib-core

## Interactive Shell (hero-core)

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

```bash
# 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

```bash
cargo add herolib-core
```

Or add to your `Cargo.toml`:

```toml
[dependencies]
herolib-core = "0.1"
```

## Building

```bash
./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

```rust
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

```rust
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

```rust
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).

```rhai
// 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