sway_core/decl_engine/
interface_decl_id.rs

1use super::{parsed_engine::ParsedDeclEngineGet, parsed_id::ParsedDeclId};
2use crate::{
3    decl_engine::*,
4    engine_threading::{EqWithEngines, PartialEqWithEngines, PartialEqWithEnginesContext},
5    language::{
6        parsed::{AbiDeclaration, TraitDeclaration},
7        ty,
8    },
9};
10use serde::{Deserialize, Serialize};
11
12#[derive(Debug, Eq, PartialEq, Hash, Clone)]
13pub enum ParsedInterfaceDeclId {
14    Abi(ParsedDeclId<AbiDeclaration>),
15    Trait(ParsedDeclId<TraitDeclaration>),
16}
17
18impl EqWithEngines for ParsedInterfaceDeclId {}
19impl PartialEqWithEngines for ParsedInterfaceDeclId {
20    fn eq(&self, other: &Self, ctx: &PartialEqWithEnginesContext) -> bool {
21        let decl_engine = ctx.engines().pe();
22        match (self, other) {
23            (ParsedInterfaceDeclId::Abi(lhs), ParsedInterfaceDeclId::Abi(rhs)) => {
24                decl_engine.get(lhs).eq(&decl_engine.get(rhs), ctx)
25            }
26            (ParsedInterfaceDeclId::Trait(lhs), ParsedInterfaceDeclId::Trait(rhs)) => {
27                decl_engine.get(lhs).eq(&decl_engine.get(rhs), ctx)
28            }
29            _ => false,
30        }
31    }
32}
33
34impl From<ParsedDeclId<AbiDeclaration>> for ParsedInterfaceDeclId {
35    fn from(id: ParsedDeclId<AbiDeclaration>) -> Self {
36        Self::Abi(id)
37    }
38}
39
40impl From<ParsedDeclId<TraitDeclaration>> for ParsedInterfaceDeclId {
41    fn from(id: ParsedDeclId<TraitDeclaration>) -> Self {
42        Self::Trait(id)
43    }
44}
45
46#[derive(Debug, Eq, PartialEq, Hash, Clone, Serialize, Deserialize)]
47pub enum InterfaceDeclId {
48    Abi(DeclId<ty::TyAbiDecl>),
49    Trait(DeclId<ty::TyTraitDecl>),
50}
51
52impl From<DeclId<ty::TyAbiDecl>> for InterfaceDeclId {
53    fn from(id: DeclId<ty::TyAbiDecl>) -> Self {
54        Self::Abi(id)
55    }
56}
57
58impl From<DeclId<ty::TyTraitDecl>> for InterfaceDeclId {
59    fn from(id: DeclId<ty::TyTraitDecl>) -> Self {
60        Self::Trait(id)
61    }
62}