use crate::*; use std::marker::PhantomData; pub trait EdnControlData {} /// Renders from EDN source and context. #[derive(Default)] pub enum EdnControls> { #[default] Inert, _Unused(PhantomData), Ok(T, EdnItem), Err(String) } impl> EdnControls { pub fn from_source (state: T, source: &str) -> Self { match EdnItem::read_one(&source) { Ok((layout, _)) => Self::Ok(state, layout), Err(error) => Self::Err(format!("{error}")) } } pub fn from_items (state: T, items: &[EdnItem<&str>]) -> Self { Self::Ok(state, EdnItem::Exp(items.iter().map(|i|(*i).clone()).collect())) } } pub trait EdnCommand: Command { fn from_edn <'a> (state: &C, head: &EdnItem<&str>, tail: &'a [EdnItem]) -> Self; }