@@ -252,6 +252,19 @@ fn get_field_name(field: schema_capnp::field::Reader) -> capnp::Result<&str> {
252
252
field. get_name ( )
253
253
}
254
254
255
+ fn get_enumerant_name ( enumerant : schema_capnp:: enumerant:: Reader ) -> capnp:: Result < & str > {
256
+ for annotation in enumerant. get_annotations ( ) ?. iter ( ) {
257
+ if annotation. get_id ( ) == NAME_ANNOTATION_ID {
258
+ if let schema_capnp:: value:: Text ( t) = annotation. get_value ( ) ?. which ( ) ? {
259
+ return t;
260
+ } else {
261
+ return Err ( capnp:: Error :: failed ( format ! ( "expected rust.name annotation value to be of type Text" ) ) ) ;
262
+ }
263
+ }
264
+ }
265
+ enumerant. get_name ( )
266
+ }
267
+
255
268
enum NameKind {
256
269
// convert camel case to snake case, and avoid Rust keywords
257
270
Module ,
@@ -1464,7 +1477,7 @@ fn generate_node(gen: &GeneratorContext,
1464
1477
let mut match_branches = Vec :: new ( ) ;
1465
1478
let enumerants = enum_reader. get_enumerants ( ) ?;
1466
1479
for ii in 0 ..enumerants. len ( ) {
1467
- let enumerant = capitalize_first_letter ( enumerants. get ( ii) . get_name ( ) ?) ;
1480
+ let enumerant = capitalize_first_letter ( get_enumerant_name ( enumerants. get ( ii) ) ?) ;
1468
1481
members. push ( Line ( format ! ( "{} = {}," , enumerant, ii) ) ) ;
1469
1482
match_branches. push (
1470
1483
Line ( format ! ( "{} => ::std::result::Result::Ok({}::{})," , ii, last_name, enumerant) ) ) ;
@@ -1837,7 +1850,7 @@ fn generate_node(gen: &GeneratorContext,
1837
1850
let enumerants = e. get_enumerants ( ) ?;
1838
1851
if ( v as u32 ) < enumerants. len ( ) {
1839
1852
let variant =
1840
- capitalize_first_letter ( enumerants. get ( v as u32 ) . get_name ( ) ?) ;
1853
+ capitalize_first_letter ( get_enumerant_name ( enumerants. get ( v as u32 ) ) ?) ;
1841
1854
let type_string = typ. type_string ( gen, Leaf :: Owned ) ?;
1842
1855
Line ( format ! ( "pub const {}: {} = {}::{};" ,
1843
1856
styled_name,
0 commit comments