fix(serde): add #[serde(default)] to Option<Vec/Map> resource fields#39
Open
indyjonesnl wants to merge 4 commits into
Open
fix(serde): add #[serde(default)] to Option<Vec/Map> resource fields#39indyjonesnl wants to merge 4 commits into
indyjonesnl wants to merge 4 commits into
Conversation
K8s API omits empty arrays — without serde(default), deserialization of minimal objects fails round-trip. Affects certificates, componentstatus, csi resource files. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
K8s API omits empty arrays — without serde(default), deserialization of minimal objects fails round-trip. Affects admission_webhook, authentication, authorization, autoscaling resource files. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Follow-up to the batch-A patch — the regex pattern missed fully-qualified std::collections::HashMap fields in admission_webhook and autoscaling. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
K8s API omits empty arrays — without serde(default), deserialization of minimal objects fails round-trip. Affects endpoints, endpointslice, flowcontrol, ingress, networking, policy, rbac resource files. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
K8s API serialization omits empty arrays. `Option<Vec>` fields without `#[serde(default)]` then fail deserialization round-trip when the source JSON omits the field entirely — even though that's the standard K8s wire format for "no items".
Affected ~80 fields across ~15 resource files. Minimal objects (a Service with no `ports`, a Pod with no `tolerations`, etc.) couldn't round-trip through our types.
Fix
For every `Option<Vec>`, `Option<HashMap<K, V>>`, `Option<BTreeMap<K, V>>` field on a resource struct, add `#[serde(default)]` alongside the existing `#[serde(skip_serializing_if = "Option::is_none")]`. Preserve any `rename = "..."` overrides — order normalized to `rename → default → skip_serializing_if`.
Split into four commits by file batch (A, A-qualified-maps, B, C) for reviewability:
Mechanical change — no behavior change for any object that does populate these fields. Restores round-trip compatibility for objects that omit them.
Verification
`cargo build --workspace --locked` clean. No new test failures vs baseline.
Depends on #32 for green CI.