use std::collections::BTreeMap;
use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use crate::ids::FeatureName;
use crate::vala::ids::{RecordId, SessionId};
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, schemars::JsonSchema)]
#[cfg_attr(feature = "server", derive(utoipa::ToSchema))]
#[serde(untagged)]
pub enum FeatureValue {
Bool(bool),
Int(i64),
Float(f64),
Cat(String),
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, schemars::JsonSchema)]
#[serde(deny_unknown_fields)]
pub struct DriftRecordObservation {
pub record_id: RecordId,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub session_id: Option<SessionId>,
pub features: BTreeMap<FeatureName, FeatureValue>,
pub created_at: DateTime<Utc>,
}