use crate::ffi;
use std::os::raw::{c_char, c_int};
#[inline]
pub fn show_usage() {
unsafe {
ffi::builtin_usage();
}
}
#[inline]
pub fn show_help() {
unsafe {
ffi::builtin_help();
}
}
pub fn missing_argument() {
unsafe {
let msg = [ffi::list_opttype as _, ffi::list_optopt as _, 0];
ffi::sh_needarg(msg.as_ptr());
}
}
macro_rules! log_fn {
($name:ident, $bash_fn:ident, $doc:literal) => {
#[inline]
#[doc = $doc]
pub fn $name<S: AsRef<[u8]>>(msg: S) {
const MSG_FORMAT: *const c_char = b"%.*s\0".as_ptr().cast();
let bytes = msg.as_ref();
unsafe {
$crate::ffi::$bash_fn(MSG_FORMAT, bytes.len() as c_int, bytes.as_ptr());
}
}
};
}
log_fn!(
error,
builtin_error,
"Shows an error message using the `builtin_error()` function from Bash."
);
#[macro_export]
macro_rules! error {
($($arg:tt)+) => {
$crate::log::error(format!($($arg)+))
}
}
log_fn!(
warning,
builtin_warning,
"Shows a warning message using the `builtin_warning()` function from Bash."
);
#[macro_export]
macro_rules! warning {
($($arg:tt)+) => {
$crate::log::warning(format!($($arg)+))
}
}