Skip to content

Commit a9f1a4f

Browse files
authored
dynamic_watcher example: show how to use dynamic type information at loop level (#1258)
dynamic_watcher example: show how to grab type information common question Signed-off-by: clux <[email protected]>
1 parent e6eba5d commit a9f1a4f

File tree

1 file changed

+9
-6
lines changed

1 file changed

+9
-6
lines changed

examples/dynamic_watcher.rs

+9-6
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use futures::{Stream, StreamExt, TryStreamExt};
22
use kube::{
3-
api::{Api, DynamicObject, GroupVersionKind, Resource, ResourceExt},
3+
api::{Api, ApiResource, DynamicObject, GroupVersionKind, Resource, ResourceExt},
44
runtime::{metadata_watcher, watcher, watcher::Event, WatchStreamExt},
55
};
66
use serde::de::DeserializeOwned;
@@ -32,21 +32,24 @@ async fn main() -> anyhow::Result<()> {
3232

3333
// Start a metadata or a full resource watch
3434
if watch_metadata {
35-
handle_events(metadata_watcher(api, wc)).await
35+
handle_events(metadata_watcher(api, wc), &ar).await
3636
} else {
37-
handle_events(watcher(api, wc)).await
37+
handle_events(watcher(api, wc), &ar).await
3838
}
3939
}
4040

41-
async fn handle_events<K: Resource + Clone + Debug + Send + DeserializeOwned + 'static>(
41+
async fn handle_events<
42+
K: Resource<DynamicType = ApiResource> + Clone + Debug + Send + DeserializeOwned + 'static,
43+
>(
4244
stream: impl Stream<Item = watcher::Result<Event<K>>> + Send + 'static,
45+
ar: &ApiResource,
4346
) -> anyhow::Result<()> {
4447
let mut items = stream.applied_objects().boxed();
4548
while let Some(p) = items.try_next().await? {
4649
if let Some(ns) = p.namespace() {
47-
info!("saw {} in {ns}", p.name_any());
50+
info!("saw {} {} in {ns}", K::kind(ar), p.name_any());
4851
} else {
49-
info!("saw {}", p.name_any());
52+
info!("saw {} {}", K::kind(ar), p.name_any());
5053
}
5154
trace!("full obj: {p:?}");
5255
}

0 commit comments

Comments
 (0)