1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
use generic_array::{GenericArray, ArrayLength};

pub trait LineValid
where
    Self: Sized,
{
    type Length: ArrayLength<u8>;

    fn try_clone_array(a: &GenericArray<u8, Self::Length>) -> Result<Self, ()>;
    fn clone_line(&self) -> GenericArray<u8, Self::Length>;
}

pub trait Line
where
    Self: LineValid,
{
    fn clone_array(a: &GenericArray<u8, Self::Length>) -> Self;
}

impl<L> LineValid for GenericArray<u8, L>
where
    L: ArrayLength<u8>,
{
    type Length = L;

    fn try_clone_array(a: &GenericArray<u8, Self::Length>) -> Result<Self, ()> {
        Ok(a.clone())
    }

    fn clone_line(&self) -> GenericArray<u8, Self::Length> {
        self.clone()
    }
}

impl<L> Line for GenericArray<u8, L>
where
    L: ArrayLength<u8>,
{
    fn clone_array(a: &GenericArray<u8, Self::Length>) -> Self {
        a.clone()
    }
}