radn-rs/src/std/tracing/rendered_display.rs
2023-04-23 20:59:36 +00:00

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))),
}
}
}