1use crate::error::domains::AnvilZksyncCode;
5use crate::error::domains::CompilerCode;
6use crate::error::domains::CoreCode;
7use crate::error::domains::FoundryCode;
8use crate::error::domains::HardhatCode;
9use strum_macros::EnumDiscriminants;
10use strum_macros::FromRepr;
11#[derive(Clone, Debug, EnumDiscriminants, Eq, PartialEq)]
12#[cfg_attr(feature = "use_serde", derive(serde::Serialize, serde::Deserialize))]
13#[strum_discriminants(name(DomainCode))]
14#[strum_discriminants(derive(FromRepr))]
15#[strum_discriminants(vis(pub))]
16#[repr(u32)]
17pub enum Kind {
18 AnvilZksync(AnvilZksyncCode) = 5u32,
19 Compiler(CompilerCode) = 2u32,
20 Core(CoreCode) = 1u32,
21 Foundry(FoundryCode) = 4u32,
22 Hardhat(HardhatCode) = 3u32,
23}
24impl Kind {
25 pub fn domain_code(&self) -> u32 {
26 let domain: DomainCode = self.clone().into();
27 domain as u32
28 }
29 pub fn component_code(&self) -> u32 {
30 match self {
31 Kind::AnvilZksync(component) => *component as u32,
32 Kind::Compiler(component) => *component as u32,
33 Kind::Core(component) => *component as u32,
34 Kind::Foundry(component) => *component as u32,
35 Kind::Hardhat(component) => *component as u32,
36 }
37 }
38}