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}