mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 10:59:55 +00:00
feat(bin) : max_values Macro for CLI args parsing (#5379)
Co-authored-by: Matthias Seitz <matthias.seitz@outlook.de>
This commit is contained in:
committed by
GitHub
parent
6c4a9cd1c3
commit
5beb105a7c
@ -1,6 +1,6 @@
|
||||
//! Additional helper types for CLI parsing.
|
||||
|
||||
use std::{fmt, str::FromStr};
|
||||
use std::{fmt, num::ParseIntError, str::FromStr};
|
||||
|
||||
/// A helper type that maps `0` to `None` when parsing CLI arguments.
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
||||
@ -36,6 +36,34 @@ impl FromStr for ZeroAsNone {
|
||||
}
|
||||
}
|
||||
|
||||
macro_rules! max_values {
|
||||
($name:ident, $ty:ident) => {
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
||||
/// A helper type for parsing "max" as the maximum value of the specified type.
|
||||
|
||||
pub(crate) struct $name(pub(crate) $ty);
|
||||
|
||||
impl fmt::Display for $name {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
write!(f, "{}", self.0)
|
||||
}
|
||||
}
|
||||
|
||||
impl FromStr for $name {
|
||||
type Err = ParseIntError;
|
||||
|
||||
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
||||
if s.eq_ignore_ascii_case("max") {
|
||||
Ok($name(<$ty>::MAX))
|
||||
} else {
|
||||
s.parse::<$ty>().map($name)
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
max_values!(MaxU32, u32);
|
||||
max_values!(MaxU64, u64);
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
Reference in New Issue
Block a user