#![no_std]
mod privat;
#[doc(hidden)]
pub mod __priv {
pub use core;
pub use core::option::Option::{self, None, Some};
pub use crate::privat::{parse_bounded, parsers, RangeWrap};
}
#[macro_export]
macro_rules! parse_env {
($var_name:literal as $typ:ident) => {{
const {
match $crate::__priv::parsers::$typ($crate::__priv::core::env!($var_name).as_bytes(), $crate::__priv::None)
{
$crate::__priv::Some(v) => v,
$crate::__priv::None => {
$crate::__priv::core::panic!($crate::__priv::core::concat!(
"error: the value in `",
$crate::__priv::core::stringify!($s),
"` doesn't parse as a `",
$crate::__priv::core::stringify!($typ),
"`, or is out of range.",
));
}
}
}
}};
($var_name:literal as $typ:ident else $default:expr) => {{
const {
const __ENVPARSE_DEFAULT: $typ = $default;
match $crate::__priv::core::option_env!($var_name) {
$crate::__priv::None => __ENVPARSE_DEFAULT,
$crate::__priv::Some(s) => {
match $crate::__priv::parsers::$typ(s.as_bytes(), $crate::__priv::Some(__ENVPARSE_DEFAULT)) {
$crate::__priv::Some(v) => v,
$crate::__priv::None => {
$crate::__priv::core::panic!($crate::__priv::core::concat!(
"error: the value in `",
$crate::__priv::core::stringify!($s),
"` doesn't parse as a `",
$crate::__priv::core::stringify!($typ),
"`, or is out of range.",
));
}
}
}
}
}
}};
($var_name:literal as $typ:ident in $range:expr) => {{
const {
match $crate::__priv::parse_bounded::$typ(
$crate::__priv::core::env!($var_name).as_bytes(),
$crate::__priv::None,
$crate::__priv::Some(
$crate::__priv::RangeWrap($range, $crate::__priv::core::marker::PhantomData::<$typ>).start(),
),
$crate::__priv::Some(
$crate::__priv::RangeWrap($range, $crate::__priv::core::marker::PhantomData::<$typ>).end_incl(),
),
false, ) {
$crate::__priv::Some(v) => v,
$crate::__priv::None => {
$crate::__priv::core::panic!($crate::__priv::core::concat!(
"error: the value in ",
$crate::__priv::core::stringify!($s),
" doesn't parse as a `",
$crate::__priv::core::stringify!($typ),
"`, or is outside of the range `",
$crate::__priv::core::stringify!($range),
"`."
));
}
}
}
}};
($var_name:literal as $typ:ident (in $range:expr) else $default:expr) => {{
const {
const __ENVPARSE_DEFAULT: $typ = $default;
match $crate::__priv::core::option_env!($var_name) {
$crate::__priv::None => __ENVPARSE_DEFAULT,
$crate::__priv::Some(s) => {
match $crate::__priv::parse_bounded::$typ(
s.as_bytes(),
$crate::__priv::Some(__ENVPARSE_DEFAULT),
$crate::__priv::Some(
$crate::__priv::RangeWrap($range, $crate::__priv::core::marker::PhantomData::<$typ>)
.start(),
),
$crate::__priv::Some(
$crate::__priv::RangeWrap($range, $crate::__priv::core::marker::PhantomData::<$typ>)
.end_incl(),
),
false, ) {
$crate::__priv::Some(v) => v,
$crate::__priv::None => {
$crate::__priv::core::panic!($crate::__priv::core::concat!(
"error: the value in ",
$crate::__priv::core::stringify!($s),
" doesn't parse as a `",
$crate::__priv::core::stringify!($typ),
"`, or is outside of the range`",
$crate::__priv::core::stringify!($range),
"`."
));
}
}
}
}
}
}};
(try $var_name:literal as $typ:ident) => {{
const {
match $crate::__priv::core::option_env!($var_name) {
$crate::__priv::None => $crate::__priv::None,
$crate::__priv::Some(s) if s.is_empty() => $crate::__priv::None,
$crate::__priv::Some(s) => match $crate::__priv::parsers::$typ(s.as_bytes(), $crate::__priv::None) {
$crate::__priv::None => {
$crate::__priv::core::panic!($crate::__priv::core::concat!(
"error: the value in ",
$crate::__priv::core::stringify!($s),
" doesn't parse as a `",
$crate::__priv::core::stringify!($typ),
"`, or is out of range.",
));
}
opt => opt,
},
}
}
}};
(try $var_name:literal as $typ:ident in $range:expr) => {{
const {
match ::core::option_env!($var_name) {
$crate::__priv::None => $crate::__priv::None,
$crate::__priv::Some(s) if s.is_empty() => $crate::__priv::None,
$crate::__priv::Some(s) => match $crate::__priv::parse_bounded::$typ(
s.as_bytes(),
$crate::__priv::None,
$crate::__priv::Some(
$crate::__priv::RangeWrap($range, $crate::__priv::core::marker::PhantomData::<$typ>).start(),
),
$crate::__priv::Some(
$crate::__priv::RangeWrap($range, $crate::__priv::core::marker::PhantomData::<$typ>).end_incl(),
),
false, ) {
$crate::__priv::None => {
::core::panic!(::core::concat!(
"error: the value in ",
::core::stringify!($s),
" doesn't parse as a `",
::core::stringify!($typ),
"`, or is outside of the range `",
::core::stringify!($range),
"`.",
));
}
opt => opt,
},
}
}
}};
}
pub mod parse;