diff --git a/kube-core/src/object.rs b/kube-core/src/object.rs index ab75b1335..c4e962ac6 100644 --- a/kube-core/src/object.rs +++ b/kube-core/src/object.rs @@ -4,7 +4,7 @@ use crate::{ metadata::{ListMeta, ObjectMeta, TypeMeta}, resource::{DynamicResourceScope, Resource}, }; -use serde::{Deserialize, Serialize}; +use serde::{Deserialize, Deserializer, Serialize}; use std::borrow::Cow; /// A generic Kubernetes object list @@ -28,10 +28,22 @@ where pub metadata: ListMeta, /// The items we are actually interested in. In practice; `T := Resource`. - #[serde(bound(deserialize = "Vec: Deserialize<'de>"))] + #[serde( + deserialize_with = "deserialize_null_as_default", + bound(deserialize = "Vec: Deserialize<'de>") + )] pub items: Vec, } +fn deserialize_null_as_default<'de, D, T>(deserializer: D) -> Result +where + T: Default + Deserialize<'de>, + D: Deserializer<'de>, +{ + let opt = Option::deserialize(deserializer)?; + Ok(opt.unwrap_or_default()) +} + impl ObjectList { /// `iter` returns an Iterator over the elements of this ObjectList ///