#![expect(
clippy::disallowed_types,
reason = "the root is filled in on its serialized wire value (#1694)"
)]
use serde::{Serialize, Serializer};
use super::model::WebTemplateNode;
pub(super) fn serialize_root<S: Serializer>(
node: &WebTemplateNode,
s: S,
) -> Result<S::Ok, S::Error> {
use serde_json::json;
let mut value = serde_json::to_value(node).map_err(serde::ser::Error::custom)?;
if let serde_json::Value::Object(map) = &mut value {
map.entry("name").or_insert_with(|| json!(node.id));
map.entry("localizedName")
.or_insert_with(|| json!(node.name.clone().unwrap_or_else(|| node.id.clone())));
map.entry("nodeId").or_insert_with(|| json!(""));
map.entry("min").or_insert_with(|| json!(0));
map.entry("localizedNames").or_insert_with(|| json!({}));
map.entry("localizedDescriptions")
.or_insert_with(|| json!({}));
map.entry("children").or_insert_with(|| json!([]));
}
value.serialize(s)
}