serialize edn via display trait

This commit is contained in:
🪞👃🪞 2025-01-14 12:08:58 +01:00
parent 23fe9f0949
commit 08184f9906
3 changed files with 20 additions and 6 deletions

View file

@ -12,15 +12,28 @@ impl<T> Default for EdnItem<T> {
Self::Nil
}
}
impl<T: Debug + Display> Display for EdnItem<T> {
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<T: Debug> Debug for EdnItem<T> {
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)), ","))
}
}

View file

@ -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::*;