Commit dd2f735 1 parent 1ce11c2 commit dd2f735 Copy full SHA for dd2f735
File tree 2 files changed +20
-4
lines changed
2 files changed +20
-4
lines changed Original file line number Diff line number Diff line change @@ -1006,9 +1006,20 @@ fn generate_setter(
1006
1006
type_:: Enum ( e) => {
1007
1007
let id = e. get_type_id ( ) ;
1008
1008
let the_mod = ctx. get_qualified_module ( id) ;
1009
- setter_interior. push ( Line ( format ! (
1010
- "self.builder.set_data_field::<u16>({offset}, value as u16)"
1011
- ) ) ) ;
1009
+ if !reg_field. get_had_explicit_default ( ) {
1010
+ setter_interior. push ( Line ( format ! (
1011
+ "self.builder.set_data_field::<u16>({offset}, value as u16);"
1012
+ ) ) ) ;
1013
+ } else {
1014
+ match reg_field. get_default_value ( ) ?. which ( ) ? {
1015
+ schema_capnp:: value:: Enum ( d) => {
1016
+ setter_interior. push ( Line ( format ! (
1017
+ "self.builder.set_data_field_mask::<u16>({offset}, value as u16, {d});"
1018
+ ) ) ) ;
1019
+ }
1020
+ _ => return Err ( Error :: failed ( "enum default not an Enum" . to_string ( ) ) ) ,
1021
+ }
1022
+ } ;
1012
1023
( Some ( the_mod) , None )
1013
1024
}
1014
1025
type_:: Struct ( _) => {
Original file line number Diff line number Diff line change @@ -492,7 +492,7 @@ mod tests {
492
492
493
493
#[ test]
494
494
fn test_defaults ( ) {
495
- use crate :: test_capnp:: test_defaults;
495
+ use crate :: test_capnp:: { test_defaults, TestEnum } ;
496
496
497
497
{
498
498
let message = message:: Builder :: new_default ( ) ;
@@ -524,6 +524,7 @@ mod tests {
524
524
test_defaults. set_u_int64_field ( 123456789012345 ) ;
525
525
test_defaults. set_float32_field ( 7890.123 ) ;
526
526
test_defaults. set_float64_field ( 5e55 ) ;
527
+ test_defaults. set_enum_field ( TestEnum :: Baz ) ;
527
528
528
529
{
529
530
let mut sub_builder = test_defaults. reborrow ( ) . get_struct_field ( ) . unwrap ( ) ;
@@ -544,6 +545,10 @@ mod tests {
544
545
) ;
545
546
assert_eq ! ( test_defaults. reborrow( ) . get_float32_field( ) , 7890.123 ) ;
546
547
assert_eq ! ( test_defaults. reborrow( ) . get_float64_field( ) , 5e55 ) ;
548
+ assert_eq ! (
549
+ test_defaults. reborrow( ) . get_enum_field( ) . unwrap( ) ,
550
+ TestEnum :: Baz
551
+ ) ;
547
552
548
553
{
549
554
let sub_builder = test_defaults. reborrow ( ) . get_struct_field ( ) . unwrap ( ) ;
You can’t perform that action at this time.
0 commit comments