feat(chain): enum values + TryFrom<u64> (#782)
* feat(chain): map Chain enum to values * feat(chain): support TryFrom<u64> * chore: use parsechain error for the try_from impl Co-authored-by: Georgios Konstantopoulos <me@gakonst.com>
This commit is contained in:
parent
e3c86231de
commit
092bd96a39
|
@ -1,6 +1,7 @@
|
||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
use thiserror::Error;
|
use thiserror::Error;
|
||||||
|
|
||||||
|
use core::convert::TryFrom;
|
||||||
use std::{fmt, str::FromStr};
|
use std::{fmt, str::FromStr};
|
||||||
|
|
||||||
use crate::types::U256;
|
use crate::types::U256;
|
||||||
|
@ -9,25 +10,26 @@ use crate::types::U256;
|
||||||
#[error("Failed to parse chain: {0}")]
|
#[error("Failed to parse chain: {0}")]
|
||||||
pub struct ParseChainError(String);
|
pub struct ParseChainError(String);
|
||||||
|
|
||||||
|
#[repr(u64)]
|
||||||
#[derive(Debug, Clone, Copy, Eq, PartialEq, Hash, Deserialize)]
|
#[derive(Debug, Clone, Copy, Eq, PartialEq, Hash, Deserialize)]
|
||||||
#[serde(rename_all = "snake_case")]
|
#[serde(rename_all = "snake_case")]
|
||||||
pub enum Chain {
|
pub enum Chain {
|
||||||
Mainnet,
|
Mainnet = 1,
|
||||||
Ropsten,
|
Ropsten = 3,
|
||||||
Rinkeby,
|
Rinkeby = 4,
|
||||||
Goerli,
|
Goerli = 5,
|
||||||
Kovan,
|
Kovan = 42,
|
||||||
XDai,
|
XDai = 100,
|
||||||
Polygon,
|
Polygon = 137,
|
||||||
PolygonMumbai,
|
PolygonMumbai = 80001,
|
||||||
Avalanche,
|
Avalanche = 43114,
|
||||||
AvalancheFuji,
|
AvalancheFuji = 43113,
|
||||||
Sepolia,
|
Sepolia = 11155111,
|
||||||
Moonbeam,
|
Moonbeam = 1287,
|
||||||
MoonbeamDev,
|
MoonbeamDev = 1281,
|
||||||
Moonriver,
|
Moonriver = 1285,
|
||||||
Optimism,
|
Optimism = 10,
|
||||||
OptimismKovan,
|
OptimismKovan = 69,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl fmt::Display for Chain {
|
impl fmt::Display for Chain {
|
||||||
|
@ -38,24 +40,7 @@ impl fmt::Display for Chain {
|
||||||
|
|
||||||
impl From<Chain> for u32 {
|
impl From<Chain> for u32 {
|
||||||
fn from(chain: Chain) -> Self {
|
fn from(chain: Chain) -> Self {
|
||||||
match chain {
|
chain as u32
|
||||||
Chain::Mainnet => 1,
|
|
||||||
Chain::Ropsten => 3,
|
|
||||||
Chain::Rinkeby => 4,
|
|
||||||
Chain::Goerli => 5,
|
|
||||||
Chain::Kovan => 42,
|
|
||||||
Chain::XDai => 100,
|
|
||||||
Chain::Polygon => 137,
|
|
||||||
Chain::PolygonMumbai => 80001,
|
|
||||||
Chain::Avalanche => 43114,
|
|
||||||
Chain::AvalancheFuji => 43113,
|
|
||||||
Chain::Sepolia => 11155111,
|
|
||||||
Chain::Moonbeam => 1287,
|
|
||||||
Chain::MoonbeamDev => 1281,
|
|
||||||
Chain::Moonriver => 1285,
|
|
||||||
Chain::Optimism => 10,
|
|
||||||
Chain::OptimismKovan => 69,
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -71,6 +56,32 @@ impl From<Chain> for u64 {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl TryFrom<u64> for Chain {
|
||||||
|
type Error = ParseChainError;
|
||||||
|
|
||||||
|
fn try_from(chain: u64) -> Result<Chain, Self::Error> {
|
||||||
|
match chain {
|
||||||
|
1 => Ok(Chain::Mainnet),
|
||||||
|
3 => Ok(Chain::Ropsten),
|
||||||
|
4 => Ok(Chain::Rinkeby),
|
||||||
|
5 => Ok(Chain::Goerli),
|
||||||
|
42 => Ok(Chain::Kovan),
|
||||||
|
100 => Ok(Chain::XDai),
|
||||||
|
137 => Ok(Chain::Polygon),
|
||||||
|
80001 => Ok(Chain::PolygonMumbai),
|
||||||
|
43114 => Ok(Chain::Avalanche),
|
||||||
|
43113 => Ok(Chain::AvalancheFuji),
|
||||||
|
11155111 => Ok(Chain::Sepolia),
|
||||||
|
1287 => Ok(Chain::Moonbeam),
|
||||||
|
1281 => Ok(Chain::MoonbeamDev),
|
||||||
|
1285 => Ok(Chain::Moonriver),
|
||||||
|
10 => Ok(Chain::Optimism),
|
||||||
|
69 => Ok(Chain::OptimismKovan),
|
||||||
|
_ => return Err(ParseChainError(chain.to_string())),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl FromStr for Chain {
|
impl FromStr for Chain {
|
||||||
type Err = ParseChainError;
|
type Err = ParseChainError;
|
||||||
fn from_str(chain: &str) -> Result<Self, Self::Err> {
|
fn from_str(chain: &str) -> Result<Self, Self::Err> {
|
||||||
|
|
Loading…
Reference in New Issue