sway_core/decl_engine/
interface_decl_id.rs1use 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}