use serde::{Deserialize, Serialize};
use serde_json::Value;
use std::collections::BTreeMap;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SessionEvent {
pub schema_version: u32,
pub event_id: String,
pub sequence: u64,
pub session_id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub action_id: Option<String>,
#[serde(rename = "type")]
pub event_type: String,
pub at: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub principal_id: Option<String>,
pub payload: Value,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SessionFollowUp {
pub follow_up_id: String,
pub sequence: u64,
pub session_id: String,
pub principal_id: String,
pub instruction: String,
pub created_at: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct SessionFollowUpPage {
#[serde(rename = "follow_ups")]
pub follow_ups: Vec<SessionFollowUp>,
#[serde(rename = "next_sequence")]
pub next_sequence: u64,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct RuntimeSession {
pub session_id: String,
pub principal_id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub execution_group_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub objective: Option<String>,
pub state: String,
pub revision: u64,
pub created_at: String,
pub updated_at: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub waiting_reason: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub recovered: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub completion: Option<SessionCompletionEvidence>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SessionCompletionEvidence {
pub summary: String,
pub postconditions: Vec<PostconditionEvidence>,
#[serde(skip_serializing_if = "Option::is_none")]
pub last_app_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub last_window_id: Option<Value>,
pub action_counts: BTreeMap<String, u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reason: Option<String>,
pub completed_at: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PostconditionEvidence {
pub description: String,
pub satisfied: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub evidence_hash: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SessionDeletionResult {
pub session_id: String,
pub deleted: bool,
pub deleted_events: u64,
pub deleted_receipts: u64,
pub deleted_evidence_frames: u64,
pub revoked_grants: u64,
pub retained_events: u64,
#[serde(skip_serializing_if = "Option::is_none")]
pub retention_marker_id: Option<String>,
}