#[macro_export]
macro_rules! env {
($tag:expr, $id:expr, $env_var_name:expr) => {
$crate::str!($tag, $id, {
let value = concat!(env!($env_var_name), "\0");
let value_cstr =
unsafe { core::ffi::CStr::from_bytes_with_nul_unchecked(value.as_bytes()) };
value_cstr
})
};
}
#[macro_export]
macro_rules! str {
($tag:expr, $id:expr, $str:expr) => {{
static ENTRY: $crate::StringEntry = $crate::StringEntry::new($tag, $id, $str);
ENTRY.addr()
}};
}
#[macro_export]
macro_rules! int {
($tag:expr, $id:expr, $int:expr) => {{
static ENTRY: $crate::IntegerEntry = $crate::IntegerEntry::new($tag, $id, $int);
ENTRY.addr()
}};
}
#[macro_export]
macro_rules! pointer {
($tag:expr, $id:expr, $ptr:expr) => {{
static ENTRY: $crate::PointerEntry = $crate::PointerEntry::new($tag, $id, $ptr);
ENTRY.addr()
}};
}
#[macro_export]
macro_rules! rp_program_name {
($name:expr) => {
$crate::str!(
$crate::consts::TAG_RASPBERRY_PI,
$crate::consts::ID_RP_PROGRAM_NAME,
$name
)
};
}
#[macro_export]
macro_rules! rp_cargo_bin_name {
() => {
$crate::env!(
$crate::consts::TAG_RASPBERRY_PI,
$crate::consts::ID_RP_PROGRAM_NAME,
"CARGO_BIN_NAME"
)
};
}
#[macro_export]
macro_rules! rp_program_version {
($version:expr) => {{
$crate::str!(
$crate::consts::TAG_RASPBERRY_PI,
$crate::consts::ID_RP_PROGRAM_VERSION,
$version
)
}};
}
#[macro_export]
macro_rules! rp_cargo_version {
() => {
$crate::env!(
$crate::consts::TAG_RASPBERRY_PI,
$crate::consts::ID_RP_PROGRAM_VERSION_STRING,
"CARGO_PKG_VERSION"
)
};
}
#[macro_export]
macro_rules! rp_program_url {
($url:expr) => {
$crate::str!(
$crate::consts::TAG_RASPBERRY_PI,
$crate::consts::ID_RP_PROGRAM_URL,
$url
)
};
}
#[macro_export]
macro_rules! rp_cargo_homepage_url {
() => {
$crate::env!(
$crate::consts::TAG_RASPBERRY_PI,
$crate::consts::ID_RP_PROGRAM_URL,
"CARGO_PKG_HOMEPAGE"
)
};
}
#[macro_export]
macro_rules! rp_program_description {
($description:expr) => {
$crate::str!(
$crate::consts::TAG_RASPBERRY_PI,
$crate::consts::ID_RP_PROGRAM_DESCRIPTION,
$description
)
};
}
#[macro_export]
macro_rules! rp_program_build_attribute {
() => {
$crate::str!(
$crate::consts::TAG_RASPBERRY_PI,
$crate::consts::ID_RP_PROGRAM_BUILD_ATTRIBUTE,
{
if cfg!(debug_assertions) {
c"debug"
} else {
c"release"
}
}
)
};
}
#[macro_export]
macro_rules! rp_pico_board {
($board:expr) => {
$crate::str!(
$crate::consts::TAG_RASPBERRY_PI,
$crate::consts::ID_RP_PICO_BOARD,
$board
)
};
}
#[macro_export]
macro_rules! rp_binary_end {
($ptr:ident) => {{
$crate::pointer!(
$crate::consts::TAG_RASPBERRY_PI,
$crate::consts::ID_RP_BINARY_END,
unsafe { core::ptr::addr_of!($ptr).cast() }
)
}};
}