Trait FallbackSpec

Source
pub trait FallbackSpec: Sized {
    type SpecType: From<Fallback<Self>>;
}
Expand description

This trait helps to create a new fallback type.

The code

#[derive(FallbackSpec)]
struct Foo {
    data1: i32,
    data2: String,
}

is the same as

struct Foo {
    data1: i32,
    data2: String,
}

struct FallbackFoo {
    data1: Fallback<i32>,
    data2: Fallback<String>,
}

impl FallbackSpec for Foo {
    type SpecType = FallbackFoo;
}

impl From<Fallback<Foo>> for FallbackFoo {
    fn from(data: Fallback<Foo>) -> Self {
        let (data, base_data) = data.unzip();
        let (data1, data2) = match data {
            Some(data) => (Some(data.data1), Some(data.data2)),
            None => (None, None),
        };
        let (base_data1, base_data2) = match base_data {
            Some(data) => (Some(data.data1), Some(data.data2)),
            None => (None, None),
        };
        Self {
            data1: Fallback::new(data1, base_data1),
            data2: Fallback::new(data2, base_data2),
        }
    }
}

Required Associated Types§

Source

type SpecType: From<Fallback<Self>>

The specialized fallback type.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§