radn-rs/src/rstd/tracing/rendered_display.rs
2023-05-30 01:27:57 +00:00

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