fn process_flag()

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());
    }