Skip to content

Allow generic arguments in enum variants #4

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

AlephAlpha
Copy link

@AlephAlpha AlephAlpha commented Jun 6, 2021

Allow generic arguments in enum variants, for example:

#[proxy_enum::proxy(Animal)]
mod proxy {
    use super::{Cat, Foo, Lion, Mouse};

    enum Animal {
        Cat(Cat<Foo>),
        Lion(Lion),
        Mouse(Mouse),
    }

    impl Animal {
        #[implement]
        fn feed(&self) {}
    }
}

This would expand to:

mod proxy {
    use super::{Cat, Foo, Lion, Mouse};
    enum Animal {
        Cat(Cat<Foo>),
        Lion(Lion),
        Mouse(Mouse),
    }
    impl Animal {
        fn feed(&self) {
            match self {
                Self::Cat(__self) => <Cat<Foo>>::feed(__self),
                Self::Lion(__self) => <Lion>::feed(__self),
                Self::Mouse(__self) => <Mouse>::feed(__self),
            }
        }
    }
    impl From<Cat<Foo>> for Animal {
        fn from(from: Cat<Foo>) -> Self {
            Animal::Cat(from)
        }
    }
    impl From<Lion> for Animal {
        fn from(from: Lion) -> Self {
            Animal::Lion(from)
        }
    }
    impl From<Mouse> for Animal {
        fn from(from: Mouse) -> Self {
            Animal::Mouse(from)
        }
    }
}

The < and > around the type are only added for inherent implementations, not trait implementations.

@AlephAlpha
Copy link
Author

Sorry for my username. It's just a coincidence.

@AlephAlpha AlephAlpha changed the title Allow generic parameters in enum variants Allow generic arguments in enum variants Jun 6, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant