diff options
| author | Owen Jacobson <owen@grimoire.ca> | 2024-10-05 23:00:58 -0400 |
|---|---|---|
| committer | Owen Jacobson <owen@grimoire.ca> | 2024-10-05 23:00:58 -0400 |
| commit | 05de3c7b211727039b3912311aa4bab6787a7457 (patch) | |
| tree | 08a3860b68391514390f42872ccc1cb4c6e6afd2 /src/boot/mod.rs | |
| parent | bc514e0ea5f0a553f15ab8275961907877181520 (diff) | |
| parent | 6a10fcaf64938da52b326ea80013d9f30ed62a6c (diff) | |
Merge branch 'wip/boot'
Diffstat (limited to 'src/boot/mod.rs')
| -rw-r--r-- | src/boot/mod.rs | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/src/boot/mod.rs b/src/boot/mod.rs new file mode 100644 index 0000000..bd0da0a --- /dev/null +++ b/src/boot/mod.rs @@ -0,0 +1,74 @@ +pub mod app; +mod routes; + +use crate::{ + channel, + event::{Instant, Sequence}, + login::Login, + message, +}; + +pub use self::routes::router; + +#[derive(serde::Serialize)] +pub struct Snapshot { + pub resume_point: Sequence, + pub channels: Vec<Channel>, +} + +#[derive(serde::Serialize)] +pub struct Channel { + pub id: channel::Id, + pub name: String, + pub messages: Vec<Message>, +} + +impl Channel { + fn new( + channel: channel::Channel, + messages: impl IntoIterator<Item = message::Message>, + ) -> Self { + // The declarations are like this to guarantee that we aren't omitting any important fields from the corresponding types. + let channel::Channel { id, name } = channel; + + Self { + id, + name, + messages: messages.into_iter().map(Message::from).collect(), + } + } +} + +#[derive(serde::Serialize)] +pub struct Message { + #[serde(flatten)] + pub sent: Instant, + pub sender: Login, + // Named this way for serialization reasons + #[allow(clippy::struct_field_names)] + pub message: Body, +} + +impl From<message::Message> for Message { + fn from(message: message::Message) -> Self { + let message::Message { + sent, + channel: _, + sender, + id, + body, + } = message; + + Self { + sent, + sender, + message: Body { id, body }, + } + } +} + +#[derive(serde::Serialize)] +pub struct Body { + id: message::Id, + body: String, +} |
