use std::fmt::Debug;
use bytes::Bytes;
use crate::net::NetworkTarget;
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct RoutingMessage {
pub command: Command,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub enum Command {
Connect((u64, NetworkTarget)),
ConnectOk(u64),
ConnectErr(u64),
Add(u64),
Remove(u64),
Forward(Data),
ShutRead,
ShutWrite,
}
#[derive(Clone, Eq, PartialEq)]
pub struct Data {
pub chunk: Bytes,
}
impl From<Bytes> for Data {
fn from(data: Bytes) -> Self {
Data { chunk: data }
}
}
impl Debug for Data {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
write!(f, "Data(len: {})", self.chunk.len())
}
}
impl From<Bytes> for Command {
fn from(value: Bytes) -> Self {
Command::Forward(Data::from(value))
}
}
impl From<Command> for RoutingMessage {
fn from(command: Command) -> Self {
RoutingMessage::new(command)
}
}
impl From<Bytes> for RoutingMessage {
fn from(value: Bytes) -> Self {
RoutingMessage::from(Command::from(value))
}
}
impl RoutingMessage {
pub fn new(command: Command) -> Self {
Self { command }
}
}