unc_units_core/
gas.rs

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}