summaryrefslogtreecommitdiff
path: root/rust-src/src/cmd_main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'rust-src/src/cmd_main.rs')
-rw-r--r--rust-src/src/cmd_main.rs34
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
+ }
+ }
+}