saf_core/logging/
formatter.rs1pub fn format_saf_log_line(
14 module: &str,
15 phase: &str,
16 tag: &str,
17 narrative: &str,
18 kv: &str,
19) -> String {
20 let mut line = String::with_capacity(128);
21
22 line.push('[');
24 line.push_str(module);
25 line.push_str("::");
26 line.push_str(phase);
27 line.push_str("][");
28 line.push_str(tag);
29 line.push(']');
30
31 match (narrative.is_empty(), kv.is_empty()) {
32 (true, false) => {
34 line.push_str(" | ");
35 line.push_str(kv);
36 }
37 (false, true) => {
39 line.push(' ');
40 line.push_str(narrative);
41 }
42 (false, false) => {
44 line.push(' ');
45 line.push_str(narrative);
46 line.push_str(" | ");
47 line.push_str(kv);
48 }
49 (true, true) => {}
51 }
52
53 line
54}
55
56#[cfg(test)]
57mod tests {
58 use super::*;
59
60 #[test]
61 fn test_full_form() {
62 let line = format_saf_log_line(
63 "pta",
64 "solve",
65 "worklist",
66 "pts grew",
67 "val=0x1a2b pts_size=3",
68 );
69 assert_eq!(
70 line,
71 "[pta::solve][worklist] pts grew | val=0x1a2b pts_size=3"
72 );
73 }
74
75 #[test]
76 fn test_narrative_only() {
77 let line = format_saf_log_line("pta", "solve", "convergence", "fixpoint reached", "");
78 assert_eq!(line, "[pta::solve][convergence] fixpoint reached");
79 }
80
81 #[test]
82 fn test_keys_only() {
83 let line = format_saf_log_line("pta", "solve", "stats", "", "iter=12 worklist=342");
84 assert_eq!(line, "[pta::solve][stats] | iter=12 worklist=342");
85 }
86}