1use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
7pub enum Visibility {
8 Public,
10 Private,
12 Protected,
14}
15
16#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
18pub struct ClassMemberMetadata {
19 pub visibility: Visibility,
21 pub is_static: bool,
23 pub class_name: String,
25 pub is_accessor: bool,
27 pub is_abstract: bool,
29 pub is_readonly: bool,
31}
32
33impl ClassMemberMetadata {
34 pub fn new(visibility: Visibility, is_static: bool, class_name: String) -> Self {
36 Self {
37 visibility,
38 is_static,
39 class_name,
40 is_accessor: false,
41 is_abstract: false,
42 is_readonly: false,
43 }
44 }
45}
46
47#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
49pub enum EnumMemberValue {
50 Number(i64),
52 String(String),
54 Computed,
56}
57
58#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
60pub struct EnumMemberMetadata {
61 pub enum_name: String,
63 pub value: Option<EnumMemberValue>,
65}
66
67#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
69pub struct CodeQualityMetadata {
70 pub line_count: Option<usize>,
72 pub parameter_count: Option<usize>,
74 pub complexity: Option<usize>,
76 pub max_nesting_depth: Option<usize>,
78 pub return_count: Option<usize>,
80 pub method_count: Option<usize>,
82 pub field_count: Option<usize>,
84}
85
86impl CodeQualityMetadata {
87 pub fn new() -> Self {
89 Self {
90 line_count: None,
91 parameter_count: None,
92 complexity: None,
93 max_nesting_depth: None,
94 return_count: None,
95 method_count: None,
96 field_count: None,
97 }
98 }
99
100 pub fn for_function(
102 line_count: Option<usize>,
103 parameter_count: Option<usize>,
104 complexity: Option<usize>,
105 max_nesting_depth: Option<usize>,
106 return_count: Option<usize>,
107 ) -> Self {
108 Self {
109 line_count,
110 parameter_count,
111 complexity,
112 max_nesting_depth,
113 return_count,
114 method_count: None,
115 field_count: None,
116 }
117 }
118
119 pub fn for_class(
121 line_count: Option<usize>,
122 method_count: Option<usize>,
123 field_count: Option<usize>,
124 ) -> Self {
125 Self {
126 line_count,
127 parameter_count: None,
128 complexity: None,
129 max_nesting_depth: None,
130 return_count: None,
131 method_count,
132 field_count,
133 }
134 }
135}
136
137impl Default for CodeQualityMetadata {
138 fn default() -> Self {
139 Self::new()
140 }
141}
142
143#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
145pub enum SymbolMetadata {
146 #[default]
148 None,
149 ClassMember(ClassMemberMetadata),
151 EnumMember(EnumMemberMetadata),
153 CodeQuality(CodeQualityMetadata),
155}