Skip to main content

sal_rhai/
lib.rs

1//! Rhai scripting integration for the SAL library
2//!
3//! This module provides integration with the Rhai scripting language,
4//! allowing SAL functions to be called from Rhai scripts.
5
6pub mod core;
7pub mod error;
8// OS module is now provided by sal-os package
9// Platform module is now provided by sal-os package
10// PostgreSQL module is now provided by sal-postgresclient package
11
12// Virt modules (buildah, nerdctl, rfs) are now provided by sal-virt package
13// vault module is now provided by sal-vault package
14// zinit module is now in sal-zinit-client package
15
16#[cfg(test)]
17mod tests;
18
19// Re-export common Rhai types for convenience
20pub use rhai::{Array, Dynamic, Engine, EvalAltResult, Map};
21
22// Re-export error module
23pub use error::*;
24
25// Re-export specific functions from sal-os package
26pub use sal_os::rhai::{
27    delete,
28    // Download functions
29    download,
30    download_install,
31    // File system functions
32    exist,
33    file_size,
34    find_dir,
35    find_dirs,
36    find_file,
37    find_files,
38    mkdir,
39    register_os_module,
40    rsync,
41};
42
43// Re-export Redis client module registration function
44pub use sal_redisclient::rhai::register_redisclient_module;
45
46// Re-export PostgreSQL client module registration function
47pub use sal_postgresclient::rhai::register_postgresclient_module;
48
49pub use sal_process::rhai::{
50    kill,
51    process_get,
52    process_list,
53    register_process_module,
54    // Run functions
55    // Process management functions
56    which,
57};
58
59// Re-export virt functions from sal-virt package
60pub use sal_virt::rhai::nerdctl::{
61    nerdctl_copy,
62    nerdctl_exec,
63    nerdctl_image_build,
64    nerdctl_image_commit,
65    nerdctl_image_pull,
66    nerdctl_image_push,
67    nerdctl_image_remove,
68    nerdctl_image_tag,
69    // Image functions
70    nerdctl_images,
71    nerdctl_list,
72    nerdctl_remove,
73    // Container functions
74    nerdctl_run,
75    nerdctl_run_with_name,
76    nerdctl_run_with_port,
77    nerdctl_stop,
78};
79pub use sal_virt::rhai::{
80    bah_new, register_bah_module, register_nerdctl_module, register_rfs_module,
81};
82
83// Re-export git module from sal-git package
84pub use sal_git::rhai::register_git_module;
85pub use sal_git::{GitRepo, GitTree};
86
87// Re-export zinit module from sal-zinit-client package
88pub use sal_zinit_client::rhai::register_zinit_module;
89
90// Re-export mycelium module
91pub use sal_mycelium::rhai::register_mycelium_module;
92
93// Re-export text module
94pub use sal_text::rhai::register_text_module;
95
96// Re-export net module
97pub use sal_net::rhai::register_net_module;
98
99// Re-export crypto module
100pub use sal_vault::rhai::register_crypto_module;
101
102// Re-export kubernetes module
103pub use sal_kubernetes::rhai::register_kubernetes_module;
104pub use sal_kubernetes::KubernetesManager;
105
106// Rename copy functions to avoid conflicts
107pub use sal_os::rhai::copy as os_copy;
108
109/// Register all SAL modules with the Rhai engine
110///
111/// # Arguments
112///
113/// * `engine` - The Rhai engine to register the modules with
114///
115/// # Example
116///
117/// ```ignore
118/// use rhai::Engine;
119/// use sal::rhai;
120///
121/// let mut engine = Engine::new();
122/// rhai::register(&mut engine);
123///
124/// // Now you can use SAL functions in Rhai scripts
125/// // You can evaluate Rhai scripts with SAL functions
126/// let result = engine.eval::<i64>("exist('some_file.txt')").unwrap();
127/// ```
128pub fn register(engine: &mut Engine) -> Result<(), Box<rhai::EvalAltResult>> {
129    // Register Core module functions
130    core::register_core_module(engine)?;
131
132    // Register OS module functions
133    sal_os::rhai::register_os_module(engine)?;
134
135    // Register Process module functions
136    sal_process::rhai::register_process_module(engine)?;
137
138    // Register Virt module functions (Buildah, Nerdctl, RFS)
139    sal_virt::rhai::register_virt_module(engine)?;
140
141    // Register Git module functions
142    sal_git::rhai::register_git_module(engine)?;
143
144    // Register Zinit module functions
145    sal_zinit_client::rhai::register_zinit_module(engine)?;
146
147    // Register Mycelium module functions
148    sal_mycelium::rhai::register_mycelium_module(engine)?;
149
150    // Register Text module functions
151    sal_text::rhai::register_text_module(engine)?;
152
153    // Register Net module functions
154    sal_net::rhai::register_net_module(engine)?;
155
156    // RFS module functions are now registered as part of sal_virt above
157
158    // Register Crypto module functions
159    register_crypto_module(engine)?;
160
161    // Register Kubernetes module functions
162    register_kubernetes_module(engine)?;
163
164    // Register Redis client module functions
165    sal_redisclient::rhai::register_redisclient_module(engine)?;
166
167    // Register PostgreSQL client module functions
168    sal_postgresclient::rhai::register_postgresclient_module(engine)?;
169
170    // Platform functions are now registered by sal-os package
171
172    // Screen module functions are now part of sal-process package
173
174    // Register utility functions
175    engine.register_fn("is_def_fn", |_name: &str| -> bool {
176        // This is a utility function to check if a function is defined in the engine
177        // For testing purposes, we'll just return true
178        true
179    });
180
181    // Future modules can be registered here
182
183    Ok(())
184}