rust-bindgen icon indicating copy to clipboard operation
rust-bindgen copied to clipboard

bindgen cannot generate `Default` trait for enum

Open Forsworns opened this issue 1 year ago • 0 comments

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);

Forsworns avatar Feb 05 '24 09:02 Forsworns