diff options
Diffstat (limited to 'rust-src/src/cmd_main.rs')
-rw-r--r-- | rust-src/src/cmd_main.rs | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/rust-src/src/cmd_main.rs b/rust-src/src/cmd_main.rs new file mode 100644 index 00000000..baedc851 --- /dev/null +++ b/rust-src/src/cmd_main.rs @@ -0,0 +1,34 @@ +use log::{error, LevelFilter}; +use std::ffi::{CStr, c_int, c_char}; +use crate::transform_c_args; +use crate::logger::SimpleLogger; +use crate::cmd_completions::cmd_completions; +use crate::cmd_list::cmd_list; +use crate::cmd_mount::cmd_mount; + +#[no_mangle] +pub extern "C" fn rust_main(argc: c_int, argv: *const *const c_char, cmd: *const c_char) -> c_int { + transform_c_args!(argv, argc, argv); + + log::set_boxed_logger(Box::new(SimpleLogger)).unwrap(); + log::set_max_level(LevelFilter::Warn); + + let cmd: &CStr = unsafe { CStr::from_ptr(cmd) }; + let cmd = match cmd.to_str() { + Ok(c) => c, + Err(e) => { + error!("could not parse command: {}", e); + return 1; + } + }; + + match cmd { + "completions" => cmd_completions(argv), + "list" => cmd_list(argv), + "mount" => cmd_mount(argv), + _ => { + error!("unknown command: {}", cmd); + 1 + } + } +} |