Skip to main content

tuwunel_core/log/
fmt.rs

1//! HTML and Markdown formatting for captured log events.
2//!
3//! Each helper appends one entry or table header to a caller-provided
4//! formatter. Event entries include tracing level and span context, while the
5//! header helper writes column labels.
6
7use std::fmt::Write;
8
9use super::{Level, color};
10use crate::Result;
11
12/// Appends one captured log event as an HTML line.
13///
14/// The level receives its level-specific Matrix color and each component is
15/// placed in a code element. A line break terminates the rendered entry.
16pub fn html<S>(out: &mut S, level: &Level, span: &str, msg: &str) -> Result
17where
18	S: Write + ?Sized,
19{
20	let color = color::code_tag(level);
21	let level = level.as_str().to_uppercase();
22	write!(
23		out,
24		"<font data-mx-color=\"{color}\"><code>{level:>5}</code></font> <code>{span:^12}</code> \
25		 <code>{msg}</code><br>"
26	)?;
27
28	Ok(())
29}
30
31/// Appends one captured log event as a Markdown line.
32///
33/// Level, span, and message are rendered as inline-code columns separated by
34/// spaces. A newline terminates the entry.
35pub fn markdown<S>(out: &mut S, level: &Level, span: &str, msg: &str) -> Result
36where
37	S: Write + ?Sized,
38{
39	let level = level.as_str().to_uppercase();
40	writeln!(out, "`{level:>5}` `{span:^12}` `{msg}`")?;
41
42	Ok(())
43}
44
45/// Appends one captured log event as a Markdown table row.
46///
47/// The level and span receive fixed-width alignment while the message remains
48/// left aligned. A newline terminates the row.
49pub fn markdown_table<S>(out: &mut S, level: &Level, span: &str, msg: &str) -> Result
50where
51	S: Write + ?Sized,
52{
53	let level = level.as_str().to_uppercase();
54	writeln!(out, "| {level:>5} | {span:^12} | {msg} |")?;
55
56	Ok(())
57}
58
59/// Appends the header for a captured-log Markdown table.
60///
61/// The header defines level, span, and message columns together with their
62/// alignment row. Callers can append rows with `markdown_table`.
63pub fn markdown_table_head<S>(out: &mut S) -> Result
64where
65	S: Write + ?Sized,
66{
67	write!(out, "| level | span | message |\n| ------: | :-----: | :------- |\n")?;
68
69	Ok(())
70}