use enumcapsulate::Encapsulate;
pub struct VariantA;
#[automatically_derived]
impl ::core::clone::Clone for VariantA {
#[inline]
fn clone(&self) -> VariantA {
VariantA
}
}
pub struct VariantB;
#[automatically_derived]
impl ::core::clone::Clone for VariantB {
#[inline]
fn clone(&self) -> VariantB {
VariantB
}
}
pub struct VariantC;
#[automatically_derived]
impl ::core::clone::Clone for VariantC {
#[inline]
fn clone(&self) -> VariantC {
VariantC
}
}
pub struct VariantD;
#[automatically_derived]
impl ::core::clone::Clone for VariantD {
#[inline]
fn clone(&self) -> VariantD {
VariantD
}
}
#[enumcapsulate(exclude(From, TryInto))]
pub enum Enum {
OneTupleField(VariantA),
OneStructField { variant: VariantB },
#[enumcapsulate(exclude)]
ExcludedWildcard(VariantC),
#[enumcapsulate(exclude(FromVariant, AsVariant))]
ExcludedSelective(VariantD),
}
impl ::enumcapsulate::FromVariant<VariantA> for Enum {
fn from_variant(inner: VariantA) -> Self {
Self::OneTupleField(inner)
}
}
impl ::enumcapsulate::FromVariant<VariantB> for Enum {
fn from_variant(inner: VariantB) -> Self {
Self::OneStructField {
variant: inner,
}
}
}
impl ::enumcapsulate::AsVariant<VariantA> for Enum
where
VariantA: Clone,
{
fn as_variant(&self) -> Option<VariantA> {
match self {
Enum::OneTupleField(inner, ..) => Some(inner.clone()),
_ => None,
}
}
}
impl ::enumcapsulate::AsVariant<VariantB> for Enum
where
VariantB: Clone,
{
fn as_variant(&self) -> Option<VariantB> {
match self {
Enum::OneStructField { variant: inner, .. } => Some(inner.clone()),
_ => None,
}
}
}
impl ::enumcapsulate::AsVariantRef<VariantA> for Enum {
fn as_variant_ref(&self) -> Option<&VariantA> {
match self {
Enum::OneTupleField(inner, ..) => Some(inner),
_ => None,
}
}
}
impl ::enumcapsulate::AsVariantRef<VariantB> for Enum {
fn as_variant_ref(&self) -> Option<&VariantB> {
match self {
Enum::OneStructField { variant: inner, .. } => Some(inner),
_ => None,
}
}
}
impl ::enumcapsulate::AsVariantRef<VariantD> for Enum {
fn as_variant_ref(&self) -> Option<&VariantD> {
match self {
Enum::ExcludedSelective(inner, ..) => Some(inner),
_ => None,
}
}
}
impl ::enumcapsulate::AsVariantMut<VariantA> for Enum {
fn as_variant_mut(&mut self) -> Option<&mut VariantA> {
match self {
Enum::OneTupleField(inner, ..) => Some(inner),
_ => None,
}
}
}
impl ::enumcapsulate::AsVariantMut<VariantB> for Enum {
fn as_variant_mut(&mut self) -> Option<&mut VariantB> {
match self {
Enum::OneStructField { variant: inner, .. } => Some(inner),
_ => None,
}
}
}
impl ::enumcapsulate::AsVariantMut<VariantD> for Enum {
fn as_variant_mut(&mut self) -> Option<&mut VariantD> {
match self {
Enum::ExcludedSelective(inner, ..) => Some(inner),
_ => None,
}
}
}
impl ::enumcapsulate::IntoVariant<VariantA> for Enum {
fn into_variant(self) -> Result<VariantA, Self> {
match self {
Enum::OneTupleField(inner, ..) => Ok(inner),
err => Err(err),
}
}
}
impl ::enumcapsulate::IntoVariant<VariantB> for Enum {
fn into_variant(self) -> Result<VariantB, Self> {
match self {
Enum::OneStructField { variant: inner, .. } => Ok(inner),
err => Err(err),
}
}
}
impl ::enumcapsulate::IntoVariant<VariantD> for Enum {
fn into_variant(self) -> Result<VariantD, Self> {
match self {
Enum::ExcludedSelective(inner, ..) => Ok(inner),
err => Err(err),
}
}
}
impl ::enumcapsulate::VariantDowncast for Enum {}
fn main() {}