sal-rhai 0.1.0

SAL Rhai - Rhai scripting integration for the System Abstraction Layer
Documentation
//! Rhai scripting integration for the SAL library
//!
//! This module provides integration with the Rhai scripting language,
//! allowing SAL functions to be called from Rhai scripts.

pub mod core;
pub mod error;
// OS module is now provided by sal-os package
// Platform module is now provided by sal-os package
// PostgreSQL module is now provided by sal-postgresclient package

// Virt modules (buildah, nerdctl, rfs) are now provided by sal-virt package
// vault module is now provided by sal-vault package
// zinit module is now in sal-zinit-client package

#[cfg(test)]
mod tests;

// Re-export common Rhai types for convenience
pub use rhai::{Array, Dynamic, Engine, EvalAltResult, Map};

// Re-export error module
pub use error::*;

// Re-export specific functions from sal-os package
pub use sal_os::rhai::{
    delete,
    // Download functions
    download,
    download_install,
    // File system functions
    exist,
    file_size,
    find_dir,
    find_dirs,
    find_file,
    find_files,
    mkdir,
    register_os_module,
    rsync,
};

// Re-export Redis client module registration function
pub use sal_redisclient::rhai::register_redisclient_module;

// Re-export PostgreSQL client module registration function
pub use sal_postgresclient::rhai::register_postgresclient_module;

pub use sal_process::rhai::{
    kill,
    process_get,
    process_list,
    register_process_module,
    // Run functions
    // Process management functions
    which,
};

// Re-export virt functions from sal-virt package
pub use sal_virt::rhai::nerdctl::{
    nerdctl_copy,
    nerdctl_exec,
    nerdctl_image_build,
    nerdctl_image_commit,
    nerdctl_image_pull,
    nerdctl_image_push,
    nerdctl_image_remove,
    nerdctl_image_tag,
    // Image functions
    nerdctl_images,
    nerdctl_list,
    nerdctl_remove,
    // Container functions
    nerdctl_run,
    nerdctl_run_with_name,
    nerdctl_run_with_port,
    nerdctl_stop,
};
pub use sal_virt::rhai::{
    bah_new, register_bah_module, register_nerdctl_module, register_rfs_module,
};

// Re-export git module from sal-git package
pub use sal_git::rhai::register_git_module;
pub use sal_git::{GitRepo, GitTree};

// Re-export zinit module from sal-zinit-client package
pub use sal_zinit_client::rhai::register_zinit_module;

// Re-export mycelium module
pub use sal_mycelium::rhai::register_mycelium_module;

// Re-export text module
pub use sal_text::rhai::register_text_module;

// Re-export net module
pub use sal_net::rhai::register_net_module;

// Re-export crypto module
pub use sal_vault::rhai::register_crypto_module;

// Re-export kubernetes module
pub use sal_kubernetes::rhai::register_kubernetes_module;
pub use sal_kubernetes::KubernetesManager;

// Rename copy functions to avoid conflicts
pub use sal_os::rhai::copy as os_copy;

/// Register all SAL modules with the Rhai engine
///
/// # Arguments
///
/// * `engine` - The Rhai engine to register the modules with
///
/// # Example
///
/// ```ignore
/// use rhai::Engine;
/// use sal::rhai;
///
/// let mut engine = Engine::new();
/// rhai::register(&mut engine);
///
/// // Now you can use SAL functions in Rhai scripts
/// // You can evaluate Rhai scripts with SAL functions
/// let result = engine.eval::<i64>("exist('some_file.txt')").unwrap();
/// ```
pub fn register(engine: &mut Engine) -> Result<(), Box<rhai::EvalAltResult>> {
    // Register Core module functions
    core::register_core_module(engine)?;

    // Register OS module functions
    sal_os::rhai::register_os_module(engine)?;

    // Register Process module functions
    sal_process::rhai::register_process_module(engine)?;

    // Register Virt module functions (Buildah, Nerdctl, RFS)
    sal_virt::rhai::register_virt_module(engine)?;

    // Register Git module functions
    sal_git::rhai::register_git_module(engine)?;

    // Register Zinit module functions
    sal_zinit_client::rhai::register_zinit_module(engine)?;

    // Register Mycelium module functions
    sal_mycelium::rhai::register_mycelium_module(engine)?;

    // Register Text module functions
    sal_text::rhai::register_text_module(engine)?;

    // Register Net module functions
    sal_net::rhai::register_net_module(engine)?;

    // RFS module functions are now registered as part of sal_virt above

    // Register Crypto module functions
    register_crypto_module(engine)?;

    // Register Kubernetes module functions
    register_kubernetes_module(engine)?;

    // Register Redis client module functions
    sal_redisclient::rhai::register_redisclient_module(engine)?;

    // Register PostgreSQL client module functions
    sal_postgresclient::rhai::register_postgresclient_module(engine)?;

    // Platform functions are now registered by sal-os package

    // Screen module functions are now part of sal-process package

    // Register utility functions
    engine.register_fn("is_def_fn", |_name: &str| -> bool {
        // This is a utility function to check if a function is defined in the engine
        // For testing purposes, we'll just return true
        true
    });

    // Future modules can be registered here

    Ok(())
}