From 3d4e5d98ea1211e5d7f931a43bcae463f5fcb10a Mon Sep 17 00:00:00 2001 From: "Demi M. Obenour" Date: Fri, 25 Sep 2020 19:35:56 -0400 Subject: [PATCH] Allow 1.0 as a commission value --- src/bin/ledgeracio/common.rs | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/bin/ledgeracio/common.rs b/src/bin/ledgeracio/common.rs index 611cc2d..f634aa6 100644 --- a/src/bin/ledgeracio/common.rs +++ b/src/bin/ledgeracio/common.rs @@ -144,7 +144,18 @@ pub fn pad(mut zeros: u8, value: u128) -> String { } pub fn parse_ppb(data: &str) -> Result { - if data == "1" { + if data.len() > 11 { + Err("Commission too long. Check for excess trailing zeroes." + .to_owned() + .into()) + } else if data == "1" { + Ok(1_000_000_000) + } else if data.starts_with("1.") { + for i in data[2..].bytes() { + if i != b'0' { + return Err("Commission cannot exceed 1".to_owned().into()) + } + } Ok(1_000_000_000) } else if data == "0" { Ok(0) @@ -154,10 +165,6 @@ pub fn parse_ppb(data: &str) -> Result { .to_owned() .into(), ) - } else if data.len() > 11 { - Err("Commission too long. Check for excess trailing zeroes." - .to_owned() - .into()) } else { let mut len = data.len() - 2; let mut res: u32 = str::parse(&data[2..])?; @@ -184,6 +191,8 @@ mod tests { #[test] fn parse_ppb_works() { + assert_eq!(parse_ppb("1.000000000").unwrap(), 1_000_000_000); + assert!(parse_ppb("1.0000000000").is_err()); assert_eq!(parse_ppb("1").unwrap(), 1_000_000_000); assert_eq!(parse_ppb("0").unwrap(), 0); assert!(parse_ppb("0.").is_err());