use crate::eval::evaluator::EvalResult;
use crate::{ClientError, PercentageOption, TargetingRule, User};
use chrono::{DateTime, Utc};
use std::sync::Arc;
#[derive(Default)]
pub struct EvaluationDetails<T> {
pub value: T,
pub key: String,
pub is_default_value: bool,
pub variation_id: Option<String>,
pub user: Option<User>,
pub error: Option<ClientError>,
pub fetch_time: Option<DateTime<Utc>>,
pub matched_targeting_rule: Option<Arc<TargetingRule>>,
pub matched_percentage_option: Option<Arc<PercentageOption>>,
}
impl<T: Default> EvaluationDetails<T> {
pub(crate) fn from_err(val: T, key: &str, user: Option<User>, err: ClientError) -> Self {
Self {
value: val,
key: key.to_owned(),
is_default_value: true,
user,
error: Some(err),
..EvaluationDetails::default()
}
}
}
impl<T: Default> From<EvalResult> for EvaluationDetails<T> {
fn from(value: EvalResult) -> Self {
EvaluationDetails {
variation_id: value.variation_id,
matched_targeting_rule: value.rule,
matched_percentage_option: value.option,
..EvaluationDetails::default()
}
}
}