use crate::{
frame::{
parse::{take_address, take_id, take_u128},
FrameGenerator, FrameParser,
},
types::{Address, Ident32, Namespace},
Result,
};
use nom::IResult;
pub struct NamespaceRegister {
pub pubkey: Address,
pub privkey: Ident32,
}
impl FrameGenerator for NamespaceRegister {
fn generate(self, buf: &mut Vec<u8>) -> Result<()> {
self.pubkey.generate(buf)?;
self.privkey.generate(buf)?;
Ok(())
}
}
impl FrameParser for NamespaceRegister {
type Output = NamespaceRegister;
fn parse(input: &[u8]) -> IResult<&[u8], Self::Output> {
let (input, pubkey) = take_address(input)?;
let (input, privkey) = take_id(input)?;
Ok((input, NamespaceRegister { pubkey, privkey }))
}
}
pub struct NamespaceDestroy {
pub pubkey: Address,
pub privkey: Ident32,
}
impl FrameGenerator for NamespaceDestroy {
fn generate(self, buf: &mut Vec<u8>) -> Result<()> {
self.pubkey.generate(buf)?;
self.privkey.generate(buf)?;
Ok(())
}
}
impl FrameParser for NamespaceDestroy {
type Output = NamespaceDestroy;
fn parse(input: &[u8]) -> IResult<&[u8], Self::Output> {
let (input, pubkey) = take_address(input)?;
let (input, privkey) = take_id(input)?;
Ok((input, NamespaceDestroy { pubkey, privkey }))
}
}
pub struct NamespaceUp {
pub client_addr: Address,
pub namespace_addr: Namespace,
}
impl FrameGenerator for NamespaceUp {
fn generate(self, buf: &mut Vec<u8>) -> Result<()> {
self.client_addr.generate(buf)?;
self.namespace_addr.generate(buf)?;
Ok(())
}
}
impl FrameParser for NamespaceUp {
type Output = NamespaceUp;
fn parse(input: &[u8]) -> IResult<&[u8], Self::Output> {
let (input, client_addr) = take_address(input)?;
let (input, namespace_addr) = take_address(input)?;
Ok((
input,
NamespaceUp {
client_addr,
namespace_addr,
},
))
}
}
pub struct NamespaceDown {
pub client_addr: Address,
pub namespace_addr: Namespace,
}
impl FrameGenerator for NamespaceDown {
fn generate(self, buf: &mut Vec<u8>) -> Result<()> {
self.client_addr.generate(buf)?;
self.namespace_addr.generate(buf)?;
Ok(())
}
}
impl FrameParser for NamespaceDown {
type Output = NamespaceDown;
fn parse(input: &[u8]) -> IResult<&[u8], Self::Output> {
let (input, client_addr) = take_address(input)?;
let (input, namespace_addr) = take_address(input)?;
Ok((
input,
NamespaceDown {
client_addr,
namespace_addr,
},
))
}
}
pub struct AnycastProbe {
pub self_addr: Address,
pub namespace_addr: Address,
pub timeout_ms: u128,
}
impl FrameGenerator for AnycastProbe {
fn generate(self, buf: &mut Vec<u8>) -> Result<()> {
self.self_addr.generate(buf)?;
self.namespace_addr.generate(buf)?;
self.timeout_ms.generate(buf)?;
Ok(())
}
}
impl FrameParser for AnycastProbe {
type Output = AnycastProbe;
fn parse(input: &[u8]) -> IResult<&[u8], Self::Output> {
let (input, self_addr) = take_address(input)?;
let (input, namespace_addr) = take_address(input)?;
let (input, timeout_ms) = take_u128(input)?;
Ok((
input,
AnycastProbe {
self_addr,
namespace_addr,
timeout_ms,
},
))
}
}