c2b7575ff4
Notable ones are that now every message has a field for the target server, and that messages have an "optional" ID in that they dont have it from client -> server and they do have it from server -> client.
73 lines
1.8 KiB
Rust
73 lines
1.8 KiB
Rust
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<bool,VerificationError> {
|
|
unimplemented!()
|
|
}
|
|
// Returns room name or state path
|
|
pub fn get_relevance(&self) -> Option<Relevance> {
|
|
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,
|
|
//}
|