pub struct ProjectInformation {
pub name: &'static str,
pub version: &'static str,
pub banner: &'static str,
}
pub struct ComponentInformation {
pub project: &'static ProjectInformation,
pub name: &'static str,
pub version: &'static str,
pub description: &'static str,
}
#[macro_export]
macro_rules! project {
($name:literal) => {
$crate::project!(PROJECT: $name);
};
($v:ident: $name:literal) => {
$crate::project!($v: $name => r#"______ ______ _____ _____ _ _ _____ _____ _____
| _ \| ___ \| _ || __ \| | | || ___| |_ _| |_ _|
| | | || |_/ /| | | || | \/| | | || |__ | | ___ | |
| | | || / | | | || | __ | | | || __| | | / _ \ | |
| |/ / | |\ \ \ \_/ /| |_\ \| |_| || |___ _| |_ | (_) | | |
|___/ \_| \_| \___/ \____/ \___/ \____/ \___/ \___/ \_/
"# );
};
($v:ident: $name:expr => $banner:expr) => {
pub const $v: $crate::core::info::ProjectInformation =
$crate::core::info::ProjectInformation {
name: $name,
version: env!("CARGO_PKG_VERSION"),
banner: $banner,
};
};
}
#[macro_export]
macro_rules! component {
($project:expr) => {
$crate::core::info::ComponentInformation {
project: &$project,
name: env!("CARGO_PKG_NAME"),
version: env!("CARGO_PKG_VERSION"),
description: env!("CARGO_PKG_DESCRIPTION"),
}
};
($v:ident, $project:expr) => {
pub const $v: $crate::core::info::ComponentInformation = $crate::component!($project);
};
}