use serde::{Deserialize, Serialize}; use crate::ratchet::RatchetHeader; use crate::types::{Fingerprint, MessageId, SessionId}; #[derive(Clone, Debug, Serialize, Deserialize)] pub enum MessageType { Text, File, KeyExchange, Receipt, } /// An encrypted message on the wire. #[derive(Clone, Serialize, Deserialize)] pub struct WarzoneMessage { pub version: u8, pub id: MessageId, pub from: Fingerprint, pub to: Fingerprint, pub timestamp: i64, pub msg_type: MessageType, pub session_id: SessionId, pub ratchet_header: RatchetHeader, pub ciphertext: Vec, pub signature: Vec, } /// Plaintext message content (inside the encrypted envelope). #[derive(Clone, Debug, Serialize, Deserialize)] pub enum MessageContent { Text { body: String }, File { filename: String, data: Vec }, Receipt { message_id: MessageId }, }