#[macro_export]
macro_rules! bind {
($g:ident, declare_const) => {
$crate::bind!($g, declare_const, declare_const);
};
($g:ident, declare_const, $macro:ident) => {
macro_rules! $macro {
($vis:vis $name:ident, $ty:ty, $val:expr) => {
if ::core::stringify!($vis) == "pub" {
$g.public().space();
}
$g.declare_const(::core::stringify!($name), ::core::stringify!($ty), $val)
};
($vis:vis $name:ident, $ty:expr, $val:expr) => {
if ::core::stringify!($vis) == "pub" {
$g.public().space();
}
$g.declare_const(::core::stringify!($name), $ty, $val)
};
($name:expr, $ty:ty, $val:expr) => {
$g.declare_const($name, ::core::stringify!($ty), $val)
};
($name:expr, $ty:expr, $val:expr) => {
$g.declare_const($name, $ty, $val)
};
($vis:vis $name:ident: $ty:ty, $val:expr) => {
if ::core::stringify!($vis) == "pub" {
$g.public().space();
}
$g.declare_const(::core::stringify!($name), ::core::stringify!($ty), $val)
};
($vis:vis $name:ident: $ty:expr, $val:expr) => {
if ::core::stringify!($vis) == "pub" {
$g.public().space();
}
$g.declare_const(::core::stringify!($name), $ty, $val)
};
($name:expr: $ty:ty, $val:expr) => {
$g.declare_const($name, ::core::stringify!($ty), $val)
};
($name:expr: $ty:expr, $val:expr) => {
$g.declare_const($name, $ty, $val)
};
($vis:vis $name:ident, $ty:ty = $val:expr) => {
if ::core::stringify!($vis) == "pub" {
$g.public().space();
}
$g.declare_const(::core::stringify!($name), ::core::stringify!($ty), $val)
};
($vis:vis $name:ident, $ty:expr = $val:expr) => {
if ::core::stringify!($vis) == "pub" {
$g.public().space();
}
$g.declare_const(::core::stringify!($name), $ty, $val)
};
($name:expr, $ty:ty = $val:expr) => {
$g.declare_const($name, ::core::stringify!($ty), $val)
};
($name:expr, $ty:expr = $val:expr) => {
$g.declare_const($name, $ty, $val)
};
($vis:vis $name:ident: $ty:ty = $val:expr) => {
if ::core::stringify!($vis) == "pub" {
$g.public().space();
}
$g.declare_const(::core::stringify!($name), ::core::stringify!($ty), $val)
};
($vis:vis $name:ident: $ty:expr = $val:expr) => {
if ::core::stringify!($vis) == "pub" {
$g.public().space();
}
$g.declare_const(::core::stringify!($name), $ty, $val)
};
($name:expr: $ty:ty = $val:expr) => {
$g.declare_const($name, ::core::stringify!($ty), $val)
};
($name:expr: $ty:expr = $val:expr) => {
$g.declare_const($name, $ty, $val)
};
}
};
}