use crate::{SeqBuilder, SeqData, SeqId};
use identity::{Identity, ID_LEN};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum Recipient {
User(Identity),
Flood,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Target {
Flood,
Single(u16),
}
impl Default for Target {
fn default() -> Self {
Self::Single(0)
}
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct Frame {
pub sender: Identity,
pub recipient: Recipient,
pub seq: SeqData,
pub payload: Vec<u8>,
}
impl Frame {
pub fn dummy() -> Self {
SeqBuilder::new(
Identity::from([0; ID_LEN]),
Recipient::Flood,
Identity::random(),
)
.add(vec![0xDE, 0xAD, 0xBE, 0xEF])
.build()
.remove(0)
}
pub fn inline_flood(sender: Identity, payload: Vec<u8>) -> Frame {
SeqBuilder::new(sender, Recipient::Flood, Identity::random())
.add(payload)
.build()
.remove(0)
}
pub fn seqid(&self) -> SeqId {
self.seq.seqid
}
}