mago_reflection/class_like/
property.rs

1use ahash::HashMap;
2
3use mago_interner::StringIdentifier;
4use serde::Deserialize;
5use serde::Serialize;
6
7use mago_span::Span;
8
9use crate::attribute::AttributeReflection;
10use crate::class_like::member::ClassLikeMemberVisibilityReflection;
11use crate::function_like::FunctionLikeReflection;
12use crate::identifier::ClassLikeMemberName;
13use crate::r#type::TypeReflection;
14
15#[derive(Debug, Clone, Eq, PartialEq, Hash, Serialize, Deserialize, PartialOrd, Ord)]
16pub struct PropertyDefaultValueReflection {
17    pub inferred_type_reflection: TypeReflection,
18    pub span: Span,
19}
20
21#[derive(Debug, Clone, Eq, PartialEq, Serialize, Deserialize)]
22pub struct PropertyReflection {
23    pub attribut_reflections: Vec<AttributeReflection>,
24    pub read_visibility_reflection: Option<ClassLikeMemberVisibilityReflection>,
25    pub write_visibility_reflection: Option<ClassLikeMemberVisibilityReflection>,
26    pub name: ClassLikeMemberName,
27    pub type_reflection: Option<TypeReflection>,
28    pub default_value_reflection: Option<PropertyDefaultValueReflection>,
29    pub hooks: HashMap<StringIdentifier, FunctionLikeReflection>,
30    pub is_readonly: bool,
31    pub is_final: bool,
32    pub is_promoted: bool,
33    pub is_static: bool,
34    pub item_span: Span,
35    pub definition_span: Span,
36    pub is_overriding: bool,
37}