use iroh::EndpointId;
use serde::{Deserialize, Serialize};
use super::{Authority, NetId};
use crate::net::{Kind, Payload};
pub type Component = (u64, Vec<u8>);
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Spawn {
pub id: NetId,
pub owner: EndpointId,
pub authority: Authority,
pub lamport: u64,
pub components: Vec<Component>,
}
impl Payload for Spawn {
const KIND: Kind = Kind::named("bevy_iroh/replicate/spawn/1");
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Update {
pub entities: Vec<EntityUpdate>,
}
impl Payload for Update {
const KIND: Kind = Kind::named("bevy_iroh/replicate/update/1");
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EntityUpdate {
pub id: NetId,
pub lamport: u64,
pub components: Vec<Component>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Remove {
pub id: NetId,
pub lamport: u64,
pub key: u64,
}
impl Payload for Remove {
const KIND: Kind = Kind::named("bevy_iroh/replicate/remove/1");
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Despawn {
pub id: NetId,
pub lamport: u64,
}
impl Payload for Despawn {
const KIND: Kind = Kind::named("bevy_iroh/replicate/despawn/1");
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Manifest {
pub entries: Vec<(NetId, u64)>,
}
impl Payload for Manifest {
const KIND: Kind = Kind::named("bevy_iroh/replicate/manifest/1");
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SnapshotRequest {
pub ids: Vec<NetId>,
}
impl Payload for SnapshotRequest {
const KIND: Kind = Kind::named("bevy_iroh/replicate/snapshot-request/1");
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Snapshot {
pub spawns: Vec<Spawn>,
}
impl Payload for Snapshot {
const KIND: Kind = Kind::named("bevy_iroh/replicate/snapshot/1");
}