Write a single frontmatter field in YAML format.
(output: &mut String, key: &str, value: &serde_json::Value)
| 1023 | |
| 1024 | /// Write a single frontmatter field in YAML format. |
| 1025 | fn write_frontmatter_field(output: &mut String, key: &str, value: &serde_json::Value) { |
| 1026 | use std::fmt::Write; |
| 1027 | match value { |
| 1028 | serde_json::Value::String(s) => { |
| 1029 | // Keep simple strings readable, but quote values that our parser |
| 1030 | // would otherwise reinterpret as another scalar/container type. |
| 1031 | // JSON string syntax is valid YAML and preserves escapes. |
| 1032 | let parsed_unquoted = parse_yaml_value(s); |
| 1033 | let has_edge_whitespace = s.chars().next().is_some_and(char::is_whitespace) |
| 1034 | || s.chars().last().is_some_and(char::is_whitespace); |
| 1035 | if parsed_unquoted != serde_json::Value::String(s.clone()) |
| 1036 | || s.contains(": ") |
| 1037 | || s.contains('#') |
| 1038 | || s.contains('\n') |
| 1039 | || s.starts_with('{') |
| 1040 | || s.starts_with('[') |
| 1041 | || s.starts_with('"') |
| 1042 | || s.starts_with('\'') |
| 1043 | || has_edge_whitespace |
| 1044 | { |
| 1045 | let rendered = serde_json::to_string(s).unwrap_or_else(|_| "\"\"".to_string()); |
| 1046 | let _ = writeln!(output, "{}: {}", key, rendered); |
| 1047 | } else { |
| 1048 | let _ = writeln!(output, "{}: {}", key, s); |
| 1049 | } |
| 1050 | } |
| 1051 | serde_json::Value::Number(n) => { |
| 1052 | let _ = writeln!(output, "{}: {}", key, n); |
| 1053 | } |
| 1054 | serde_json::Value::Bool(b) => { |
| 1055 | let _ = writeln!(output, "{}: {}", key, b); |
| 1056 | } |
| 1057 | serde_json::Value::Array(arr) => { |
| 1058 | let rendered = serde_json::to_string(arr).unwrap_or_else(|_| "[]".to_string()); |
| 1059 | let _ = writeln!(output, "{}: {}", key, rendered); |
| 1060 | } |
| 1061 | serde_json::Value::Object(_) => { |
| 1062 | // Inline JSON for nested objects |
| 1063 | let _ = writeln!(output, "{}: {}", key, value); |
| 1064 | } |
| 1065 | serde_json::Value::Null => { |
| 1066 | let _ = writeln!(output, "{}: null", key); |
| 1067 | } |
| 1068 | } |
| 1069 | } |
| 1070 | |
| 1071 | // ── Deflation helpers ─────────────────────────────────────────────────── |
| 1072 |
no test coverage detected