rive_models/
snapshot.rs

1use serde::Deserialize;
2
3use crate::{channel::Channel, message::Message, server::Server, user::User};
4
5/// Enum to map into different models
6/// that can be saved in a snapshot
7#[derive(Deserialize, Debug, Clone)]
8#[serde(tag = "_type")]
9pub enum SnapshotContent {
10    Message {
11        /// Context before the message
12        #[serde(rename = "_prior_context", default)]
13        prior_context: Vec<Message>,
14
15        /// Context after the message
16        #[serde(rename = "_leading_context", default)]
17        leading_context: Vec<Message>,
18
19        /// Message
20        #[serde(flatten)]
21        message: Box<Message>,
22    },
23    Server(Server),
24    User(User),
25}
26
27/// Snapshot of some content
28#[derive(Deserialize, Debug, Clone)]
29pub struct Snapshot {
30    /// Unique Id
31    #[serde(rename = "_id")]
32    pub id: String,
33    /// Report parent Id
34    pub report_id: String,
35    /// Snapshot of content
36    pub content: SnapshotContent,
37}
38
39/// Snapshot of some content with required data to render
40#[derive(Deserialize, Debug, Clone)]
41pub struct SnapshotWithContext {
42    /// Snapshot itself
43    #[serde(flatten)]
44    pub snapshot: Snapshot,
45    /// Users involved in snapshot
46    #[serde(rename = "_users")]
47    pub users: Vec<User>,
48    /// Channels involved in snapshot
49    #[serde(rename = "_channels")]
50    pub channels: Vec<Channel>,
51    /// Server involved in snapshot
52    #[serde(rename = "_server")]
53    pub server: Option<Server>,
54}