mozilla / cbindgen

A project for generating C bindings from Rust code
Mozilla Public License 2.0
2.29k stars 294 forks source link

feat: support #[deprecated] on enum variants #933

Closed bkaestner closed 3 months ago

bkaestner commented 3 months ago

While the #[deprecated] attribute was already used on structs, fns and enums, it was not implemented for enum variants. The information about enum variants is already available via variant.body.annotations, so the support for the #[deprecated]attribute on enum-variant level is more or less only another pair of entries within the EnumConfig.

This commit adds two new options within the [enum] settings:

Both get active only on #[deprecated] variants, e.g.,

 #[repr(u8)]
 enum ApiLevel {
     #[deprecated(note = "Legacy Support until 2025")]
     L1 = 1,
     #[deprecated]
     L2 = 2,
     L3 = 3,
     L4 = 4,
}

For enums with struct variants, the current struct deprecation methods are already working good enough (see tests/expecations/deprecated*).

This is my first PR on cbindgen, and I'm not entirely sure I correctly understood the test suite, and whether there need to be more tests for this feature.