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
use crate::interface::DisplayInterface;
use crate::properties::DisplayProperties;
pub struct DisplayMode<MODE>(pub MODE);
pub trait DisplayModeTrait<DI> {
fn new(properties: DisplayProperties<DI>) -> Self;
fn release(self) -> DisplayProperties<DI>;
}
impl<MODE> DisplayMode<MODE> {
pub fn new<DI>(properties: DisplayProperties<DI>) -> Self
where
DI: DisplayInterface,
MODE: DisplayModeTrait<DI>,
{
DisplayMode(MODE::new(properties))
}
pub fn into<DI, NMODE: DisplayModeTrait<DI>>(self) -> NMODE
where
DI: DisplayInterface,
MODE: DisplayModeTrait<DI>,
{
let properties = self.0.release();
NMODE::new(properties)
}
}