diff --git a/Cargo.lock b/Cargo.lock index c2f6328..3e1f16d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -370,15 +370,6 @@ version = "0.2.140" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "99227334921fae1a979cf0bfdfcc6b3e5ce376ef57e16fb6fb3ea2ed6095f80c" -[[package]] -name = "libc-print" -version = "0.1.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06cea5d58bd9ba4717bbf5c6c5bb11bb6e9e76685b7fff34039b80f50ce86c11" -dependencies = [ - "libc", -] - [[package]] name = "libloading" version = "0.7.4" @@ -1009,12 +1000,12 @@ dependencies = [ [[package]] name = "yacexits" -version = "0.2.0" -source = "git+https://git.tebibyte.media/yac/yacexits.git?branch=c-entry#d2af983f4ad18dec2af0604d7f34b7863daa5c25" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53fe740dd05c1bbc919431e842e6c1bea30195e0518ae99cae35b7f0730ddc18" dependencies = [ "bindgen", "libc", - "libc-print", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index baca1d2..cb69453 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -22,4 +22,4 @@ serde_json = "1" tokio = { version = "1", features = ["full"] } toml = "0.7.3" xdg = "2.4.1" -yacexits = { git = "https://git.tebibyte.media/yac/yacexits.git", branch = "c-entry", version = "0.2.0" } +yacexits = "0.1.5" diff --git a/src/main.rs b/src/main.rs index bb600b3..6deafc1 100644 --- a/src/main.rs +++ b/src/main.rs @@ -19,8 +19,6 @@ * Hopper. If not, see . */ -#![no_main] - mod api; mod args; mod client; @@ -33,9 +31,13 @@ use client::*; use config::*; use hopfile::*; +use std::env::args; + use yacexits::{ + exit, EX_OSERR, EX_SOFTWARE, + EX_USAGE, }; struct AppContext { @@ -43,12 +45,26 @@ struct AppContext { config: Config, } -#[tokio::main] -#[no_mangle] -async fn rust_main(arguments: yacexits::Args) -> Result { - let argv: Vec<&str> = arguments.into_iter().collect(); - let args = Arguments::from_args(argv.clone().into_iter()) +fn main() { + let argv = args().collect::>(); + match rust_main(argv.clone()) { + Ok(code) => exit(code), + Err((message, code)) => { + if code == EX_USAGE { + eprintln!("Usage: {} {}", argv[0], message); + } else { + eprintln!("{}: {}", argv[0], message); + } + exit(code); + }, + }; +} + +#[tokio::main] +async fn rust_main(argv: Vec) -> Result { + + let args = Arguments::from_args(argv.clone().iter().map(|s| s.as_str())) .map_err(|err| { ArgsError::from(err) })?; let config = Config::read_config()?;