mago_codex/metadata/
class_like_constant.rs1use serde::Deserialize;
2use serde::Serialize;
3
4use mago_atom::Atom;
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)]
15#[non_exhaustive]
16pub struct ClassLikeConstantMetadata {
17 pub attributes: Vec<AttributeMetadata>,
18 pub name: Atom,
19 pub span: Span,
20 pub visibility: Visibility,
21 pub type_declaration: Option<TypeMetadata>,
22 pub type_metadata: Option<TypeMetadata>,
23 pub inferred_type: Option<TAtomic>,
24 pub flags: MetadataFlags,
25}
26
27impl ClassLikeConstantMetadata {
28 #[must_use]
29 pub fn new(name: Atom, span: Span, visibility: Visibility, flags: MetadataFlags) -> Self {
30 Self {
31 attributes: Vec::new(),
32 name,
33 span,
34 visibility,
35 type_declaration: None,
36 type_metadata: None,
37 inferred_type: None,
38 flags,
39 }
40 }
41
42 pub fn set_type_declaration(&mut self, type_declaration: TypeMetadata) {
43 if self.type_metadata.is_none() {
44 self.type_metadata = Some(type_declaration.clone());
45 }
46
47 self.type_declaration = Some(type_declaration);
48 }
49}
50
51impl HasSpan for ClassLikeConstantMetadata {
52 fn span(&self) -> Span {
53 self.span
54 }
55}