1use regex::Regex;
2use std::num::ParseIntError;
3
4fn parse_str(from: &str) -> Option<String> {
5 let gas = Regex::new(r"(?i:gas)\s*")
6 .unwrap()
7 .replace_all(from, "")
8 .to_string();
9 crate::util::parse(&gas, 0)
10}
11
12pub fn parse(input: &str) -> Result<u128, ParseIntError> {
13 parse_str(input)
14 .expect("Cannot parse string")
15 .parse::<u128>()
16}
17
18pub fn to_human(input: u128) -> String {
19 crate::util::to_human(input, "gas", 12, 12)
20}
21
22#[cfg(test)]
23mod tests {
24 use super::*;
25 const DATA: [[&str; 3]; 7] = [
26 ["1", "1", "1 gas"],
27 ["1,000", "1000", "1 kgas"],
28 ["1,000,000", "1000000", "1 Mgas"],
29 ["1,000,000,000", "1000000000", "1 Ggas"],
30 ["1,000,000,000,000", "1000000000000", "1 Tgas"],
31 ["1Tgas", "1000000000000", "1 Tgas"],
32 ["1Ggas", "1000000000", "1 Ggas"],
33 ];
34
35 #[test]
36 fn it_works() {
37 for line in &DATA {
38 let parsed = parse(line[0]).unwrap();
39 let expected = line[1];
40 assert_eq!(parsed.to_string(), expected);
41 assert_eq!(to_human(parsed), line[2]);
42 }
43 }
44}