Fix buggy string comparison in OCW pallet example (#8602)

This commit is contained in:
Keith Yeung
2021-04-12 11:40:20 -07:00
committed by GitHub
parent 59b900bae3
commit 3b8a0ffa6a
@@ -612,18 +612,17 @@ impl<T: Config> Pallet<T> {
/// Returns `None` when parsing failed or `Some(price in cents)` when parsing is successful.
fn parse_price(price_str: &str) -> Option<u32> {
let val = lite_json::parse_json(price_str);
let price = val.ok().and_then(|v| match v {
let price = match val.ok()? {
JsonValue::Object(obj) => {
let mut chars = "USD".chars();
obj.into_iter()
.find(|(k, _)| k.iter().all(|k| Some(*k) == chars.next()))
.and_then(|v| match v.1 {
JsonValue::Number(number) => Some(number),
_ => None,
})
let (_, v) = obj.into_iter()
.find(|(k, _)| k.iter().copied().eq("USD".chars()))?;
match v {
JsonValue::Number(number) => number,
_ => return None,
}
},
_ => None
})?;
_ => return None,
};
let exp = price.fraction_length.checked_sub(2).unwrap_or(0);
Some(price.integer as u32 * 100 + (price.fraction / 10_u64.pow(exp)) as u32)