79 lines
2.6 KiB
Rust
79 lines
2.6 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 {
|
|
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>(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 {
|
|
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))),
|
|
}
|
|
}
|
|
}
|