growthbook_rust/coverage/
model.rs1use 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}