raiden_primitives/types/
chain_id.rs

1#![warn(clippy::missing_docs_in_private_items)]
2
3use std::str::FromStr;
4
5use derive_more::Display;
6use web3::types::U256;
7
8/// Chain identifier
9#[repr(u8)]
10#[derive(Copy, Clone, Display, Debug, Eq, Hash, PartialEq)]
11pub enum ChainID {
12	Mainnet = 1,
13	Ropsten = 3,
14	Rinkeby = 4,
15	Goerli = 5,
16	Private(U256),
17}
18
19impl From<u64> for ChainID {
20	fn from(value: u64) -> Self {
21		match value {
22			1 => ChainID::Mainnet,
23			3 => ChainID::Ropsten,
24			4 => ChainID::Rinkeby,
25			5 => ChainID::Goerli,
26			id => ChainID::Private(id.into()),
27		}
28	}
29}
30
31impl From<ChainID> for u64 {
32	fn from(val: ChainID) -> Self {
33		match val {
34			ChainID::Mainnet => 1u64,
35			ChainID::Ropsten => 3u64,
36			ChainID::Rinkeby => 4u64,
37			ChainID::Goerli => 5u64,
38			ChainID::Private(id) => id.as_u64(),
39		}
40	}
41}
42
43impl From<U256> for ChainID {
44	fn from(value: U256) -> Self {
45		let mainnet: U256 = 1u64.into();
46		let ropsten: U256 = 3u64.into();
47		let rinkeby: U256 = 4u64.into();
48		let goerli: U256 = 5u64.into();
49
50		if value == mainnet {
51			ChainID::Mainnet
52		} else if value == ropsten {
53			ChainID::Ropsten
54		} else if value == rinkeby {
55			ChainID::Rinkeby
56		} else if value == goerli {
57			ChainID::Goerli
58		} else {
59			ChainID::Private(value)
60		}
61	}
62}
63
64impl From<ChainID> for U256 {
65	fn from(val: ChainID) -> Self {
66		let chain_id: u64 = val.into();
67		chain_id.into()
68	}
69}
70
71impl From<ChainID> for Vec<u8> {
72	fn from(val: ChainID) -> Self {
73		let chain_id: u64 = val.into();
74		chain_id.to_be_bytes().to_vec()
75	}
76}
77
78impl FromStr for ChainID {
79	type Err = ();
80
81	fn from_str(s: &str) -> Result<ChainID, ()> {
82		Ok(s.parse::<u64>().map_err(|_| ())?.into())
83	}
84}