77 lines
2.5 KiB
Rust
77 lines
2.5 KiB
Rust
use std::fmt::Display;
|
|
|
|
use super::*;
|
|
|
|
impl<A: Display> Display for WithLengthAndWidth<A> {
|
|
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>(T);
|
|
|
|
impl Display for RenderVec<&Vec<WithLengthAndWidth<RenderedWide>>> {
|
|
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<WithLengthAndWidth<RenderedLong>>> {
|
|
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))),
|
|
}
|
|
}
|
|
}
|