diff --git a/Cargo.toml b/Cargo.toml index 74f44f4..5bd80ae 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,6 +15,5 @@ libc-print = "0.1.21" bindgen = "0.63.0" [features] -default = [ "entry", "errors"] +default = [ "entry" ] entry = [] -errors = [] diff --git a/src/errors.rs b/src/entry/errors.rs similarity index 87% rename from src/errors.rs rename to src/entry/errors.rs index 2155ff0..64cce34 100644 --- a/src/errors.rs +++ b/src/entry/errors.rs @@ -31,3 +31,10 @@ impl From for (String, u32) { (err.message, err.code) } } + +impl From<(String, u32)> for YacError { + fn from(err: (String, u32)) -> Self { + let (message, code) = err; + YacError { message, code } + } +} diff --git a/src/entry/mod.rs b/src/entry/mod.rs index c133e1d..b9d6444 100644 --- a/src/entry/mod.rs +++ b/src/entry/mod.rs @@ -1,5 +1,7 @@ mod args; +mod errors; pub use args::Args; +pub use errors::*; use crate::{ exit, @@ -34,7 +36,7 @@ pub unsafe fn c_str_to_rust_unchecked(ptr: *const u8) -> &'static str { } extern "Rust" { - fn rust_main(args: args::Args) -> Result; + fn rust_main(args: args::Args) -> Result; } #[doc(hidden)] @@ -50,11 +52,11 @@ pub unsafe extern fn main(argc: c_int, argv: *const *const u8) -> c_int { libc_eprintln!("Unable to ascertain argv[0]."); exit(71); }); - rust_main(args).unwrap_or_else(|(err, code)| { - if code == EX_USAGE { - libc_eprintln!("Usage: {} {}", argv0, err); - } else { libc_eprintln!("{}: {}", argv0, err); } - code + rust_main(args).unwrap_or_else(|err| { + if err.code == EX_USAGE { + libc_eprintln!("Usage: {} {}", argv0, err.message); + } else { libc_eprintln!("{}: {}", argv0, err.message); } + err.code }) as _ }, Err(_) => { diff --git a/src/lib.rs b/src/lib.rs index 725dd55..ea48955 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -72,11 +72,9 @@ extern crate core; #[cfg(feature = "entry")] mod entry; -#[cfg(feature = "errors")] -mod errors; -pub use entry::Args; -pub use errors::*; +#[cfg(feature = "entry")] +pub use entry::*; pub fn exit(code: u32) -> ! { unsafe { libc::exit(code as i32 as libc::c_int); }