mago_codex/metadata/
class_like_constant.rs

1use serde::Deserialize;
2use serde::Serialize;
3
4use mago_interner::StringIdentifier;
5use mago_span::HasSpan;
6use mago_span::Span;
7
8use crate::metadata::attribute::AttributeMetadata;
9use crate::metadata::flags::MetadataFlags;
10use crate::metadata::ttype::TypeMetadata;
11use crate::ttype::atomic::TAtomic;
12use crate::visibility::Visibility;
13
14#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
15pub struct ClassLikeConstantMetadata {
16    pub attributes: Vec<AttributeMetadata>,
17    pub name: StringIdentifier,
18    pub span: Span,
19    pub visibility: Visibility,
20    pub type_declaration: Option<TypeMetadata>,
21    pub type_metadata: Option<TypeMetadata>,
22    pub inferred_type: Option<TAtomic>,
23    pub flags: MetadataFlags,
24}
25
26impl ClassLikeConstantMetadata {
27    pub fn new(name: StringIdentifier, span: Span, visibility: Visibility, flags: MetadataFlags) -> Self {
28        Self {
29            attributes: Vec::new(),
30            name,
31            span,
32            visibility,
33            type_declaration: None,
34            type_metadata: None,
35            inferred_type: None,
36            flags,
37        }
38    }
39
40    pub fn set_type_declaration(&mut self, type_declaration: TypeMetadata) {
41        if self.type_metadata.is_none() {
42            self.type_metadata = Some(type_declaration.clone());
43        }
44
45        self.type_declaration = Some(type_declaration);
46    }
47}
48
49impl HasSpan for ClassLikeConstantMetadata {
50    fn span(&self) -> Span {
51        self.span
52    }
53}