growthbook_rust/coverage/
model.rs

1use serde_json::Value;
2
3use crate::hash::{HashCode, HashCodeVersion};
4use crate::model_public::{FeatureResult, GrowthBookAttributeValue};
5use crate::range::model::Range;
6
7pub struct Coverage;
8
9impl Coverage {
10    pub fn check(
11        value: &GrowthBookAttributeValue,
12        option_coverage: Option<f32>,
13        option_range: Option<Range>,
14        feature_name: &str,
15        hash_version: Option<i64>,
16        force_value: Value,
17    ) -> Option<FeatureResult> {
18        if let Some(user_weight) = HashCode::hash_code(&value.to_string(), feature_name, HashCodeVersion::from(hash_version)) {
19            if let Some(range) = option_range {
20                if range.in_range(&user_weight) {
21                    Some(FeatureResult::force(force_value.clone()))
22                } else {
23                    None
24                }
25            } else if let Some(coverage) = option_coverage {
26                if coverage.gt(&user_weight) {
27                    Some(FeatureResult::force(force_value.clone()))
28                } else {
29                    None
30                }
31            } else {
32                None
33            }
34        } else {
35            None
36        }
37    }
38}