Open
Description
Support for initializing enum
variants in pin-init
Currently, pin-init
does not support initializing enum
types or variants, which is limiting in cases where pinned data must be conditionally constructed. However, this requires a way to write the discriminant of an enum
.
There has been prior discussion on this topic:
- 💬 Zulip discussion: Prior discussions for manually building an enum?
- 📜 RFC: Unsafe Set Enum Discriminants
Example
#[pin_data]
struct Foo {
// ...
}
#[pin_data]
struct Bar {
// ...
}
#[pin_data]
enum MyEnum {
VariantA {
#[pin]
foo: Foo,
},
VariantB {
#[pin]
bar: Bar,
},
}
#[pin_data]
struct Wrapper {
#[pin]
data: MyEnum,
extra: u32,
}
impl Wrapper {
fn new(init_data: impl PinInit<MyEnum>) -> impl PinInit<Self> {
pin_init!(
data <- init_data,
extra: 42,
)
}
}
Metadata
Metadata
Assignees
Labels
No labels