1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
use crate::shared::utils::SlxData;

/// Into trait for converting slx data into original data
/// * This trait is generally used for implementing both `SlxInto` and `FromSlx`
/// * `O` : type of original data
pub trait SlxInto<O>: SlxData {
    /// Convert slx data into original data
    /// * Output: original data
    fn unslx(self) -> O;
}

/// From trait for converting slx data into original data
/// * `T` : type of slx data
pub trait FromSlx<T> where T: SlxData {
    /// Convert slx data into original data
    /// * `slx: T` : slx data
    /// * Output: original data
    fn from_slx(slx: T) -> Self;
}

impl<T,O> FromSlx<T> for O where T: SlxInto<O> {
    #[inline] fn from_slx(slx: T) -> Self { slx.unslx() }
}