1use serde::Deserialize;
2
3use crate::{channel::Channel, message::Message, server::Server, user::User};
4
5#[derive(Deserialize, Debug, Clone)]
8#[serde(tag = "_type")]
9pub enum SnapshotContent {
10 Message {
11 #[serde(rename = "_prior_context", default)]
13 prior_context: Vec<Message>,
14
15 #[serde(rename = "_leading_context", default)]
17 leading_context: Vec<Message>,
18
19 #[serde(flatten)]
21 message: Box<Message>,
22 },
23 Server(Server),
24 User(User),
25}
26
27#[derive(Deserialize, Debug, Clone)]
29pub struct Snapshot {
30 #[serde(rename = "_id")]
32 pub id: String,
33 pub report_id: String,
35 pub content: SnapshotContent,
37}
38
39#[derive(Deserialize, Debug, Clone)]
41pub struct SnapshotWithContext {
42 #[serde(flatten)]
44 pub snapshot: Snapshot,
45 #[serde(rename = "_users")]
47 pub users: Vec<User>,
48 #[serde(rename = "_channels")]
50 pub channels: Vec<Channel>,
51 #[serde(rename = "_server")]
53 pub server: Option<Server>,
54}