File tree Expand file tree Collapse file tree 4 files changed +38
-0
lines changed Expand file tree Collapse file tree 4 files changed +38
-0
lines changed Original file line number Diff line number Diff line change @@ -270,6 +270,7 @@ The rest are just local overrides for the same options found in the cbindgen.tom
270
270
* derive-tagged-enum-destructor
271
271
* derive-tagged-enum-copy-constructor
272
272
* prefix-with-name
273
+ * private-default-tagged-enum-constructor
273
274
274
275
275
276
@@ -703,6 +704,14 @@ derive_tagged_enum_destructor = false
703
704
# default: false
704
705
derive_tagged_enum_copy_constructor = false
705
706
707
+ # Whether enums with fields should generate an empty, private destructor.
708
+ # This allows the auto-generated constructor functions to compile, if there are
709
+ # non-trivially constructible members. This falls in the same family of
710
+ # dangerousness as `derive_tagged_enum_copy_constructor` and co.
711
+ #
712
+ # default: false
713
+ private_default_tagged_enum_constructor = false
714
+
706
715
707
716
708
717
Original file line number Diff line number Diff line change @@ -400,6 +400,9 @@ pub struct EnumConfig {
400
400
pub derive_tagged_enum_destructor : bool ,
401
401
/// Whether to generate copy-constructors of tagged enums.
402
402
pub derive_tagged_enum_copy_constructor : bool ,
403
+ /// Whether to generate empty, private default-constructors for tagged
404
+ /// enums.
405
+ pub private_default_tagged_enum_constructor : bool ,
403
406
}
404
407
405
408
impl EnumConfig {
@@ -439,6 +442,15 @@ impl EnumConfig {
439
442
}
440
443
self . derive_tagged_enum_copy_constructor
441
444
}
445
+ pub ( crate ) fn private_default_tagged_enum_constructor (
446
+ & self ,
447
+ annotations : & AnnotationSet ,
448
+ ) -> bool {
449
+ if let Some ( x) = annotations. bool ( "private-default-tagged-enum-constructor" ) {
450
+ return x;
451
+ }
452
+ self . private_default_tagged_enum_constructor
453
+ }
442
454
}
443
455
444
456
/// Settings to apply to generated constants.
Original file line number Diff line number Diff line change @@ -890,6 +890,22 @@ impl Source for Enum {
890
890
}
891
891
}
892
892
893
+ if config. language == Language :: Cxx
894
+ && config
895
+ . enumeration
896
+ . private_default_tagged_enum_constructor ( & self . annotations )
897
+ {
898
+ out. new_line ( ) ;
899
+ out. new_line ( ) ;
900
+ write ! ( out, "private:" ) ;
901
+ out. new_line ( ) ;
902
+ write ! ( out, "{}()" , self . export_name) ;
903
+ out. open_brace ( ) ;
904
+ out. close_brace ( false ) ;
905
+ write ! ( out, "public:" ) ;
906
+ out. new_line ( ) ;
907
+ }
908
+
893
909
if config. language == Language :: Cxx
894
910
&& config
895
911
. enumeration
Original file line number Diff line number Diff line change @@ -102,6 +102,7 @@ derive_mut_casts = false
102
102
# cast_assert_name = "ASSERT"
103
103
derive_tagged_enum_destructor = false
104
104
derive_tagged_enum_copy_constructor = false
105
+ private_default_tagged_enum_constructor = false
105
106
106
107
107
108
You can’t perform that action at this time.
0 commit comments