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::ttype::TypeMetadata;
10use crate::ttype::atomic::TAtomic;
11use crate::visibility::Visibility;
12
13#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
14pub struct ClassLikeConstantMetadata {
15    pub attributes: Vec<AttributeMetadata>,
16    pub name: StringIdentifier,
17    pub span: Span,
18    pub visibility: Visibility,
19    pub type_declaration: Option<TypeMetadata>,
20    pub type_metadata: Option<TypeMetadata>,
21    pub inferred_type: Option<TAtomic>,
22    pub is_final: bool,
23    pub is_deprecated: bool,
24    pub is_internal: bool,
25}
26
27impl ClassLikeConstantMetadata {
28    pub fn new(name: StringIdentifier, span: Span, visibility: Visibility) -> Self {
29        Self {
30            attributes: Vec::new(),
31            name,
32            span,
33            visibility,
34            type_declaration: None,
35            type_metadata: None,
36            inferred_type: None,
37            is_final: false,
38            is_deprecated: false,
39            is_internal: false,
40        }
41    }
42
43    pub fn set_type_declaration(&mut self, type_declaration: TypeMetadata) {
44        if self.type_metadata.is_none() {
45            self.type_metadata = Some(type_declaration.clone());
46        }
47
48        self.type_declaration = Some(type_declaration);
49    }
50}
51
52impl HasSpan for ClassLikeConstantMetadata {
53    fn span(&self) -> Span {
54        self.span
55    }
56}