@@ -252,6 +252,19 @@ fn get_field_name(field: schema_capnp::field::Reader) -> capnp::Result<&str> {
252252 field. get_name ( )
253253}
254254
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+
255268enum NameKind {
256269 // convert camel case to snake case, and avoid Rust keywords
257270 Module ,
@@ -1464,7 +1477,7 @@ fn generate_node(gen: &GeneratorContext,
14641477 let mut match_branches = Vec :: new ( ) ;
14651478 let enumerants = enum_reader. get_enumerants ( ) ?;
14661479 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) ) ?) ;
14681481 members. push ( Line ( format ! ( "{} = {}," , enumerant, ii) ) ) ;
14691482 match_branches. push (
14701483 Line ( format ! ( "{} => ::std::result::Result::Ok({}::{})," , ii, last_name, enumerant) ) ) ;
@@ -1837,7 +1850,7 @@ fn generate_node(gen: &GeneratorContext,
18371850 let enumerants = e. get_enumerants ( ) ?;
18381851 if ( v as u32 ) < enumerants. len ( ) {
18391852 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 ) ) ?) ;
18411854 let type_string = typ. type_string ( gen, Leaf :: Owned ) ?;
18421855 Line ( format ! ( "pub const {}: {} = {}::{};" ,
18431856 styled_name,
0 commit comments