growthbook_sdk_rust/feature/
feature_rule_rollout.rs1use 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}