use crate::csharp_feat::{CSharpObject, CSharpValue, from_csharp_object, to_csharp_object};
use crate::*;
impl<B: BlockDef + CSharpObject, P: PayloadDef<Inner>, Inner: PayloadInnerDef + CSharpObject>
PacketDef<B, P, Inner>
{
pub fn decode_csharp(
bytes: &[u8],
ctx: &mut <Inner as ProtocolSchema>::Context<'_>,
) -> Result<CSharpValue, Error> {
let mut cursor = std::io::Cursor::new(bytes);
let packet = <Self as ReadPacketFrom>::read(&mut cursor, ctx)?;
Ok(to_csharp_object(&packet.blocks, packet.payload.as_ref())?)
}
pub fn encode_csharp(
value: CSharpValue,
out: &mut Vec<u8>,
ctx: &mut <Inner as ProtocolSchema>::Context<'_>,
) -> Result<(), Error> {
let (blocks, payload) = from_csharp_object::<B, Inner>(value)?;
let mut packet = Self::new(blocks, payload);
packet.write_all(out, ctx)?;
Ok(())
}
}