growthbook_sdk_rust/coverage/
model.rs

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