hir_ty/next_solver/
def_id.rs1use hir_def::{
4 AdtId, ConstId, EnumId, EnumVariantId, FunctionId, GenericDefId, ImplId, StaticId, StructId,
5 TraitId, TypeAliasId, UnionId,
6};
7use rustc_type_ir::inherent;
8use stdx::impl_from;
9
10use crate::db::{InternedClosureId, InternedCoroutineId, InternedOpaqueTyId};
11
12use super::DbInterner;
13
14#[derive(Debug, PartialOrd, Ord, Clone, Copy, PartialEq, Eq, Hash, salsa::Supertype)]
15pub enum Ctor {
16 Struct(StructId),
17 Enum(EnumVariantId),
18}
19
20#[derive(Debug, PartialOrd, Ord, Clone, Copy, PartialEq, Eq, Hash, salsa::Supertype)]
21pub enum SolverDefId {
22 AdtId(AdtId),
23 ConstId(ConstId),
24 FunctionId(FunctionId),
25 ImplId(ImplId),
26 StaticId(StaticId),
27 TraitId(TraitId),
28 TypeAliasId(TypeAliasId),
29 InternedClosureId(InternedClosureId),
30 InternedCoroutineId(InternedCoroutineId),
31 InternedOpaqueTyId(InternedOpaqueTyId),
32 Ctor(Ctor),
33}
34
35impl_from!(
36 AdtId(StructId, EnumId, UnionId),
37 ConstId,
38 FunctionId,
39 ImplId,
40 StaticId,
41 TraitId,
42 TypeAliasId,
43 InternedClosureId,
44 InternedCoroutineId,
45 InternedOpaqueTyId
46 for SolverDefId
47);
48
49impl From<GenericDefId> for SolverDefId {
50 fn from(value: GenericDefId) -> Self {
51 match value {
52 GenericDefId::AdtId(adt_id) => SolverDefId::AdtId(adt_id),
53 GenericDefId::ConstId(const_id) => SolverDefId::ConstId(const_id),
54 GenericDefId::FunctionId(function_id) => SolverDefId::FunctionId(function_id),
55 GenericDefId::ImplId(impl_id) => SolverDefId::ImplId(impl_id),
56 GenericDefId::StaticId(static_id) => SolverDefId::StaticId(static_id),
57 GenericDefId::TraitId(trait_id) => SolverDefId::TraitId(trait_id),
58 GenericDefId::TypeAliasId(type_alias_id) => SolverDefId::TypeAliasId(type_alias_id),
59 }
60 }
61}
62
63impl TryFrom<SolverDefId> for GenericDefId {
64 type Error = SolverDefId;
65
66 fn try_from(value: SolverDefId) -> Result<Self, Self::Error> {
67 Ok(match value {
68 SolverDefId::AdtId(adt_id) => GenericDefId::AdtId(adt_id),
69 SolverDefId::ConstId(const_id) => GenericDefId::ConstId(const_id),
70 SolverDefId::FunctionId(function_id) => GenericDefId::FunctionId(function_id),
71 SolverDefId::ImplId(impl_id) => GenericDefId::ImplId(impl_id),
72 SolverDefId::StaticId(static_id) => GenericDefId::StaticId(static_id),
73 SolverDefId::TraitId(trait_id) => GenericDefId::TraitId(trait_id),
74 SolverDefId::TypeAliasId(type_alias_id) => GenericDefId::TypeAliasId(type_alias_id),
75 SolverDefId::InternedClosureId(_) => return Err(value),
76 SolverDefId::InternedCoroutineId(_) => return Err(value),
77 SolverDefId::InternedOpaqueTyId(_) => return Err(value),
78 SolverDefId::Ctor(_) => return Err(value),
79 })
80 }
81}
82
83impl<'db> inherent::DefId<DbInterner<'db>> for SolverDefId {
84 fn as_local(self) -> Option<SolverDefId> {
85 Some(self)
86 }
87 fn is_local(self) -> bool {
88 true
89 }
90}