feat: added more ethereum units (#1760)

This commit is contained in:
Saurabh 2022-10-03 23:52:55 +05:30 committed by GitHub
parent f3a5a7aef0
commit 0c2abf9d7f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 33 additions and 1 deletions

View File

@ -6,8 +6,16 @@ use std::{convert::TryFrom, fmt, str::FromStr};
pub enum Units { pub enum Units {
/// Wei is equivalent to 1 wei. /// Wei is equivalent to 1 wei.
Wei, Wei,
/// Kwei is equivalent to 1e3 wei.
Kwei,
/// Mwei is equivalent to 1e6 wei.
Mwei,
/// Gwei is equivalent to 1e9 wei. /// Gwei is equivalent to 1e9 wei.
Gwei, Gwei,
/// Twei is equivalent to 1e12 wei.
Twei,
/// Pwei is equivalent to 1e15 wei.
Pwei,
/// Ether is equivalent to 1e18 wei. /// Ether is equivalent to 1e18 wei.
Ether, Ether,
/// Other less frequent unit sizes, equivalent to 1e{0} wei. /// Other less frequent unit sizes, equivalent to 1e{0} wei.
@ -74,7 +82,11 @@ impl FromStr for Units {
fn from_str(s: &str) -> Result<Self, Self::Err> { fn from_str(s: &str) -> Result<Self, Self::Err> {
Ok(match s.to_lowercase().as_str() { Ok(match s.to_lowercase().as_str() {
"eth" | "ether" => Units::Ether, "eth" | "ether" => Units::Ether,
"gwei" | "nano" | "nanoether" => Units::Gwei, "pwei" | "milli" | "milliether" | "finney" => Units::Pwei,
"twei" | "micro" | "microether" | "szabo" => Units::Twei,
"gwei" | "nano" | "nanoether" | "shannon" => Units::Gwei,
"mwei" | "pico" | "picoether" | "lovelace" => Units::Mwei,
"kwei" | "femto" | "femtoether" | "babbage" => Units::Kwei,
"wei" => Units::Wei, "wei" => Units::Wei,
_ => return Err(ConversionError::UnrecognizedUnits(s.to_string())), _ => return Err(ConversionError::UnrecognizedUnits(s.to_string())),
}) })
@ -103,7 +115,11 @@ impl Units {
pub fn as_num(&self) -> u32 { pub fn as_num(&self) -> u32 {
match self { match self {
Units::Wei => 0, Units::Wei => 0,
Units::Kwei => 3,
Units::Mwei => 6,
Units::Gwei => 9, Units::Gwei => 9,
Units::Twei => 12,
Units::Pwei => 15,
Units::Ether => 18, Units::Ether => 18,
Units::Other(inner) => *inner, Units::Other(inner) => *inner,
} }
@ -118,7 +134,11 @@ mod tests {
#[test] #[test]
fn test_units() { fn test_units() {
assert_eq!(Wei.as_num(), 0); assert_eq!(Wei.as_num(), 0);
assert_eq!(Kwei.as_num(), 3);
assert_eq!(Mwei.as_num(), 6);
assert_eq!(Gwei.as_num(), 9); assert_eq!(Gwei.as_num(), 9);
assert_eq!(Twei.as_num(), 12);
assert_eq!(Pwei.as_num(), 15);
assert_eq!(Ether.as_num(), 18); assert_eq!(Ether.as_num(), 18);
assert_eq!(Other(10).as_num(), 10); assert_eq!(Other(10).as_num(), 10);
assert_eq!(Other(20).as_num(), 20); assert_eq!(Other(20).as_num(), 20);
@ -127,15 +147,27 @@ mod tests {
#[test] #[test]
fn test_into() { fn test_into() {
assert_eq!(Units::try_from("wei").unwrap(), Wei); assert_eq!(Units::try_from("wei").unwrap(), Wei);
assert_eq!(Units::try_from("kwei").unwrap(), Kwei);
assert_eq!(Units::try_from("mwei").unwrap(), Mwei);
assert_eq!(Units::try_from("gwei").unwrap(), Gwei); assert_eq!(Units::try_from("gwei").unwrap(), Gwei);
assert_eq!(Units::try_from("twei").unwrap(), Twei);
assert_eq!(Units::try_from("pwei").unwrap(), Pwei);
assert_eq!(Units::try_from("ether").unwrap(), Ether); assert_eq!(Units::try_from("ether").unwrap(), Ether);
assert_eq!(Units::try_from("wei".to_string()).unwrap(), Wei); assert_eq!(Units::try_from("wei".to_string()).unwrap(), Wei);
assert_eq!(Units::try_from("kwei".to_string()).unwrap(), Kwei);
assert_eq!(Units::try_from("mwei".to_string()).unwrap(), Mwei);
assert_eq!(Units::try_from("gwei".to_string()).unwrap(), Gwei); assert_eq!(Units::try_from("gwei".to_string()).unwrap(), Gwei);
assert_eq!(Units::try_from("twei".to_string()).unwrap(), Twei);
assert_eq!(Units::try_from("pwei".to_string()).unwrap(), Pwei);
assert_eq!(Units::try_from("ether".to_string()).unwrap(), Ether); assert_eq!(Units::try_from("ether".to_string()).unwrap(), Ether);
assert_eq!(Units::try_from(&"wei".to_string()).unwrap(), Wei); assert_eq!(Units::try_from(&"wei".to_string()).unwrap(), Wei);
assert_eq!(Units::try_from(&"kwei".to_string()).unwrap(), Kwei);
assert_eq!(Units::try_from(&"mwei".to_string()).unwrap(), Mwei);
assert_eq!(Units::try_from(&"gwei".to_string()).unwrap(), Gwei); assert_eq!(Units::try_from(&"gwei".to_string()).unwrap(), Gwei);
assert_eq!(Units::try_from(&"twei".to_string()).unwrap(), Twei);
assert_eq!(Units::try_from(&"pwei".to_string()).unwrap(), Pwei);
assert_eq!(Units::try_from(&"ether".to_string()).unwrap(), Ether); assert_eq!(Units::try_from(&"ether".to_string()).unwrap(), Ether);
} }
} }