diff options
Diffstat (limited to 'tests/rust/destructor_and_copy_ctor.rs')
-rw-r--r-- | tests/rust/destructor_and_copy_ctor.rs | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/tests/rust/destructor_and_copy_ctor.rs b/tests/rust/destructor_and_copy_ctor.rs new file mode 100644 index 0000000..9c96145 --- /dev/null +++ b/tests/rust/destructor_and_copy_ctor.rs @@ -0,0 +1,97 @@ +use std::ptr::NonNull; + +/// This will have a destructor manually implemented via variant_body, and +/// similarly a Drop impl in Rust. +#[repr(C)] +pub struct OwnedSlice<T> { + len: usize, + ptr: NonNull<T>, +} + +#[repr(u8)] +pub enum FillRule { A, B } + +#[repr(C)] +pub struct Polygon<LengthPercentage> { + pub fill: FillRule, + pub coordinates: OwnedSlice<LengthPercentage>, +} + +#[repr(C, u8)] +pub enum Foo<T> { + Bar, + Polygon1(Polygon<T>), + Slice1(OwnedSlice<T>), + Slice2(OwnedSlice<i32>), + Slice3 { + fill: FillRule, + coords: OwnedSlice<T>, + }, + Slice4 { + fill: FillRule, + coords: OwnedSlice<i32>, + }, +} + +#[repr(u8)] +pub enum Baz<T> { + Bar2, + Polygon21(Polygon<T>), + Slice21(OwnedSlice<T>), + Slice22(OwnedSlice<i32>), + Slice23 { + fill: FillRule, + coords: OwnedSlice<T>, + }, + Slice24 { + fill: FillRule, + coords: OwnedSlice<i32>, + }, +} + +#[repr(u8)] +pub enum Taz { + Bar3, + Taz1(i32), + Taz3(OwnedSlice<i32>), +} + +/// cbindgen:derive-tagged-enum-destructor=false +/// cbindgen:derive-tagged-enum-copy-constructor=false +#[repr(u8)] +pub enum Tazz { + Bar4, + Taz2(i32), +} + +/// cbindgen:derive-tagged-enum-copy-assignment=false +#[repr(u8)] +pub enum Tazzz { + Bar5, + Taz5(i32), +} + +#[repr(u8)] +pub enum Tazzzz { + Taz6(i32), + Taz7(u32), +} + +/// cbindgen:derive-eq=true +/// cbindgen:derive-neq=true +/// cbindgen:neq-attributes=NODISCARD +/// cbindgen:eq-attributes=NODISCARD +/// cbindgen:destructor-attributes=NOINLINE +/// cbindgen:copy-constructor-attributes=NOINLINE +/// cbindgen:copy-assignment-attributes=NOINLINE +#[repr(u8)] +pub enum Qux { + /// cbindgen:derive-eq=true + Qux1(i32), + /// cbindgen:derive-eq=true + Qux2(u32), +} + + +#[no_mangle] +pub extern "C" fn root(a: &Foo<u32>, b: &Baz<i32>, c: &Taz, d: Tazz, e: &Tazzz, f: &Tazzzz, g: &Qux) {} |