From 3544d7e52ed7ff9914ffc3b29546c95138ab62a1 Mon Sep 17 00:00:00 2001 From: Christoph Otter Date: Wed, 21 Jun 2023 10:45:43 +0200 Subject: [PATCH] Revert "Use Coin's FromStr impl in FromStr impl of Coins" This reverts commit 39dc5115779862c41d8d3fc238295b90476d76d2. --- packages/std/src/coins.rs | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/packages/std/src/coins.rs b/packages/std/src/coins.rs index 1548cfffad..a9aa88989f 100644 --- a/packages/std/src/coins.rs +++ b/packages/std/src/coins.rs @@ -1,3 +1,4 @@ +use std::any::type_name; use std::collections::BTreeMap; use std::fmt; use std::str::FromStr; @@ -80,9 +81,29 @@ impl FromStr for Coins { return Ok(Self::default()); } + // TODO: use FromStr impl for Coin once it's merged + let parse_coin_str = |s: &str| -> StdResult { + for (i, c) in s.chars().enumerate() { + if !c.is_ascii_digit() { + let amount = Uint128::from_str(&s[..i]).map_err(|_| { + StdError::generic_err( + "Parsing Coin: Missing amount or non-digit characters in amount", + ) + })?; + let denom = String::from(&s[i..]); + return Ok(Coin { amount, denom }); + } + } + + Err(StdError::parse_err( + type_name::(), + format!("invalid coin string: {s}"), + )) + }; + Ok(s.split(',') - .map(Coin::from_str) - .collect::, _>>()? + .map(parse_coin_str) + .collect::>>()? .try_into()?) } }