//! 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::("exist('some_file.txt')").unwrap(); /// ``` pub fn register(engine: &mut Engine) -> Result<(), Box> { // 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(()) }