use serde::Deserialize;
use crate::{channel::Channel, message::Message, server::Server, user::User};
#[derive(Deserialize, Debug, Clone)]
#[serde(tag = "_type")]
pub enum SnapshotContent {
Message {
#[serde(rename = "_prior_context", default)]
prior_context: Vec<Message>,
#[serde(rename = "_leading_context", default)]
leading_context: Vec<Message>,
#[serde(flatten)]
message: Box<Message>,
},
Server(Server),
User(User),
}
#[derive(Deserialize, Debug, Clone)]
pub struct Snapshot {
#[serde(rename = "_id")]
pub id: String,
pub report_id: String,
pub content: SnapshotContent,
}
#[derive(Deserialize, Debug, Clone)]
pub struct SnapshotWithContext {
#[serde(flatten)]
pub snapshot: Snapshot,
#[serde(rename = "_users")]
pub users: Vec<User>,
#[serde(rename = "_channels")]
pub channels: Vec<Channel>,
#[serde(rename = "_server")]
pub server: Option<Server>,
}