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 { Self::Common(common) => f.write_fmt(format_args!("{}", common)), Self::Wide(vec) => f.write_fmt(format_args!("( {} )", RenderVec(vec))), Self::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 { Self::Empty => f.write_fmt(format_args!(".")), Self::Resolution => f.write_fmt(format_args!("?")), Self::Event(event) => f.write_fmt(format_args!("{}", event)), Self::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 { Self::Common(common) => f.write_fmt(format_args!("{}", common)), Self::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 { Self::Common(common) => f.write_fmt(format_args!("{}", common)), Self::Wide(vec) => f.write_fmt(format_args!("( {} )", RenderVec(vec))), } } }