Shared Enums
#[cxx::bridge]mod ffi {enum Suit {Clubs,Diamonds,Hearts,Spades,}}
Generated Rust:
#![allow(unused)]fn main() {#[derive(Copy, Clone, PartialEq, Eq)]#[repr(transparent)]pub struct Suit {pub repr: u8,}#[allow(non_upper_case_globals)]impl Suit {pub const Clubs: Self = Suit { repr: 0 };pub const Diamonds: Self = Suit { repr: 1 };pub const Hearts: Self = Suit { repr: 2 };pub const Spades: Self = Suit { repr: 3 };}}
Generated C++:
enum class Suit : uint8_t {Clubs = 0,Diamonds = 1,Hearts = 2,Spades = 3,};
- On the Rust side, the code generated for shared enums is actually a struct wrapping a numeric value. This is because it is not UB in C++ for an enum class to hold a value different from all of the listed variants, and our Rust representation needs to have the same behavior.