mago_reflection/class_like/
property.rs1use 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}