| 642 | } |
| 643 | |
| 644 | fn parse_quantity<C, I>(iter: &mut ParseIter<I>) -> Result<Option<CFormatQuantity>, ParsingError> |
| 645 | where |
| 646 | C: FormatChar, |
| 647 | I: Iterator<Item = C>, |
| 648 | { |
| 649 | if let Some(&(_, c)) = iter.peek() { |
| 650 | if c.eq_char('*') { |
| 651 | iter.next().unwrap(); |
| 652 | return Ok(Some(CFormatQuantity::FromValuesTuple)); |
| 653 | } |
| 654 | if let Some(i) = c.to_char_lossy().to_digit(10) { |
| 655 | let mut num = i as i32; |
| 656 | iter.next().unwrap(); |
| 657 | while let Some(&(index, c)) = iter.peek() { |
| 658 | if let Some(i) = c.to_char_lossy().to_digit(10) { |
| 659 | num = num |
| 660 | .checked_mul(10) |
| 661 | .and_then(|num| num.checked_add(i as i32)) |
| 662 | .ok_or((CFormatErrorType::IntTooBig, index))?; |
| 663 | iter.next().unwrap(); |
| 664 | } else { |
| 665 | break; |
| 666 | } |
| 667 | } |
| 668 | return Ok(Some(CFormatQuantity::Amount(num.unsigned_abs() as usize))); |
| 669 | } |
| 670 | } |
| 671 | Ok(None) |
| 672 | } |
| 673 | |
| 674 | fn parse_precision<C, I>(iter: &mut ParseIter<I>) -> Result<Option<CFormatPrecision>, ParsingError> |
| 675 | where |