@@ -1958,6 +1958,7 @@ fn generate_union(
1958
1958
params_struct_string : & mut String ,
1959
1959
params_struct_impl_string : & mut String ,
1960
1960
params_enum_string : & mut String ,
1961
+ set_types : & mut String ,
1961
1962
set_inner : & mut String ,
1962
1963
generate_params : bool ,
1963
1964
union_only_struct : bool ,
@@ -2302,6 +2303,7 @@ fn generate_union(
2302
2303
if !union_only_struct {
2303
2304
params_struct_string
2304
2305
. push_str ( format ! ( "\n pub uni: {params_union_name}{bracketed}," ) . as_str ( ) ) ;
2306
+ set_types. push_str ( format ! ( ", uni: {params_union_name}{bracketed}" ) . as_str ( ) ) ;
2305
2307
}
2306
2308
if !params_impl_interior. is_empty ( ) {
2307
2309
params_struct_impl_string. push_str ( format ! ( "{params_impl_interior}\n }}" ) . as_str ( ) ) ;
@@ -3154,6 +3156,7 @@ fn generate_node(
3154
3156
& mut params_struct_string,
3155
3157
rust_struct_impl_inner,
3156
3158
& mut params_enum_string,
3159
+ & mut set_types,
3157
3160
& mut set_inner,
3158
3161
true ,
3159
3162
union_only_struct,
@@ -3177,6 +3180,7 @@ fn generate_node(
3177
3180
& mut params_struct_impl_string,
3178
3181
& mut params_enum_string,
3179
3182
& mut String :: new ( ) ,
3183
+ & mut String :: new ( ) ,
3180
3184
false ,
3181
3185
union_only_struct,
3182
3186
& params_union_name,
@@ -3196,29 +3200,20 @@ fn generate_node(
3196
3200
reexports. push_str ( "};" ) ;
3197
3201
preamble. push ( Line ( reexports) ) ;
3198
3202
preamble. push ( BlankLine ) ;
3199
- let mut without_where = String :: new ( ) ;
3200
- let bracketed = if union_only_struct {
3201
- without_where. push_str ( format ! ( "<{union_lifetime}" ) . as_str ( ) ) ;
3202
- for p in union_params. iter ( ) {
3203
- without_where. push_str ( format ! ( "{p}," ) . as_str ( ) ) ;
3204
- }
3205
- without_where. push ( '>' ) ;
3203
+ let enum_bracketed = if union_only_struct {
3204
+ set_inner = String :: new ( ) ;
3206
3205
bracketed_with_where. clone ( )
3207
3206
} else if !union_params. is_empty ( ) || !union_lifetime. is_empty ( ) {
3208
3207
let mut temp = format ! ( "<{union_lifetime}" ) ;
3209
- without_where. push_str ( format ! ( "<{union_lifetime}" ) . as_str ( ) ) ;
3210
3208
for p in union_params. iter ( ) {
3211
3209
temp. push_str ( format ! ( "{p}: ::capnp::traits::Owned," ) . as_str ( ) ) ;
3212
- without_where. push_str ( format ! ( "{p}," ) . as_str ( ) ) ;
3213
3210
}
3214
3211
temp. push ( '>' ) ;
3215
- without_where. push ( '>' ) ;
3216
3212
temp
3217
3213
} else {
3218
3214
"" . to_string ( )
3219
3215
} ;
3220
- params_enum_string = format ! ( "pub enum {params_union_name}{bracketed} {{\n UNINITIALIZED,{params_enum_string}" ) ;
3221
- set_types. push_str ( format ! ( ", uni: {params_union_name}{without_where}" ) . as_str ( ) ) ;
3216
+ params_enum_string = format ! ( "pub enum {params_union_name}{enum_bracketed} {{\n UNINITIALIZED,{params_enum_string}" ) ;
3222
3217
}
3223
3218
3224
3219
if !params_enum_string. is_empty ( ) {
@@ -3235,11 +3230,15 @@ fn generate_node(
3235
3230
)
3236
3231
. as_str ( ) ,
3237
3232
) ;
3238
- let set = Branch ( vec ! [
3239
- Line ( format!( "pub fn set(&mut self{set_types}) {{" ) ) ,
3240
- indent( Line ( format!( " {set_inner}" ) ) ) ,
3241
- Line ( "}" . to_string( ) ) ,
3242
- ] ) ;
3233
+ let set = if set_inner. is_empty ( ) {
3234
+ BlankLine
3235
+ } else {
3236
+ Branch ( vec ! [
3237
+ Line ( format!( "pub fn set(&mut self{set_types}) {{" ) ) ,
3238
+ indent( Line ( format!( " {set_inner}" ) ) ) ,
3239
+ Line ( "}" . to_string( ) ) ,
3240
+ ] )
3241
+ } ;
3243
3242
if !is_params_struct {
3244
3243
params_struct_string. push_str ( rust_struct_inner) ;
3245
3244
params_struct_impl_string. push_str ( rust_struct_impl_inner) ;
0 commit comments