Write a single frontmatter field in YAML format.
(output: &mut String, key: &str, value: &serde_json::Value)
| 1262 | |
| 1263 | /// Write a single frontmatter field in YAML format. |
| 1264 | fn write_frontmatter_field(output: &mut String, key: &str, value: &serde_json::Value) { |
| 1265 | use std::fmt::Write; |
| 1266 | match value { |
| 1267 | serde_json::Value::String(s) => { |
| 1268 | // Keep simple strings readable, but quote values that our parser |
| 1269 | // would otherwise reinterpret as another scalar/container type. |
| 1270 | // JSON string syntax is valid YAML and preserves escapes. |
| 1271 | let parsed_unquoted = parse_yaml_value(s); |
| 1272 | let has_edge_whitespace = s.chars().next().is_some_and(char::is_whitespace) |
| 1273 | || s.chars().last().is_some_and(char::is_whitespace); |
| 1274 | if parsed_unquoted != serde_json::Value::String(s.clone()) |
| 1275 | || s.contains(": ") |
| 1276 | || s.contains('#') |
| 1277 | || s.contains('\n') |
| 1278 | || s.starts_with('{') |
| 1279 | || s.starts_with('[') |
| 1280 | || s.starts_with('"') |
| 1281 | || s.starts_with('\'') |
| 1282 | || has_edge_whitespace |
| 1283 | { |
| 1284 | let rendered = serde_json::to_string(s).unwrap_or_else(|_| "\"\"".to_string()); |
| 1285 | let _ = writeln!(output, "{}: {}", key, rendered); |
| 1286 | } else { |
| 1287 | let _ = writeln!(output, "{}: {}", key, s); |
| 1288 | } |
| 1289 | } |
| 1290 | serde_json::Value::Number(n) => { |
| 1291 | let _ = writeln!(output, "{}: {}", key, n); |
| 1292 | } |
| 1293 | serde_json::Value::Bool(b) => { |
| 1294 | let _ = writeln!(output, "{}: {}", key, b); |
| 1295 | } |
| 1296 | serde_json::Value::Array(arr) => { |
| 1297 | let rendered = serde_json::to_string(arr).unwrap_or_else(|_| "[]".to_string()); |
| 1298 | let _ = writeln!(output, "{}: {}", key, rendered); |
| 1299 | } |
| 1300 | serde_json::Value::Object(_) => { |
| 1301 | // Inline JSON for nested objects |
| 1302 | let _ = writeln!(output, "{}: {}", key, value); |
| 1303 | } |
| 1304 | serde_json::Value::Null => { |
| 1305 | let _ = writeln!(output, "{}: null", key); |
| 1306 | } |
| 1307 | } |
| 1308 | } |
| 1309 | |
| 1310 | // ── Deflation helpers ─────────────────────────────────────────────────── |
| 1311 |
no test coverage detected