diff --git a/.generator/src/generator/templates/model_simple.j2 b/.generator/src/generator/templates/model_simple.j2 index b0c4649890..ebeeae3f3a 100644 --- a/.generator/src/generator/templates/model_simple.j2 +++ b/.generator/src/generator/templates/model_simple.j2 @@ -118,6 +118,13 @@ impl<'de> Deserialize<'de> for {{ name }} { let mut _unparsed = false; while let Some((k, v)) = map.next_entry::()? { + {%- if additionalProperties != false and model.get("x-keep-typed-in-additional-properties") %} + // from_value:: is infallible so Ok always fires; + // for typed AP schemas a type mismatch silently drops the entry (same as the catch-all arm). + if let Ok(ap_value) = serde_json::from_value(v.clone()) { + additional_properties.insert(k.clone(), ap_value); + } + {%- endif %} match k.as_str() { {%- for attr, schema in model.get("properties", {}).items() %} {%- set required = attr in model.required %}