Skip to content

Commit

Permalink
Drop SelectorExt in favor of type associated Matcher
Browse files Browse the repository at this point in the history
Signed-off-by: Danil-Grigorev <danil.grigorev@suse.com>
  • Loading branch information
Danil-Grigorev committed Jul 19, 2024
1 parent a676a86 commit 2050c42
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 42 deletions.
48 changes: 8 additions & 40 deletions kube-core/src/labels.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,6 @@ use std::{
};
use thiserror::Error;

use crate::ResourceExt;

#[derive(Debug, Error)]
#[error("failed to parse value as expression: {0}")]
/// Indicates failure of conversion to Expression
Expand All @@ -21,45 +19,11 @@ pub struct ParseExpressionError(pub String);
// local type aliases
type Expressions = Vec<Expression>;

mod private {
pub trait Sealed {}
impl<R: super::ResourceExt> Sealed for R {}
}

/// Extensions to [`ResourceExt`](crate::ResourceExt)
/// Helper methods for resource selection based on provided Selector
pub trait SelectorExt: private::Sealed {
fn selector_map(&self) -> &BTreeMap<String, String>;

/// Perform a match on the resource using Matcher trait
///
/// ```
/// use k8s_openapi::api::core::v1::Pod;
/// use k8s_openapi::apimachinery::pkg::apis::meta::v1::LabelSelector;
/// use kube_core::SelectorExt;
/// use kube_core::{Expression, Selector, ParseExpressionError};
///
/// let selector: Selector = LabelSelector::default().try_into()?;
/// let matches = Pod::default().selector_matches(&selector);
/// assert!(matches);
/// let matches = Pod::default().selector_matches(&Expression::Exists("foo".into()));
/// assert!(!matches);
/// # Ok::<(), ParseExpressionError>(())
/// ```
fn selector_matches(&self, selector: &impl Matcher) -> bool {
selector.matches(self.selector_map())
}
}

impl<R: ResourceExt> SelectorExt for R {
fn selector_map(&self) -> &BTreeMap<String, String> {
self.labels()
}
}

/// Matcher trait for implementing alternalive Selectors
pub trait Matcher {
/// Perform a match check on the resource labels
type Items;

/// Perform a match check on the arbitrary components like labels
///
/// ```
/// use k8s_openapi::apimachinery::pkg::apis::meta::v1::LabelSelector;
Expand All @@ -71,7 +35,7 @@ pub trait Matcher {
/// selector.matches(&Default::default());
/// # Ok::<(), ParseExpressionError>(())
/// ```
fn matches(&self, labels: &BTreeMap<String, String>) -> bool;
fn matches(&self, on: &Self::Items) -> bool;
}

/// A selector expression with existing operations
Expand Down Expand Up @@ -184,6 +148,8 @@ impl Selector {
}

impl Matcher for Selector {
type Items = BTreeMap<String, String>;

/// Perform a match check on the resource labels
fn matches(&self, labels: &BTreeMap<String, String>) -> bool {
for expr in self.0.iter() {
Expand All @@ -196,6 +162,8 @@ impl Matcher for Selector {
}

impl Matcher for Expression {
type Items = BTreeMap<String, String>;

fn matches(&self, labels: &BTreeMap<String, String>) -> bool {
match self {
Expression::In(key, values) => match labels.get(key) {
Expand Down
2 changes: 1 addition & 1 deletion kube-core/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ pub use resource::{
pub mod response;
pub use response::Status;

pub use labels::{Expression, Matcher, ParseExpressionError, Selector, SelectorExt};
pub use labels::{Expression, Matcher, ParseExpressionError, Selector};

#[cfg_attr(docsrs, doc(cfg(feature = "schema")))]
#[cfg(feature = "schema")]
Expand Down
1 change: 0 additions & 1 deletion kube/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -199,7 +199,6 @@ pub mod prelude {
#[cfg(feature = "unstable-client")] pub use crate::client::scope::NamespacedRef;

#[allow(unreachable_pub)] pub use crate::core::PartialObjectMetaExt as _;
#[allow(unreachable_pub)] pub use crate::core::SelectorExt as _;
pub use crate::{core::crd::CustomResourceExt as _, Resource as _, ResourceExt as _};

#[cfg(feature = "runtime")] pub use crate::runtime::utils::WatchStreamExt as _;
Expand Down

0 comments on commit 2050c42

Please sign in to comment.