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.

Object Safety§

This trait is not object safe.

Implementors§