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