@@ -4,7 +4,7 @@ use convert_case::{Boundary, Case, Casing};
4
4
5
5
use crate :: svd:: BitRangeType ;
6
6
7
- #[ derive( Clone , Copy , Debug ) ]
7
+ #[ derive( Clone , Copy , Debug , PartialEq , Eq ) ]
8
8
pub enum IdentifierFormat {
9
9
/// `Camel` case
10
10
///
@@ -63,7 +63,7 @@ pub fn change_case(s: &str, case: Option<IdentifierFormat>) -> String {
63
63
}
64
64
}
65
65
66
- #[ derive( Clone , Copy , Debug ) ]
66
+ #[ derive( Clone , Copy , Debug , PartialEq , Eq ) ]
67
67
pub enum NumberFormat {
68
68
/// `UpperHex` format
69
69
///
@@ -186,6 +186,24 @@ impl FromStr for Sorting {
186
186
}
187
187
}
188
188
189
+ #[ derive( Clone , Copy , Debug , PartialEq , Eq ) ]
190
+ pub enum RegistersOrClustersFirst {
191
+ Registers ,
192
+ Clusters ,
193
+ }
194
+
195
+ impl FromStr for RegistersOrClustersFirst {
196
+ type Err = ( ) ;
197
+
198
+ fn from_str ( s : & str ) -> Result < Self , Self :: Err > {
199
+ match s {
200
+ "Registers" => Ok ( Self :: Registers ) ,
201
+ "Clusters" => Ok ( Self :: Clusters ) ,
202
+ _ => Err ( ( ) ) ,
203
+ }
204
+ }
205
+ }
206
+
189
207
#[ derive( Clone , Copy , Debug ) ]
190
208
#[ non_exhaustive]
191
209
/// Advanced encoder options
@@ -235,6 +253,9 @@ pub struct Config {
235
253
/// Sort registers and clusters in specified order
236
254
pub register_cluster_sorting : Option < Sorting > ,
237
255
256
+ /// First write registers or clusters
257
+ pub registers_or_clusters_first : Option < RegistersOrClustersFirst > ,
258
+
238
259
/// Format of register's name-kind elements
239
260
/// - `derivedFrom`
240
261
/// - `name`
@@ -314,6 +335,7 @@ impl Default for Config {
314
335
cluster_name : None ,
315
336
cluster_address_offset : NumberFormat :: UpperHex ,
316
337
register_cluster_sorting : None ,
338
+ registers_or_clusters_first : None ,
317
339
register_name : None ,
318
340
register_address_offset : NumberFormat :: UpperHex ,
319
341
register_size : NumberFormat :: LowerHex ,
@@ -349,6 +371,9 @@ impl Config {
349
371
"register_cluster_sorting" => {
350
372
self . register_cluster_sorting = Some ( value. parse ( ) . unwrap ( ) )
351
373
}
374
+ "registers_or_clusters_first" => {
375
+ self . registers_or_clusters_first = Some ( value. parse ( ) . unwrap ( ) )
376
+ }
352
377
"register_name" => self . register_name = Some ( value. parse ( ) . unwrap ( ) ) ,
353
378
"register_address_offset" => self . register_address_offset = value. parse ( ) . unwrap ( ) ,
354
379
"register_size" => self . register_size = value. parse ( ) . unwrap ( ) ,
@@ -437,6 +462,14 @@ impl Config {
437
462
self
438
463
}
439
464
465
+ /// First write registers or clusters
466
+ ///
467
+ /// `None` means only `register_cluster_sorting` does matter
468
+ pub fn registers_or_clusters_first ( mut self , val : Option < RegistersOrClustersFirst > ) -> Self {
469
+ self . registers_or_clusters_first = val;
470
+ self
471
+ }
472
+
440
473
/// Format of register's name-kind elements
441
474
pub fn register_name ( mut self , val : Option < IdentifierFormat > ) -> Self {
442
475
self . register_name = val;
0 commit comments