1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
/// Print a message to stderr with an "error: " prefix
///
/// Parameters:
/// - `args`: A `std::fmt::Arguments`
pub(crate) fn error(args: std::fmt::Arguments) {
eprintln!("error: {args}");
}
/// Print a message to stderr with a "debug: " prefix
///
/// Parameters:
/// - `args`: A `std::fmt::Arguments`
pub(crate) fn debug(args: std::fmt::Arguments) {
eprintln!("debug: {args}");
}
/// Convert a string literal into a String
#[inline]
pub fn string(value: &'static str) -> String {
value.to_string()
}
/// Convert a value into a string
#[macro_export]
macro_rules! string {
( $value:expr ) => {
$crate::macros::string($value)
};
}
/// Print a message to stderr with an "debug : " prefix
///
/// Parameters:
/// - `fmt`: A format string.
/// - `args*`: Format string arguments.
#[macro_export]
macro_rules! debug {
( $fmt:expr $(, $args:expr )* ) => (
$crate::macros::debug(format_args!($fmt, $( $args ),*))
);
}
/// Print a message to stderr with a "error: " prefix and terminate the process
///
/// Parameters:
/// - `fmt`: A format string.
/// - `args*`: Format string arguments.
#[macro_export]
macro_rules! error {
( $fmt:expr $(, $args:expr )* ) => {
$crate::macros::error(format_args!($fmt, $( $args ),*));
std::process::exit(1);
}
}
/// Implement std::display::Display with a custom format
/// Parameters:
/// - `struct_name`: The struct to extend.
/// - `format`: The format string to use.
#[macro_export]
macro_rules! impl_display_fmt {
($struct_name:ident, $format:expr) => {
impl std::fmt::Display for $struct_name {
fn fmt(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
return write!(formatter, $format, self);
}
}
};
}
/// Implement std::display::Display with a pretty-print format
/// Parameters:
/// - `struct_name`: The struct to extend.
#[macro_export]
macro_rules! impl_display {
($x:ident) => {
impl_display_fmt!($x, "{:#?}");
};
}
/// Implement std::display::Display with a brief debug format
/// Parameters:
/// - `struct_name`: The struct to extend.
#[macro_export]
macro_rules! impl_display_brief {
($x:ident) => {
impl_display_fmt!($x, "{:?}");
};
}