1
1
use crate :: attribute:: AttributeGroup ;
2
2
use crate :: comment:: Document ;
3
+ use crate :: data_type:: DataType ;
3
4
use crate :: literal:: Value ;
4
5
use crate :: modifiers:: Modifier ;
5
6
use crate :: modifiers:: VisibilityModifier ;
@@ -85,6 +86,7 @@ pub struct ClassConstant {
85
86
pub attributes : Vec < AttributeGroup > ,
86
87
pub visibility : Option < VisibilityModifier > ,
87
88
pub modifiers : Vec < Modifier > ,
89
+ pub data_type : Option < DataType > ,
88
90
pub name : String ,
89
91
pub value : Value ,
90
92
}
@@ -96,6 +98,7 @@ impl ClassConstant {
96
98
attributes : vec ! [ ] ,
97
99
visibility : None ,
98
100
modifiers : vec ! [ ] ,
101
+ data_type : None ,
99
102
name : name. to_string ( ) ,
100
103
value : Value :: Null ,
101
104
}
@@ -143,6 +146,12 @@ impl ClassConstant {
143
146
self
144
147
}
145
148
149
+ pub fn typed < T : Into < DataType > > ( mut self , data_type : T ) -> Self {
150
+ self . data_type = Some ( data_type. into ( ) ) ;
151
+
152
+ self
153
+ }
154
+
146
155
pub fn valued < T : Into < Value > > ( mut self , value : T ) -> Self {
147
156
self . value = value. into ( ) ;
148
157
@@ -172,11 +181,20 @@ impl Generator for ClassConstant {
172
181
code. push_str ( & format ! ( "{} " , modifier. generate( indentation, level) ) ) ;
173
182
}
174
183
175
- code. push_str ( & format ! (
176
- "const {} = {};\n " ,
177
- self . name,
178
- self . value. generate( indentation, level)
179
- ) ) ;
184
+ if let Some ( data_type) = & self . data_type {
185
+ code. push_str ( & format ! (
186
+ "const {} {} = {};\n " ,
187
+ data_type. generate( indentation, level) ,
188
+ self . name,
189
+ self . value. generate( indentation, level)
190
+ ) ) ;
191
+ } else {
192
+ code. push_str ( & format ! (
193
+ "const {} = {};\n " ,
194
+ self . name,
195
+ self . value. generate( indentation, level)
196
+ ) ) ;
197
+ }
180
198
181
199
code
182
200
}
@@ -205,6 +223,7 @@ impl<T: ToString, Tv: Into<Value>> From<(T, Tv)> for ClassConstant {
205
223
attributes : vec ! [ ] ,
206
224
visibility : None ,
207
225
modifiers : vec ! [ ] ,
226
+ data_type : None ,
208
227
name : name. to_string ( ) ,
209
228
value : value. into ( ) ,
210
229
}
0 commit comments