use libp2p::{PeerId, gossipsub::IdentTopic};
use serde::{Deserialize, Serialize};
use std::fmt::Display;
pub const MAX_MESSAGE_SIZE: usize = 16 * 1024 * 1024;
#[derive(Debug, Clone)]
pub enum MessageDelivery {
Broadcast {
topic: IdentTopic,
},
Direct {
peer_id: PeerId,
},
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MessageRouting {
pub message_id: u64,
pub round_id: u16,
pub sender: PeerId,
pub recipient: Option<PeerId>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ProtocolMessage {
pub protocol: String,
pub routing: MessageRouting,
pub payload: Vec<u8>,
}
impl Display for MessageRouting {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(
f,
"msg={} round={} from={} to={:?}",
self.message_id, self.round_id, self.sender, self.recipient
)
}
}
impl Display for ProtocolMessage {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(
f,
"[{}] {} payload_size={}",
self.protocol,
self.routing,
self.payload.len()
)
}
}