psyche_utils/bucket_strainer/rules/
bucket_limit_rule.rs

1use crate::bucket_strainer::{Bucket, Rule};
2use crate::Scalar;
3
4/// Bucket rule that scores `1.0` as long as given bucket has less items than specified limit.
5#[derive(Clone)]
6pub struct BucketLimitRule {
7    /// Number of items that bucket can have.
8    pub limit: usize,
9}
10
11impl BucketLimitRule {
12    pub fn new(limit: usize) -> Self {
13        Self { limit }
14    }
15}
16
17impl<T> Rule<T> for BucketLimitRule
18where
19    T: Clone,
20{
21    fn score(&self, _: &T, bucket: &Bucket<T>) -> Scalar {
22        if bucket.items().len() < self.limit {
23            1.0
24        } else {
25            0.0
26        }
27    }
28
29    fn box_clone(&self) -> Box<dyn Rule<T>> {
30        Box::new((*self).clone())
31    }
32}