pub struct CargoPkgInfo {}
#[macro_export]
macro_rules! unescape_newlines {
($s:expr) => {
$s.replace("\\n", "\n")
};
}
impl CargoPkgInfo {
#[allow(dead_code)]
pub fn pkg_name() -> Option<&'static str> {
option_env!("CARGO_PKG_NAME")
}
#[allow(dead_code)]
pub fn crate_name() -> Option<&'static str> {
option_env!("CARGO_CRATE_NAME")
}
#[allow(dead_code)]
pub fn pkg_version() -> Option<&'static str> {
option_env!("CARGO_PKG_VERSION")
}
#[allow(dead_code)]
pub fn version_major() -> Option<&'static str> {
option_env!("CARGO_PKG_VERSION_MAJOR")
}
#[allow(dead_code)]
pub fn version_major_numeric() -> Option<u32> {
option_env!("CARGO_PKG_VERSION_MAJOR").and_then(|s| s.parse().ok())
}
#[allow(dead_code)]
pub fn version_minor() -> Option<&'static str> {
option_env!("CARGO_PKG_VERSION_MINOR")
}
#[allow(dead_code)]
pub fn version_minor_numeric() -> Option<u32> {
option_env!("CARGO_PKG_VERSION_MINOR").and_then(|s| s.parse().ok())
}
#[allow(dead_code)]
pub fn version_patch() -> Option<&'static str> {
option_env!("CARGO_PKG_VERSION_PATCH")
}
#[allow(dead_code)]
pub fn version_patch_numeric() -> Option<u32> {
option_env!("CARGO_PKG_VERSION_PATCH").and_then(|s| s.parse().ok())
}
#[allow(dead_code)]
pub fn version_pre() -> Option<&'static str> {
option_env!("CARGO_PKG_VERSION_PRE")
}
#[allow(dead_code)]
pub fn authors() -> Option<&'static str> {
option_env!("CARGO_PKG_AUTHORS")
}
#[allow(dead_code)]
pub fn description() -> Option<&'static str> {
option_env!("CARGO_PKG_DESCRIPTION")
}
#[allow(dead_code)]
pub fn homepage() -> Option<&'static str> {
option_env!("CARGO_PKG_HOMEPAGE")
}
#[allow(dead_code)]
pub fn repository() -> Option<&'static str> {
option_env!("CARGO_PKG_REPOSITORY")
}
#[allow(dead_code)]
pub fn license() -> Option<&'static str> {
option_env!("CARGO_PKG_LICENSE")
}
#[allow(dead_code)]
pub fn license_content() -> Option<&'static str> {
let license = option_env!("LICENSE_CONTENT");
license?;
Some(Self::unescape_newlines(license.unwrap()))
}
#[allow(dead_code)]
pub fn rust_version() -> Option<&'static str> {
option_env!("CARGO_PKG_RUST_VERSION")
}
#[allow(dead_code)]
pub fn readme_path() -> Option<&'static str> {
option_env!("CARGO_PKG_README")
}
#[allow(dead_code)]
pub fn build_target() -> Option<&'static str> {
option_env!("BUILD_TARGET")
}
#[allow(dead_code)]
pub fn build_time_utc() -> Option<u64> {
option_env!("BUILD_TIME_UTC").and_then(|s| s.parse::<u64>().ok())
}
fn unescape_newlines(s: &str) -> &'static str {
Box::leak(s.replace("\\n", "\n").into_boxed_str())
}
#[allow(dead_code)]
pub fn split_multi_line_custom_var(env_data: Option<&'static str>) -> Option<Vec<String>> {
env_data.map(|data| {
let unescaped = unescape_newlines!(data); unescaped.lines().map(String::from).collect() })
}
}