growthbook_sdk_rust/feature/
feature_rule_rollout.rs

1use crate::condition::use_case::ConditionsMatchesAttributes;
2use crate::coverage::model::Coverage;
3use crate::dto::GrowthBookFeatureRuleRollout;
4use crate::extensions::FindGrowthBookAttribute;
5use crate::model_private::FeatureResult;
6use crate::model_public::GrowthBookAttribute;
7
8impl GrowthBookFeatureRuleRollout {
9    pub fn get_match_value(
10        &self,
11        feature_name: &str,
12        user_attributes: &Vec<GrowthBookAttribute>,
13    ) -> Option<FeatureResult> {
14        if let Some(feature_attributes) = &self.conditions() {
15            if feature_attributes.matches(user_attributes) {
16                self.check_coverage(feature_name, user_attributes)
17            } else {
18                None
19            }
20        } else {
21            self.check_coverage(feature_name, user_attributes)
22        }
23    }
24
25    fn check_coverage(
26        &self,
27        feature_name: &str,
28        user_attributes: &Vec<GrowthBookAttribute>,
29    ) -> Option<FeatureResult> {
30        if let Some(hash_attribute) = &self.hash_attribute {
31            if let Some(user_value) = user_attributes.find_value(hash_attribute) {
32                return Coverage::check(&user_value, Some(self.coverage), self.range(), feature_name, self.hash_version, self.force.clone());
33            }
34        }
35
36        let fallback_attribute = self.get_fallback_attribute();
37        if let Some(user_value) = user_attributes.find_value(&fallback_attribute) {
38            return Coverage::check(&user_value, Some(self.coverage), self.range(), feature_name, self.hash_version, self.force.clone());
39        }
40
41        None
42    }
43}