rust-bindgen
rust-bindgen copied to clipboard
bindgen cannot generate `Default` trait for enum
I don't know if this is a bug, or it is by design.
Input C/C++ Header
A minimal header
typedef enum cudaError_enum {
CUDA_SUCCESS = 0,
CUDA_ERROR_INVALID_VALUE = 1,
CUDA_ERROR_OUT_OF_MEMORY = 2,
};
Bindgen Invocation
With bindgen 0.69.4.
bindgen \
--default-enum-style=newtype \
--with-derive-default \
header.h
Actual Results
impl cudaError_enum {
pub const CUDA_SUCCESS: cudaError_enum = cudaError_enum(0);
}
impl cudaError_enum {
pub const CUDA_ERROR_INVALID_VALUE: cudaError_enum = cudaError_enum(1);
}
impl cudaError_enum {
pub const CUDA_ERROR_OUT_OF_MEMORY: cudaError_enum = cudaError_enum(2);
}
#[repr(transparent)]
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
pub struct cudaError_enum(pub ::std::os::raw::c_uint);
Expected Results
Currently I have to use
bindgen \
--default-enum-style=newtype \
--with-derive-default \
--with-derive-custom .*_enum=Default \
header.h
to generate
impl cudaError_enum {
pub const CUDA_SUCCESS: cudaError_enum = cudaError_enum(0);
}
impl cudaError_enum {
pub const CUDA_ERROR_INVALID_VALUE: cudaError_enum = cudaError_enum(1);
}
impl cudaError_enum {
pub const CUDA_ERROR_OUT_OF_MEMORY: cudaError_enum = cudaError_enum(2);
}
#[repr(transparent)]
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq, Default)]
pub struct cudaError_enum(pub ::std::os::raw::c_uint);