# Coproduct Have you ever found yourself in a situation where you'd like to have two enums where only a few variants differ? Usually that involves a lot of duplication and boilerplate. Not any more! Coproducts allow you to describe them and convert between them effortlessly! ```Rust use coproduct::{Coproduct, MkUnion, Union}; #[derive(Debug)] struct A; #[derive(Debug)] struct B; #[derive(Debug)] struct C; #[derive(Debug)] struct D; type ABC = MkUnion!(A, B, C); fn main() { let abc: Coproduct = Coproduct::inject(A); let abcd: Coproduct> = abc.embed(); println!("{:?}", abcd); } ``` Find out more in the [documentation](https://docs.rs/coproduct).