Skip to content

Commit

Permalink
Add helper methods: kind and list_kind for typeMeta
Browse files Browse the repository at this point in the history
Signed-off-by: Danil Grigorev <[email protected]>
  • Loading branch information
Danil-Grigorev committed Dec 27, 2023
1 parent 1535505 commit fee5ba3
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 4 deletions.
36 changes: 36 additions & 0 deletions kube-core/src/metadata.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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::<Pod>();
/// assert_eq!(type_meta.kind, "PodList");
/// assert_eq!(type_meta.api_version, "v1");
/// ```
pub fn list_kind<K: Resource<DynamicType = ()>>() -> 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::<Pod>();
/// assert_eq!(type_meta.kind, "Pod");
/// assert_eq!(type_meta.api_version, "v1");
/// ```
pub fn kind<K: Resource<DynamicType = ()>>() -> 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`
Expand Down
10 changes: 6 additions & 4 deletions kube-core/src/object.rs
Original file line number Diff line number Diff line change
Expand Up @@ -54,11 +54,12 @@ impl<T: Clone> ObjectList<T> {
///
/// ```
/// use kube::api::{ListMeta, ObjectList, TypeMeta};
/// use k8s_openapi::api::core::v1::Pod;
///
/// let types: TypeMeta = Default::default();
/// let types: TypeMeta = TypeMeta::list_kind::<Pod>();
/// 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)"
Expand All @@ -73,11 +74,12 @@ impl<T: Clone> ObjectList<T> {
///
/// ```
/// use kube::api::{ListMeta, ObjectList, TypeMeta};
/// use k8s_openapi::api::core::v1::Pod;
///
/// let types: TypeMeta = Default::default();
/// let types: TypeMeta = TypeMeta::list_kind::<Pod>();
/// 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();
///
Expand Down

0 comments on commit fee5ba3

Please sign in to comment.