use crate::RoomId; use crate::client::ClientMessage; use crate::state::StatePath; use crate::{User,ServerAddr}; use time::OffsetDateTime; use serde::{Deserialize, Serialize}; pub enum VerificationError { NoKey } //Monotonically increasing messageID #[derive(Serialize,Deserialize,Debug,Clone)] pub struct MessageId(u64); #[derive(Serialize,Deserialize,Clone,Debug)] pub struct TaggedMessage { // How do I return message IDs pub message: ClientMessage, #[serde(with="time::serde::timestamp")] pub client_timestamp: OffsetDateTime, #[serde(with="time::serde::timestamp")] pub server_timestamp: OffsetDateTime, #[serde(with = "serde_bytes")] pub signature: Box<[u8]>, pub user: User, pub target: ServerAddr } impl TaggedMessage { pub fn verify(&self) -> Result { unimplemented!() } // Returns room name or state path pub fn get_relevance(&self) -> Option { self.message.get_relevance() } } #[derive(PartialEq,Eq,Hash,Clone,Debug)] pub enum Relevance { Message(RoomId), State(RoomId,StatePath), Post(User) } //#[derive(Serialize,Deserialize,Clone,Debug)] //pub struct Message { // pub body: String, // pub room_id: RoomId, // pub target: ServerAddr, // pub message_id: MessageId, // #[serde(with="time::serde::timestamp")] // pub client_timestamp: OffsetDateTime, // #[serde(with="time::serde::timestamp")] // pub server_timestamp: OffsetDateTime, // #[serde(with = "serde_bytes")] // pub signature: Box<[u8]>, // pub user: User, // //} //#[derive(Serialize,Deserialize,Debug,Clone)] //pub struct Message { // body: String, // signature: Box<[u8]>, // sender: User, // // Used for signature check // client_timestamp: OffsetDateTime, // // Used for ordering messages // server_timestamp: OffsetDateTime, //}