Files
fedichat-lib/src/message.rs
T
uelen c2b7575ff4 Lots of changes
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.
2026-05-24 22:56:15 -07:00

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,
//}