From fee5ba334d8e61d8263a60768a7b49994abf8d39 Mon Sep 17 00:00:00 2001 From: Danil Grigorev Date: Sun, 24 Dec 2023 17:38:14 +0100 Subject: [PATCH] Add helper methods: kind and list_kind for typeMeta Signed-off-by: Danil Grigorev --- kube-core/src/metadata.rs | 36 ++++++++++++++++++++++++++++++++++++ kube-core/src/object.rs | 10 ++++++---- 2 files changed, 42 insertions(+), 4 deletions(-) diff --git a/kube-core/src/metadata.rs b/kube-core/src/metadata.rs index d087d51b6..429976a3a 100644 --- a/kube-core/src/metadata.rs +++ b/kube-core/src/metadata.rs @@ -17,6 +17,42 @@ pub struct TypeMeta { pub kind: String, } +impl TypeMeta { + /// Construct a new `TypeMeta` for the object list from the given resource. + /// + /// ``` + /// # use k8s_openapi::api::core::v1::Pod; + /// # use kube_core::TypeMeta; + /// + /// let type_meta = TypeMeta::list_kind::(); + /// assert_eq!(type_meta.kind, "PodList"); + /// assert_eq!(type_meta.api_version, "v1"); + /// ``` + pub fn list_kind>() -> Self { + TypeMeta { + api_version: K::api_version(&()).into(), + kind: K::kind(&()).to_string() + "List", + } + } + + /// Construct a new `TypeMeta` for the object from the given resource. + /// + /// ``` + /// # use k8s_openapi::api::core::v1::Pod; + /// # use kube_core::TypeMeta; + /// + /// let type_meta = TypeMeta::kind::(); + /// assert_eq!(type_meta.kind, "Pod"); + /// assert_eq!(type_meta.api_version, "v1"); + /// ``` + pub fn kind>() -> Self { + TypeMeta { + api_version: K::api_version(&()).into(), + kind: K::kind(&()).into(), + } + } +} + /// A generic representation of any object with `ObjectMeta`. /// /// It allows clients to get access to a particular `ObjectMeta` diff --git a/kube-core/src/object.rs b/kube-core/src/object.rs index ff96c126f..66fdb32b7 100644 --- a/kube-core/src/object.rs +++ b/kube-core/src/object.rs @@ -54,11 +54,12 @@ impl ObjectList { /// /// ``` /// use kube::api::{ListMeta, ObjectList, TypeMeta}; + /// use k8s_openapi::api::core::v1::Pod; /// - /// let types: TypeMeta = Default::default(); + /// let types: TypeMeta = TypeMeta::list_kind::(); /// let metadata: ListMeta = Default::default(); /// let items = vec![1, 2, 3]; - /// let objectlist = ObjectList { types, metadata, items }; + /// # let objectlist = ObjectList { types, metadata, items }; /// /// let first = objectlist.iter().next(); /// println!("First element: {:?}", first); // prints "First element: Some(1)" @@ -73,11 +74,12 @@ impl ObjectList { /// /// ``` /// use kube::api::{ListMeta, ObjectList, TypeMeta}; + /// use k8s_openapi::api::core::v1::Pod; /// - /// let types: TypeMeta = Default::default(); + /// let types: TypeMeta = TypeMeta::list_kind::(); /// let metadata: ListMeta = Default::default(); /// let items = vec![1, 2, 3]; - /// let mut objectlist = ObjectList { types, metadata, items }; + /// # let mut objectlist = ObjectList { types, metadata, items }; /// /// let mut first = objectlist.iter_mut().next(); ///