Mercurial > core / rust/lib/net/src/coding.rs
changeset 698: |
96958d3eb5b0 |
parent: |
c7165d93a9eb
|
author: |
Richard Westhaver <ellis@rwest.io> |
date: |
Fri, 04 Oct 2024 22:04:59 -0400 |
permissions: |
-rw-r--r-- |
description: |
fixes |
1 use crate::{Error::UnexpectedEnd, Result}; 2 use bytes::{Buf, BufMut}; 3 use std::net::{Ipv4Addr, Ipv6Addr}; 5 pub trait Codec: Sized { 6 fn decode<B: Buf>(buf: &mut B) -> Result<Self>; 7 fn encode<B: BufMut>(&self, buf: &mut B); 11 fn decode<B: Buf>(buf: &mut B) -> Result<u8> { 12 if buf.remaining() < 1 { 13 return Err(UnexpectedEnd); 17 fn encode<B: BufMut>(&self, buf: &mut B) { 23 fn decode<B: Buf>(buf: &mut B) -> Result<u16> { 24 if buf.remaining() < 2 { 25 return Err(UnexpectedEnd); 29 fn encode<B: BufMut>(&self, buf: &mut B) { 35 fn decode<B: Buf>(buf: &mut B) -> Result<u32> { 36 if buf.remaining() < 4 { 37 return Err(UnexpectedEnd); 41 fn encode<B: BufMut>(&self, buf: &mut B) { 47 fn decode<B: Buf>(buf: &mut B) -> Result<u64> { 48 if buf.remaining() < 8 { 49 return Err(UnexpectedEnd); 53 fn encode<B: BufMut>(&self, buf: &mut B) { 58 impl Codec for Ipv4Addr { 59 fn decode<B: Buf>(buf: &mut B) -> Result<Ipv4Addr> { 60 if buf.remaining() < 4 { 61 return Err(UnexpectedEnd); 63 let mut octets = [0; 4]; 64 buf.copy_to_slice(&mut octets); 67 fn encode<B: BufMut>(&self, buf: &mut B) { 68 buf.put_slice(&self.octets()); 72 impl Codec for Ipv6Addr { 73 fn decode<B: Buf>(buf: &mut B) -> Result<Ipv6Addr> { 74 if buf.remaining() < 16 { 75 return Err(UnexpectedEnd); 77 let mut octets = [0; 16]; 78 buf.copy_to_slice(&mut octets); 81 fn encode<B: BufMut>(&self, buf: &mut B) { 82 buf.put_slice(&self.octets()); 87 fn get<T: Codec>(&mut self) -> Result<T>; 90 impl<T: Buf> BufExt for T { 91 fn get<U: Codec>(&mut self) -> Result<U> { 97 fn write<T: Codec>(&mut self, x: T); 100 impl<T: BufMut> BufMutExt for T { 101 fn write<U: Codec>(&mut self, x: U) {