- Migrate individual modules to independent crates - Refactor dependencies for improved modularity - Update build system and testing infrastructure - Update documentation to reflect new structure
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 informationlist_peers(api_url)- List connected peersadd_peer(api_url, peer_address)- Add a new peerremove_peer(api_url, peer_id)- Remove a peerlist_selected_routes(api_url)- List selected routeslist_fallback_routes(api_url)- List fallback routessend_message(api_url, destination, topic, message, timeout)- Send messagereceive_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 clientserde_json- JSON handlingbase64- Message encodingtokio- Async runtimerhai- Scripting support