@@ -137,6 +137,26 @@ pub enum Case {
137
137
Snake ,
138
138
}
139
139
140
+ impl Case {
141
+ pub fn parse ( c : & str ) -> Result < Option < Self > , IdentFormatError > {
142
+ Ok ( match c {
143
+ "" | "unchanged" | "svd" => None ,
144
+ "p" | "pascal" | "type" => Some ( Case :: Pascal ) ,
145
+ "s" | "snake" | "lower" => Some ( Case :: Snake ) ,
146
+ "c" | "constant" | "upper" => Some ( Case :: Constant ) ,
147
+ _ => {
148
+ return Err ( IdentFormatError :: UnknownCase ( c. into ( ) ) ) ;
149
+ }
150
+ } )
151
+ }
152
+ }
153
+
154
+ #[ derive( Clone , Debug , PartialEq , Eq ) ]
155
+ pub enum IdentFormatError {
156
+ UnknownCase ( String ) ,
157
+ Other ,
158
+ }
159
+
140
160
#[ derive( Clone , Debug , Default , PartialEq , Eq ) ]
141
161
#[ cfg_attr( feature = "serde" , derive( serde:: Deserialize ) , serde( default ) ) ]
142
162
pub struct IdentFormat {
@@ -171,6 +191,36 @@ impl IdentFormat {
171
191
self . suffix = suffix. into ( ) ;
172
192
self
173
193
}
194
+ pub fn parse ( s : & str ) -> Result < Self , IdentFormatError > {
195
+ let mut f = s. split ( ":" ) ;
196
+ match ( f. next ( ) , f. next ( ) , f. next ( ) ) {
197
+ ( Some ( p) , Some ( c) , Some ( s) ) => {
198
+ let case = Case :: parse ( c) ?;
199
+ Ok ( Self {
200
+ case,
201
+ prefix : p. into ( ) ,
202
+ suffix : s. into ( ) ,
203
+ } )
204
+ }
205
+ ( Some ( p) , Some ( c) , None ) => {
206
+ let case = Case :: parse ( c) ?;
207
+ Ok ( Self {
208
+ case,
209
+ prefix : p. into ( ) ,
210
+ suffix : "" . into ( ) ,
211
+ } )
212
+ }
213
+ ( Some ( c) , None , None ) => {
214
+ let case = Case :: parse ( c) ?;
215
+ Ok ( Self {
216
+ case,
217
+ prefix : "" . into ( ) ,
218
+ suffix : "" . into ( ) ,
219
+ } )
220
+ }
221
+ _ => Err ( IdentFormatError :: Other ) ,
222
+ }
223
+ }
174
224
}
175
225
176
226
#[ derive( Clone , Debug , Default , PartialEq , Eq ) ]
@@ -179,56 +229,34 @@ pub struct IdentFormats(HashMap<String, IdentFormat>);
179
229
180
230
impl IdentFormats {
181
231
fn common ( ) -> Self {
232
+ let snake = IdentFormat :: default ( ) . snake_case ( ) ;
182
233
Self ( HashMap :: from ( [
183
- ( "field_accessor" . into ( ) , IdentFormat :: default ( ) . snake_case ( ) ) ,
184
- (
185
- "register_accessor" . into ( ) ,
186
- IdentFormat :: default ( ) . snake_case ( ) ,
187
- ) ,
188
- (
189
- "enum_value_accessor" . into ( ) ,
190
- IdentFormat :: default ( ) . snake_case ( ) ,
191
- ) ,
192
- ( "cluster" . into ( ) , IdentFormat :: default ( ) . pascal_case ( ) ) ,
193
- (
194
- "cluster_accessor" . into ( ) ,
195
- IdentFormat :: default ( ) . snake_case ( ) ,
196
- ) ,
197
- ( "register_mod" . into ( ) , IdentFormat :: default ( ) . snake_case ( ) ) ,
198
- ( "cluster_mod" . into ( ) , IdentFormat :: default ( ) . snake_case ( ) ) ,
199
- ( "peripheral_mod" . into ( ) , IdentFormat :: default ( ) . snake_case ( ) ) ,
200
- (
201
- "peripheral_feature" . into ( ) ,
202
- IdentFormat :: default ( ) . snake_case ( ) ,
203
- ) ,
234
+ ( "field_accessor" . into ( ) , snake. clone ( ) ) ,
235
+ ( "register_accessor" . into ( ) , snake. clone ( ) ) ,
236
+ ( "enum_value_accessor" . into ( ) , snake. clone ( ) ) ,
237
+ ( "cluster_accessor" . into ( ) , snake. clone ( ) ) ,
238
+ ( "register_mod" . into ( ) , snake. clone ( ) ) ,
239
+ ( "cluster_mod" . into ( ) , snake. clone ( ) ) ,
240
+ ( "peripheral_mod" . into ( ) , snake. clone ( ) ) ,
241
+ ( "peripheral_feature" . into ( ) , snake) ,
204
242
] ) )
205
243
}
206
244
207
245
pub fn new_theme ( ) -> Self {
208
246
let mut map = Self :: common ( ) ;
209
247
248
+ let pascal = IdentFormat :: default ( ) . pascal_case ( ) ;
210
249
map. extend ( [
211
- (
212
- "field_reader" . into ( ) ,
213
- IdentFormat :: default ( ) . pascal_case ( ) . suffix ( "R" ) ,
214
- ) ,
215
- (
216
- "field_writer" . into ( ) ,
217
- IdentFormat :: default ( ) . pascal_case ( ) . suffix ( "W" ) ,
218
- ) ,
219
- ( "enum_name" . into ( ) , IdentFormat :: default ( ) . pascal_case ( ) ) ,
220
- (
221
- "enum_write_name" . into ( ) ,
222
- IdentFormat :: default ( ) . pascal_case ( ) . suffix ( "WO" ) ,
223
- ) ,
224
- ( "enum_value" . into ( ) , IdentFormat :: default ( ) . pascal_case ( ) ) ,
250
+ ( "field_reader" . into ( ) , pascal. clone ( ) . suffix ( "R" ) ) ,
251
+ ( "field_writer" . into ( ) , pascal. clone ( ) . suffix ( "W" ) ) ,
252
+ ( "enum_name" . into ( ) , pascal. clone ( ) ) ,
253
+ ( "enum_write_name" . into ( ) , pascal. clone ( ) . suffix ( "WO" ) ) ,
254
+ ( "enum_value" . into ( ) , pascal. clone ( ) ) ,
225
255
( "interrupt" . into ( ) , IdentFormat :: default ( ) ) ,
226
- ( "register" . into ( ) , IdentFormat :: default ( ) . pascal_case ( ) ) ,
227
- (
228
- "register_spec" . into ( ) ,
229
- IdentFormat :: default ( ) . pascal_case ( ) . suffix ( "Spec" ) ,
230
- ) ,
231
- ( "peripheral" . into ( ) , IdentFormat :: default ( ) . pascal_case ( ) ) ,
256
+ ( "register" . into ( ) , pascal. clone ( ) ) ,
257
+ ( "cluster" . into ( ) , pascal. clone ( ) ) ,
258
+ ( "register_spec" . into ( ) , pascal. clone ( ) . suffix ( "Spec" ) ) ,
259
+ ( "peripheral" . into ( ) , pascal) ,
232
260
(
233
261
"peripheral_singleton" . into ( ) ,
234
262
IdentFormat :: default ( ) . snake_case ( ) ,
@@ -240,36 +268,19 @@ impl IdentFormats {
240
268
pub fn legacy_theme ( ) -> Self {
241
269
let mut map = Self :: common ( ) ;
242
270
271
+ let constant = IdentFormat :: default ( ) . constant_case ( ) ;
243
272
map. extend ( [
244
- (
245
- "field_reader" . into ( ) ,
246
- IdentFormat :: default ( ) . constant_case ( ) . suffix ( "_R" ) ,
247
- ) ,
248
- (
249
- "field_writer" . into ( ) ,
250
- IdentFormat :: default ( ) . constant_case ( ) . suffix ( "_W" ) ,
251
- ) ,
252
- (
253
- "enum_name" . into ( ) ,
254
- IdentFormat :: default ( ) . constant_case ( ) . suffix ( "_A" ) ,
255
- ) ,
256
- (
257
- "enum_write_name" . into ( ) ,
258
- IdentFormat :: default ( ) . constant_case ( ) . suffix ( "_AW" ) ,
259
- ) ,
260
- ( "enum_value" . into ( ) , IdentFormat :: default ( ) . constant_case ( ) ) ,
261
- ( "interrupt" . into ( ) , IdentFormat :: default ( ) . constant_case ( ) ) ,
262
- ( "cluster" . into ( ) , IdentFormat :: default ( ) . constant_case ( ) ) ,
263
- ( "register" . into ( ) , IdentFormat :: default ( ) . constant_case ( ) ) ,
264
- (
265
- "register_spec" . into ( ) ,
266
- IdentFormat :: default ( ) . constant_case ( ) . suffix ( "_SPEC" ) ,
267
- ) ,
268
- ( "peripheral" . into ( ) , IdentFormat :: default ( ) . constant_case ( ) ) ,
269
- (
270
- "peripheral_singleton" . into ( ) ,
271
- IdentFormat :: default ( ) . constant_case ( ) ,
272
- ) ,
273
+ ( "field_reader" . into ( ) , constant. clone ( ) . suffix ( "_R" ) ) ,
274
+ ( "field_writer" . into ( ) , constant. clone ( ) . suffix ( "_W" ) ) ,
275
+ ( "enum_name" . into ( ) , constant. clone ( ) . suffix ( "_A" ) ) ,
276
+ ( "enum_write_name" . into ( ) , constant. clone ( ) . suffix ( "_AW" ) ) ,
277
+ ( "enum_value" . into ( ) , constant. clone ( ) ) ,
278
+ ( "interrupt" . into ( ) , constant. clone ( ) ) ,
279
+ ( "cluster" . into ( ) , constant. clone ( ) ) ,
280
+ ( "register" . into ( ) , constant. clone ( ) ) ,
281
+ ( "register_spec" . into ( ) , constant. clone ( ) . suffix ( "_SPEC" ) ) ,
282
+ ( "peripheral" . into ( ) , constant. clone ( ) ) ,
283
+ ( "peripheral_singleton" . into ( ) , constant) ,
273
284
] ) ;
274
285
275
286
map
0 commit comments