in confidence/src/lib.rs [106:140]
fn process_flag(
&self,
resolved_flag: &ResolvedFlag,
property_path: Vec<&str>,
) -> Result<EvaluationDetails<ConfidenceValue>, EvaluationError> {
let mut last_struct: &StructValue = &resolved_flag.value;
for path in property_path {
if let Some(value) = last_struct.fields.get(path) {
if let ConfidenceValue::Struct(struct_value) = value {
last_struct = struct_value;
continue;
} else {
return Ok(EvaluationDetails::builder()
.reason(EvaluationReason::TargetingMatch)
.variant(resolved_flag.variant.clone())
.value(value.clone())
.build());
}
} else {
return Err(EvaluationError::builder()
.message("The fetched flag name doesn't match")
.code(EvaluationErrorCode::FlagNotFound)
.build());
}
}
let value = ConfidenceValue::Struct(last_struct.clone());
return Ok(EvaluationDetails::builder()
.reason(EvaluationReason::Default)
.variant(resolved_flag.variant.clone())
.value(value)
.build());
}