From 81871d54a2bc3b765d5c3bee219b3d7725e2d362 Mon Sep 17 00:00:00 2001 From: John Shin Date: Tue, 30 May 2023 00:33:14 -0700 Subject: [PATCH] core: refactor parse_number in size parser --- src/uucore/src/lib/parser/parse_size.rs | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/src/uucore/src/lib/parser/parse_size.rs b/src/uucore/src/lib/parser/parse_size.rs index af4cf990d..c6a02dfae 100644 --- a/src/uucore/src/lib/parser/parse_size.rs +++ b/src/uucore/src/lib/parser/parse_size.rs @@ -156,25 +156,16 @@ impl<'parser> Parser<'parser> { if numeric_string.is_empty() { 1 } else { - match numeric_string.parse() { - Ok(n) => n, - Err(_) => return Err(ParseSizeError::parse_failure(size)), - } + self.parse_number(&numeric_string, 10, size)? } } NumberSystem::Octal => { let trimmed_string = numeric_string.trim_start_matches('0'); - match u64::from_str_radix(trimmed_string, 8) { - Ok(res) => res, - Err(_) => return Err(ParseSizeError::parse_failure(size)), - } + self.parse_number(trimmed_string, 8, size)? } NumberSystem::Hexadecimal => { let trimmed_string = numeric_string.trim_start_matches("0x"); - match u64::from_str_radix(trimmed_string, 16) { - Ok(res) => res, - Err(_) => return Err(ParseSizeError::parse_failure(size)), - } + self.parse_number(trimmed_string, 16, size)? } }; @@ -204,6 +195,16 @@ impl<'parser> Parser<'parser> { NumberSystem::Decimal } + + fn parse_number( + &self, + numeric_string: &str, + radix: u32, + original_size: &str, + ) -> Result { + u64::from_str_radix(numeric_string, radix) + .map_err(|_| ParseSizeError::ParseFailure(original_size.to_string())) + } } /// Parse a size string into a number of bytes.