use display_interface::AsyncWriteOnlyDataCommand;
use crate::properties::DisplayProperties;
pub struct DisplayMode<MODE>(pub MODE);
pub trait DisplayModeTrait<DV, DI> {
fn new(properties: DisplayProperties<DV, DI>) -> Self;
fn release(self) -> DisplayProperties<DV, DI>;
}
impl<MODE> DisplayMode<MODE> {
pub fn new<DV, DI>(properties: DisplayProperties<DV, DI>) -> Self
where
DI: AsyncWriteOnlyDataCommand,
MODE: DisplayModeTrait<DV, DI>,
{
DisplayMode(MODE::new(properties))
}
pub fn into<DV, DI, NMODE: DisplayModeTrait<DV, DI>>(self) -> NMODE
where
DI: AsyncWriteOnlyDataCommand,
DV: crate::display::DisplayVariant,
MODE: DisplayModeTrait<DV, DI>,
{
let properties = self.0.release();
NMODE::new(properties)
}
}