use std::fmt::Display; use super::*; impl Display for WithLengthAndWidth { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { f.write_fmt(format_args!("{}", self.value())) } } impl Display for RenderedAny { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self { RenderedAny::Common(common) => f.write_fmt(format_args!("{}", common)), RenderedAny::Wide(vec) => f.write_fmt(format_args!("( {} )", RenderVec(vec))), RenderedAny::Long(vec) => f.write_fmt(format_args!("( {} )", RenderVec(vec))), } } } impl Display for RenderedCommon { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self { RenderedCommon::Empty => f.write_fmt(format_args!(".")), RenderedCommon::Resolution => f.write_fmt(format_args!("?")), RenderedCommon::Event(event) => f.write_fmt(format_args!("{}", event)), RenderedCommon::Action { name, rendered } => { f.write_fmt(format_args!("{} @ {}", name, rendered)) } } } } struct RenderVec(T); impl Display for RenderVec<&Vec>> { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { let mut delimiter = ""; let mut tail = "~"; for rendered in self.0 { f.write_fmt(format_args!("{}{}", delimiter, rendered))?; delimiter = " -> "; tail = ""; } f.write_fmt(format_args!("{}", tail)) } } impl Display for RenderVec<&Vec>> { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { let mut delimiter = ""; let mut tail = "~"; for rendered in self.0 { f.write_fmt(format_args!("{}{}", delimiter, rendered))?; delimiter = " | "; tail = ""; } f.write_fmt(format_args!("{}", tail)) } } impl Display for RenderedLong { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self { RenderedLong::Common(common) => f.write_fmt(format_args!("{}", common)), RenderedLong::Long(vec) => f.write_fmt(format_args!("( {} )", RenderVec(vec))), } } } impl Display for RenderedWide { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self { RenderedWide::Common(common) => f.write_fmt(format_args!("{}", common)), RenderedWide::Wide(vec) => f.write_fmt(format_args!("( {} )", RenderVec(vec))), } } }