pub mod cli;
pub mod configs;
pub mod debug;
pub mod screen_buffer;
pub mod serial_actor;
mod macros {
#[macro_export]
macro_rules! create_recursive {
($path:expr) => {
let create_recursive_dir = |p: &std::path::Path| {
if !p.exists() || !p.is_dir() {
let mut builder = std::fs::DirBuilder::new();
builder.recursive(true);
builder.create(p).expect("Recursive mode won't panic");
}
};
create_recursive_dir($path)
};
}
#[macro_export]
macro_rules! map_miette {
($expr:expr, $wrap_msg:expr, $usage:expr, help = $add_help:expr) => {
$expr.map_err(|e| {
use crossterm::style::Stylize;
miette::miette!(
help = format!("{}\nFor more information, try `sericom --help`.", $add_help),
"{e}"
)
.wrap_err(format!("{}\n\n{}\n", $wrap_msg, $usage).red())
})
};
($expr:expr, $wrap_msg:expr, $usage:expr) => {
$expr.map_err(|e| {
use crossterm::style::Stylize;
miette::miette!(help = "For more information, try `sericom --help`.", "{e}")
.wrap_err(format!("{}\n\n{}\n", $wrap_msg, $usage).red())
})
};
($expr:expr, $wrap_msg:expr, help = $add_help:expr) => {
$expr.map_err(|e| {
use crossterm::style::Stylize;
miette::miette!(
help = format!("{}\nFor more information, try `sericom --help`.", $add_help),
"{e}"
)
.wrap_err(format!("{}", $wrap_msg).red())
})
};
($expr:expr, $wrap_msg:expr) => {
$expr.map_err(|e| {
use crossterm::style::Stylize;
miette::miette!(help = "For more information, try `sericom --help`.", "{e}")
.wrap_err(format!("{}", $wrap_msg).red())
})
};
}
}