sal/mycelium
Mahmoud-Emad 4a8d3bfd24
Some checks are pending
Rhai Tests / Run Rhai Tests (push) Waiting to run
feat: Add mycelium package to workspace
- Add the `mycelium` package to the workspace members.
- Add `sal-mycelium` dependency to `Cargo.toml`.
- Update MONOREPO_CONVERSION_PLAN.md to reflect the addition
  and completion of the mycelium package.
2025-06-19 12:11:55 +03:00
..
src feat: Add mycelium package to workspace 2025-06-19 12:11:55 +03:00
tests feat: Add mycelium package to workspace 2025-06-19 12:11:55 +03:00
Cargo.toml feat: Add mycelium package to workspace 2025-06-19 12:11:55 +03:00
README.md feat: Add mycelium package to workspace 2025-06-19 12:11:55 +03:00

SAL Mycelium

A Rust client library for interacting with Mycelium node's HTTP API, with Rhai scripting support.

Overview

SAL Mycelium provides async HTTP client functionality for managing Mycelium nodes, including:

  • Node information retrieval
  • Peer management (list, add, remove)
  • Route inspection (selected and fallback routes)
  • Message operations (send and receive)

Usage

Rust API

use sal_mycelium::*;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let api_url = "http://localhost:8989";
    
    // Get node information
    let node_info = get_node_info(api_url).await?;
    println!("Node info: {:?}", node_info);
    
    // List peers
    let peers = list_peers(api_url).await?;
    println!("Peers: {:?}", peers);
    
    // Send a message
    use std::time::Duration;
    let result = send_message(
        api_url,
        "destination_ip",
        "topic",
        "Hello, Mycelium!",
        Some(Duration::from_secs(30))
    ).await?;
    
    Ok(())
}

Rhai Scripting

// Get node information
let api_url = "http://localhost:8989";
let node_info = mycelium_get_node_info(api_url);
print(`Node subnet: ${node_info.nodeSubnet}`);

// List peers
let peers = mycelium_list_peers(api_url);
print(`Found ${peers.len()} peers`);

// Send message (timeout in seconds, -1 for no timeout)
let result = mycelium_send_message(api_url, "dest_ip", "topic", "message", 30);

API Functions

Core Functions

  • get_node_info(api_url) - Get node information
  • list_peers(api_url) - List connected peers
  • add_peer(api_url, peer_address) - Add a new peer
  • remove_peer(api_url, peer_id) - Remove a peer
  • list_selected_routes(api_url) - List selected routes
  • list_fallback_routes(api_url) - List fallback routes
  • send_message(api_url, destination, topic, message, timeout) - Send message
  • receive_messages(api_url, topic, timeout) - Receive messages

Rhai Functions

All functions are available in Rhai with mycelium_ prefix:

  • mycelium_get_node_info(api_url)
  • mycelium_list_peers(api_url)
  • mycelium_add_peer(api_url, peer_address)
  • mycelium_remove_peer(api_url, peer_id)
  • mycelium_list_selected_routes(api_url)
  • mycelium_list_fallback_routes(api_url)
  • mycelium_send_message(api_url, destination, topic, message, timeout_secs)
  • mycelium_receive_messages(api_url, topic, timeout_secs)

Requirements

  • A running Mycelium node with HTTP API enabled
  • Default API endpoint: http://localhost:8989

Testing

# Run all tests
cargo test

# Run with a live Mycelium node for integration tests
# (tests will skip if no node is available)
cargo test -- --nocapture

Dependencies

  • reqwest - HTTP client
  • serde_json - JSON handling
  • base64 - Message encoding
  • tokio - Async runtime
  • rhai - Scripting support

License

Apache-2.0