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