Skip to content

Support for initializing enum variants in pin-init #59

@dakr

Description

@dakr

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:


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

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions