use serde::Deserialize;
use serde_json::Value;
#[derive(Debug, Clone, Deserialize)]
pub struct Decision {
pub request_id: String,
pub session_id: Option<String>,
pub request_created_at: String,
pub provider: Option<String>,
pub model: Option<String>,
pub status: String,
pub latency_ms: Option<i64>,
pub cost_micro_usd: Option<i64>,
pub cache_enabled: Option<bool>,
pub threat: Option<String>,
pub decision_trace: Option<Value>,
pub confidence: Option<f64>,
pub confidence_reason: Option<String>,
pub explanation: Option<String>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct DecisionListPage {
pub items: Vec<Decision>,
pub next_cursor: Option<String>,
pub has_more: bool,
}
#[derive(Debug, Clone, Default)]
pub struct DecisionListParams {
pub session_id: Option<String>,
pub from: Option<String>,
pub to: Option<String>,
pub limit: Option<u32>,
pub cursor: Option<String>,
}
impl DecisionListParams {
pub(crate) fn query(&self) -> Vec<(String, String)> {
let mut q = Vec::new();
if let Some(v) = &self.session_id {
q.push(("session_id".to_owned(), v.clone()));
}
if let Some(v) = &self.from {
q.push(("from".to_owned(), v.clone()));
}
if let Some(v) = &self.to {
q.push(("to".to_owned(), v.clone()));
}
if let Some(v) = self.limit {
q.push(("limit".to_owned(), v.to_string()));
}
if let Some(v) = &self.cursor {
q.push(("cursor".to_owned(), v.clone()));
}
q
}
}