revive_common/
evm_version.rs1use serde::Deserialize;
4use serde::Serialize;
5
6#[derive(Debug, Serialize, Deserialize, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
8#[serde(rename_all = "camelCase")]
9pub enum EVMVersion {
10 #[serde(rename = "homestead")]
12 Homestead,
13 #[serde(rename = "tangerineWhistle")]
15 TangerineWhistle,
16 #[serde(rename = "spuriousDragon")]
18 SpuriousDragon,
19 #[serde(rename = "byzantium")]
21 Byzantium,
22 #[serde(rename = "constantinople")]
24 Constantinople,
25 #[serde(rename = "petersburg")]
27 Petersburg,
28 #[serde(rename = "istanbul")]
30 Istanbul,
31 #[serde(rename = "berlin")]
33 Berlin,
34 #[serde(rename = "london")]
36 London,
37 #[serde(rename = "paris")]
39 Paris,
40 #[serde(rename = "shanghai")]
42 Shanghai,
43 #[serde(rename = "cancun")]
45 Cancun,
46 #[serde(rename = "prague")]
48 Prague,
49 #[serde(rename = "osaka")]
51 Osaka,
52 #[serde(rename = "amsterdam")]
54 Amsterdam,
55}
56
57impl TryFrom<&str> for EVMVersion {
58 type Error = anyhow::Error;
59
60 fn try_from(value: &str) -> Result<Self, Self::Error> {
61 Ok(match value {
62 "homestead" => Self::Homestead,
63 "tangerineWhistle" => Self::TangerineWhistle,
64 "spuriousDragon" => Self::SpuriousDragon,
65 "byzantium" => Self::Byzantium,
66 "constantinople" => Self::Constantinople,
67 "petersburg" => Self::Petersburg,
68 "istanbul" => Self::Istanbul,
69 "berlin" => Self::Berlin,
70 "london" => Self::London,
71 "paris" => Self::Paris,
72 "shanghai" => Self::Shanghai,
73 "cancun" => Self::Cancun,
74 "prague" => Self::Prague,
75 "osaka" => Self::Osaka,
76 "amsterdam" => Self::Amsterdam,
77 _ => anyhow::bail!("Invalid EVM version: {}", value),
78 })
79 }
80}
81
82impl std::fmt::Display for EVMVersion {
83 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
84 match self {
85 Self::Homestead => write!(f, "homestead"),
86 Self::TangerineWhistle => write!(f, "tangerineWhistle"),
87 Self::SpuriousDragon => write!(f, "spuriousDragon"),
88 Self::Byzantium => write!(f, "byzantium"),
89 Self::Constantinople => write!(f, "constantinople"),
90 Self::Petersburg => write!(f, "petersburg"),
91 Self::Istanbul => write!(f, "istanbul"),
92 Self::Berlin => write!(f, "berlin"),
93 Self::London => write!(f, "london"),
94 Self::Paris => write!(f, "paris"),
95 Self::Shanghai => write!(f, "shanghai"),
96 Self::Cancun => write!(f, "cancun"),
97 Self::Prague => write!(f, "prague"),
98 Self::Osaka => write!(f, "osaka"),
99 Self::Amsterdam => write!(f, "amsterdam"),
100 }
101 }
102}