make parse_number fallible

This commit is contained in:
Jan Christian Grünhage 2021-12-18 17:28:06 +01:00
parent 81b7e84097
commit 71be88574c

View file

@ -22,21 +22,23 @@ pub fn parse_number_with_radix<T: Num>(
base: u32, base: u32,
limit: Option<usize>, limit: Option<usize>,
) -> Option<T> { ) -> Option<T> {
tokens.skip_tokens_while(|t| *t == ' '); tokens.optional(|t| {
let mut remaining = limit.map(|x| x as isize).unwrap_or(isize::MAX); t.skip_tokens_while(|t| *t == ' ');
let mut prefix = String::new(); let mut remaining = limit.map(|x| x as isize).unwrap_or(isize::MAX);
if tokens.token('-') { let mut prefix = String::new();
prefix.push('-'); if t.token('-') {
} prefix.push('-');
let digits: String = tokens }
.tokens_while(|c| { let digits: String = t
remaining -= 1; .tokens_while(|c| {
c.is_digit(base) && remaining >= 0 remaining -= 1;
}) c.is_digit(base) && remaining >= 0
.collect(); })
(!digits.is_empty()) .collect();
.then(|| T::from_str_radix(&format!("{}{}", prefix, digits), base).ok()) (!digits.is_empty())
.flatten() .then(|| T::from_str_radix(&format!("{}{}", prefix, digits), base).ok())
.flatten()
})
} }
pub fn parse_n<R, T, I, P, S, const N: usize>( pub fn parse_n<R, T, I, P, S, const N: usize>(