diff --git a/edn/src/edn_item.rs b/edn/src/edn_item.rs index d5d900d7..68f0100d 100644 --- a/edn/src/edn_item.rs +++ b/edn/src/edn_item.rs @@ -12,15 +12,28 @@ impl Default for EdnItem { Self::Nil } } +impl Display for EdnItem { + fn fmt (&self, f: &mut Formatter<'_>) -> Result<(), FormatError> { + use EdnItem::*; + use itertools::join; + match self { + Nil => write!(f, ""), + Num(u) => write!(f, "{u}"), + Sym(u) => write!(f, "{u}"), + Key(u) => write!(f, "{u}"), + Exp(e) => write!(f, "({})", join(e.iter().map(|i|format!("{}", i)), " ")) + } + } +} impl Debug for EdnItem { fn fmt (&self, f: &mut Formatter<'_>) -> Result<(), FormatError> { use EdnItem::*; match self { - Nil => write!(f, "Nil"), - Num(u) => write!(f, "Num({u})"), - Sym(u) => write!(f, "Sym({u:?})"), - Key(u) => write!(f, "Key({u:?})"), - Exp(e) => write!(f, "Exp({})", + Nil => write!(f, "(nil)"), + Num(u) => write!(f, "(num {u})"), + Sym(u) => write!(f, "(sym {u:?})"), + Key(u) => write!(f, "(key {u:?})"), + Exp(e) => write!(f, "(exp {})", itertools::join(e.iter().map(|i|format!("{:?}", i)), ",")) } } diff --git a/edn/src/lib.rs b/edn/src/lib.rs index b817a7d2..a53b2f5c 100644 --- a/edn/src/lib.rs +++ b/edn/src/lib.rs @@ -1,7 +1,7 @@ #![feature(type_alias_impl_trait)] #![feature(impl_trait_in_fn_trait_return)] -pub(crate) use std::{fmt::{Debug, Formatter, Error as FormatError}}; +pub(crate) use std::{fmt::{Debug, Display, Formatter, Error as FormatError}}; mod edn_error; pub use self::edn_error::*; mod edn_item; pub use self::edn_item::*; diff --git a/output/src/direction.rs b/output/src/direction.rs index 044a7d24..38126f4a 100644 --- a/output/src/direction.rs +++ b/output/src/direction.rs @@ -94,6 +94,7 @@ impl, B: Content> BspAreas for Bsp impl<'a, E: Output + 'a, T: EdnViewData<'a, E>> TryFromEdn<'a, T> for Bsp, RenderBox<'a, E>> { fn try_from_edn (s: &'a T, head: &EdnItem<&str>, tail: &'a [EdnItem<&str>]) -> Option { use EdnItem::*; + panic!("({head} {} {})", tail[0], tail[1]); Some(match (head, tail) { (Key("bsp/n"), [a, b]) => Self::n(s.get_content(a).expect("no a"), s.get(b).expect("no b")), (Key("bsp/s"), [a, b]) => Self::s(s.get_content(a).expect("no a"), s.get(b).expect("no b")),