raiden_primitives/types/
chain_id.rs1#![warn(clippy::missing_docs_in_private_items)]
2
3use std::str::FromStr;
4
5use derive_more::Display;
6use web3::types::U256;
7
8#[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}