mago_reflection/class_like/
member.rs1use std::hash::Hash;
2
3use ahash::HashMap;
4use ahash::HashSet;
5use serde::Deserialize;
6use serde::Serialize;
7
8use mago_interner::StringIdentifier;
9use mago_span::Span;
10
11use crate::identifier::ClassLikeName;
12
13#[derive(Debug, Clone, Eq, PartialEq, Serialize, Deserialize)]
18pub struct MemeberCollection<T: Eq + PartialEq> {
19 pub members: HashMap<StringIdentifier, T>,
20 pub appering_members: HashMap<StringIdentifier, ClassLikeName>,
21 pub declaring_members: HashMap<StringIdentifier, ClassLikeName>,
22 pub overriden_members: HashMap<StringIdentifier, HashSet<ClassLikeName>>,
23 pub inheritable_members: HashMap<StringIdentifier, ClassLikeName>,
24}
25
26impl<T: Eq + PartialEq> Default for MemeberCollection<T> {
27 fn default() -> Self {
28 Self {
29 members: Default::default(),
30 appering_members: Default::default(),
31 declaring_members: Default::default(),
32 overriden_members: Default::default(),
33 inheritable_members: Default::default(),
34 }
35 }
36}
37
38#[derive(Debug, Clone, Copy, Eq, PartialEq, Hash, Serialize, Deserialize, PartialOrd, Ord)]
39pub enum ClassLikeMemberVisibilityReflection {
40 Public { span: Span },
41 Protected { span: Span },
42 Private { span: Span },
43}
44
45impl ClassLikeMemberVisibilityReflection {
46 #[inline]
47 pub const fn is_public(&self) -> bool {
48 matches!(self, ClassLikeMemberVisibilityReflection::Public { .. })
49 }
50
51 #[inline]
52 pub const fn is_protected(&self) -> bool {
53 matches!(self, ClassLikeMemberVisibilityReflection::Protected { .. })
54 }
55
56 #[inline]
57 pub const fn is_private(&self) -> bool {
58 matches!(self, ClassLikeMemberVisibilityReflection::Private { .. })
59 }
60}