diff --git a/src/parsing.rs b/src/parsing.rs index 3827d52..c3c2850 100644 --- a/src/parsing.rs +++ b/src/parsing.rs @@ -22,21 +22,23 @@ pub fn parse_number_with_radix( base: u32, limit: Option, ) -> Option { - tokens.skip_tokens_while(|t| *t == ' '); - let mut remaining = limit.map(|x| x as isize).unwrap_or(isize::MAX); - let mut prefix = String::new(); - if tokens.token('-') { - prefix.push('-'); - } - let digits: String = tokens - .tokens_while(|c| { - remaining -= 1; - c.is_digit(base) && remaining >= 0 - }) - .collect(); - (!digits.is_empty()) - .then(|| T::from_str_radix(&format!("{}{}", prefix, digits), base).ok()) - .flatten() + tokens.optional(|t| { + t.skip_tokens_while(|t| *t == ' '); + let mut remaining = limit.map(|x| x as isize).unwrap_or(isize::MAX); + let mut prefix = String::new(); + if t.token('-') { + prefix.push('-'); + } + let digits: String = t + .tokens_while(|c| { + remaining -= 1; + c.is_digit(base) && remaining >= 0 + }) + .collect(); + (!digits.is_empty()) + .then(|| T::from_str_radix(&format!("{}{}", prefix, digits), base).ok()) + .flatten() + }) } pub fn parse_n(