From 286ace55b4a24fac4d5faffc62c0b4f457ee33d2 Mon Sep 17 00:00:00 2001 From: Joscha Date: Fri, 11 Feb 2022 19:43:39 +0100 Subject: [PATCH] Represent messages --- cove-core/src/id.rs | 2 +- cove-core/src/lib.rs | 2 ++ cove-core/src/message.rs | 30 ++++++++++++++++++++++++++++++ 3 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 cove-core/src/message.rs diff --git a/cove-core/src/id.rs b/cove-core/src/id.rs index d2a514f..76b63e6 100644 --- a/cove-core/src/id.rs +++ b/cove-core/src/id.rs @@ -6,7 +6,7 @@ use sha2::{Digest, Sha256}; // TODO Use base64 representation instead -#[derive(Debug, Deserialize, Serialize)] +#[derive(Debug, Clone, Copy, Deserialize, Serialize)] pub struct Id(#[serde(with = "hex")] [u8; 32]); impl Id { diff --git a/cove-core/src/lib.rs b/cove-core/src/lib.rs index c4b9f47..dac9ef7 100644 --- a/cove-core/src/lib.rs +++ b/cove-core/src/lib.rs @@ -1,10 +1,12 @@ mod id; mod macros; +mod message; use serde::{Deserialize, Serialize}; pub use self::id::*; use self::macros::packets; +pub use self::message::*; #[derive(Debug, Deserialize, Serialize)] pub struct HelloCmd { diff --git a/cove-core/src/message.rs b/cove-core/src/message.rs new file mode 100644 index 0000000..f683b01 --- /dev/null +++ b/cove-core/src/message.rs @@ -0,0 +1,30 @@ +use serde::{Deserialize, Serialize}; + +use crate::Id; + +#[derive(Debug, Deserialize, Serialize)] +pub struct Message { + pub pred: Option, + pub parent: Option, + pub identity: Id, + pub nick: String, + pub content: String, +} + +impl Message { + pub fn id(&self) -> Id { + let pred = match self.pred { + Some(id) => format!("{id}"), + None => "none".to_string(), + }; + let parent = match self.parent { + Some(id) => format!("{id}"), + None => "none".to_string(), + }; + let identity = self.identity; + let nick = Id::of(&self.nick); + let content = Id::of(&self.content); + let str = format!("message {pred} {parent} {identity} {nick} {content}"); + Id::of(&str) + } +}