psyche_utils/bucket_strainer/rules/
closure_rule.rs1use crate::bucket_strainer::{Bucket, Rule};
2use crate::Scalar;
3
4#[derive(Clone)]
6pub struct ClosureRule<T>
7where
8 T: Clone,
9{
10 pub closure: fn(&T, &Bucket<T>) -> Scalar,
12}
13
14impl<T> ClosureRule<T>
15where
16 T: Clone,
17{
18 pub fn new(closure: fn(&T, &Bucket<T>) -> Scalar) -> Self {
19 Self { closure }
20 }
21}
22
23impl<T> Rule<T> for ClosureRule<T>
24where
25 T: Clone + 'static,
26{
27 fn score(&self, item: &T, bucket: &Bucket<T>) -> Scalar {
28 (self.closure)(item, bucket)
29 }
30
31 fn box_clone(&self) -> Box<dyn Rule<T>> {
32 Box::new((*self).clone())
33 }
34}