pub struct Packer { /* private fields */ }Expand description
Packer packs and unpacks the underlying bytes array. ref. https://pkg.go.dev/github.com/ava-labs/avalanchego/utils/wrappers#Packer ref. https://doc.rust-lang.org/1.7.0/book/mutability.html ref. https://doc.rust-lang.org/std/cell/struct.Cell.html
Implementations§
Source§impl Packer
impl Packer
Sourcepub fn pack_vertex(&self, vtx: &mut Vertex) -> Result<()>
pub fn pack_vertex(&self, vtx: &mut Vertex) -> Result<()>
Encodes vertex fields with codec version and packer.
ref. https://pkg.go.dev/github.com/ava-labs/avalanchego/snow/engine/avalanche/vertex#Build
Sourcepub fn unpack_vertex(&self) -> Result<Vertex>
pub fn unpack_vertex(&self) -> Result<Vertex>
Unpacks the vertex.
ref. https://pkg.go.dev/github.com/ava-labs/avalanchego/snow/engine/avalanche/vertex#Build
Source§impl Packer
impl Packer
Sourcepub fn pack_ip(&self, ip_addr: IpAddr, port: u16) -> Result<()>
pub fn pack_ip(&self, ip_addr: IpAddr, port: u16) -> Result<()>
Writes the “IP” value at the offset in 16-byte representation and increments the offset afterwards. ref. “avalanchego/utils/wrappers.Packer.PackIP” ref. https://pkg.go.dev/github.com/ava-labs/avalanchego/utils/wrappers#Packer.PackIP ref. https://doc.rust-lang.org/std/net/enum.IpAddr.html ref. https://doc.rust-lang.org/std/net/struct.Ipv4Addr.html ref. https://doc.rust-lang.org/std/net/struct.Ipv6Addr.html
Sourcepub fn unpack_ip(&self) -> Result<(IpAddr, u16)>
pub fn unpack_ip(&self) -> Result<(IpAddr, u16)>
Unpacks the “IP” in the “offset” position, and advances the cursor and offset. ref. “avalanchego/utils/wrappers.Packer.UnpackIP” ref. https://pkg.go.dev/github.com/ava-labs/avalanchego/utils/wrappers#Packer.UnpackIP
Sourcepub fn pack_ips(&self, ips: &[(IpAddr, u16)]) -> Result<()>
pub fn pack_ips(&self, ips: &[(IpAddr, u16)]) -> Result<()>
Writes the list of “IP” values at the offset in 16-byte representation and increments the offset afterwards. ref. “avalanchego/utils/wrappers.Packer.PackIPs” ref. https://pkg.go.dev/github.com/ava-labs/avalanchego/utils/wrappers#Packer.PackIPs
Sourcepub fn unpack_ips(&self) -> Result<Vec<(IpAddr, u16)>>
pub fn unpack_ips(&self) -> Result<Vec<(IpAddr, u16)>>
Unpacks the list of “IP“s in the “offset” position, and advances the cursor and offset. ref. “avalanchego/utils/wrappers.Packer.UnpackIPs” ref. https://pkg.go.dev/github.com/ava-labs/avalanchego/utils/wrappers#Packer.UnpackIPs
Source§impl Packer
impl Packer
pub fn new(max_size: usize, initial_cap: usize) -> Self
Sourcepub fn new_with_header(max_size: usize, initial_cap: usize) -> Self
pub fn new_with_header(max_size: usize, initial_cap: usize) -> Self
Creates a new Packer with 32-bit message length header.
Sourcepub fn load_bytes_for_pack(max_size: usize, b: &[u8]) -> Self
pub fn load_bytes_for_pack(max_size: usize, b: &[u8]) -> Self
Create a new packer from the existing bytes. Resets the offset to the end of the existing bytes.
Sourcepub fn load_bytes_for_unpack(max_size: usize, b: &[u8]) -> Self
pub fn load_bytes_for_unpack(max_size: usize, b: &[u8]) -> Self
Create a new packer from the existing bytes. Resets the offset to the beginning of the existing bytes.
Sourcepub fn take_bytes(&self) -> Bytes
pub fn take_bytes(&self) -> Bytes
Returns the current bytes array as an immutable bytes array. If the packer header is set to “true”, the first 4-byte represents the message length in the big-endian order. The returned bytes length will be 4-byte + message.
Be cautious! Once bytes are taken out, the “bytes” field is set to default (empty). To continue to write to bytes, remember to put it back with “set_bytes” because “bytes.take” leaves the field as “Default::default()”. TODO: make sure this does shallow copy!
Sourcepub fn set_bytes(&self, b: &[u8])
pub fn set_bytes(&self, b: &[u8])
Sets the current bytes array as an immutable bytes array. Useful to reuse packer after calling “take_bytes”, which makes the “bytes” field default (empty).
Sourcepub fn get_offset(&self) -> usize
pub fn get_offset(&self) -> usize
Returns the “offset” value.
Sourcepub fn expand(&self, n: usize) -> Result<()>
pub fn expand(&self, n: usize) -> Result<()>
Ensures the remaining capacity of the bytes array so it can write “n” bytes to the array. ref. “avalanchego/utils/wrappers.Packer.Expand” ref. https://pkg.go.dev/github.com/ava-labs/avalanchego/utils/wrappers#Packer.Expand
Sourcepub fn pack_byte(&self, v: u8) -> Result<()>
pub fn pack_byte(&self, v: u8) -> Result<()>
Writes the “u8” value at the offset and increments the offset afterwards. ref. “avalanchego/utils/wrappers.Packer.PackByte” ref. https://pkg.go.dev/github.com/ava-labs/avalanchego/utils/wrappers#Packer.PackByte
Sourcepub fn unpack_byte(&self) -> Result<u8>
pub fn unpack_byte(&self) -> Result<u8>
Unpacks the byte in the “offset” position, and advances the cursor and offset. ref. “avalanchego/utils/wrappers.Packer.UnpackByte” ref. https://pkg.go.dev/github.com/ava-labs/avalanchego/utils/wrappers#Packer.UnpackByte
Sourcepub fn pack_u16(&self, v: u16) -> Result<()>
pub fn pack_u16(&self, v: u16) -> Result<()>
Writes the “u16” value at the offset and increments the offset afterwards. ref. “avalanchego/utils/wrappers.Packer.PackShort” ref. https://pkg.go.dev/github.com/ava-labs/avalanchego/utils/wrappers#Packer.PackShort
Sourcepub fn unpack_u16(&self) -> Result<u16>
pub fn unpack_u16(&self) -> Result<u16>
Unpacks the u16 from the “offset” position, and advances the cursor and offset. ref. “avalanchego/utils/wrappers.Packer.UnpackShort” ref. https://pkg.go.dev/github.com/ava-labs/avalanchego/utils/wrappers#Packer.UnpackShort
Sourcepub fn pack_u32(&self, v: u32) -> Result<()>
pub fn pack_u32(&self, v: u32) -> Result<()>
Writes the “u32” value at the offset and increments the offset afterwards. This is also used for encoding the type IDs from codec. ref. “avalanchego/utils/wrappers.Packer.PackInt” ref. https://pkg.go.dev/github.com/ava-labs/avalanchego/utils/wrappers#Packer.PackInt
Sourcepub fn unpack_u32(&self) -> Result<u32>
pub fn unpack_u32(&self) -> Result<u32>
Unpacks the u32 from the “offset” position, and advances the cursor and offset. ref. “avalanchego/utils/wrappers.Packer.UnpackInt” ref. https://pkg.go.dev/github.com/ava-labs/avalanchego/utils/wrappers#Packer.UnpackInt
Sourcepub fn pack_u64(&self, v: u64) -> Result<()>
pub fn pack_u64(&self, v: u64) -> Result<()>
Writes the “u64” value at the offset and increments the offset afterwards. ref. “avalanchego/utils/wrappers.Packer.PackLong” ref. https://pkg.go.dev/github.com/ava-labs/avalanchego/utils/wrappers#Packer.PackLong
Sourcepub fn unpack_u64(&self) -> Result<u64>
pub fn unpack_u64(&self) -> Result<u64>
Unpacks the u64 from the “offset” position, and advances the cursor and offset. ref. “avalanchego/utils/wrappers.Packer.UnpackLong” ref. https://pkg.go.dev/github.com/ava-labs/avalanchego/utils/wrappers#Packer.UnpackLong
Sourcepub fn pack_bool(&self, v: bool) -> Result<()>
pub fn pack_bool(&self, v: bool) -> Result<()>
Writes the “bool” value at the offset and increments the offset afterwards. ref. “avalanchego/utils/wrappers.Packer.PackBool” ref. https://pkg.go.dev/github.com/ava-labs/avalanchego/utils/wrappers#Packer.PackBool
Sourcepub fn unpack_bool(&self) -> Result<bool>
pub fn unpack_bool(&self) -> Result<bool>
Unpacks the bool in the “offset” position, and advances the cursor and offset. ref. “avalanchego/utils/wrappers.Packer.UnpackBool” ref. https://pkg.go.dev/github.com/ava-labs/avalanchego/utils/wrappers#Packer.UnpackBool
Sourcepub fn pack_bytes(&self, v: &[u8]) -> Result<()>
pub fn pack_bytes(&self, v: &[u8]) -> Result<()>
Writes the “u8” fixed-size array from the offset and increments the offset as much. ref. “avalanchego/utils/wrappers.Packer.PackFixedBytes” ref. https://pkg.go.dev/github.com/ava-labs/avalanchego/utils/wrappers#Packer.PackFixedBytes
Sourcepub fn unpack_bytes(&self, n: usize) -> Result<Vec<u8>>
pub fn unpack_bytes(&self, n: usize) -> Result<Vec<u8>>
Unpacks the “u8” fixed-size array from the “offset” position, and advances the cursor and offset. ref. “avalanchego/utils/wrappers.Packer.UnpackFixedBytes” ref. https://pkg.go.dev/github.com/ava-labs/avalanchego/utils/wrappers#Packer.UnpackFixedBytes
Sourcepub fn pack_bytes_with_header(&self, v: &[u8]) -> Result<()>
pub fn pack_bytes_with_header(&self, v: &[u8]) -> Result<()>
Writes the “u8” slice from the offset and increments the offset as much. The first 4-byte is used for encoding length header. ref. “avalanchego/utils/wrappers.Packer.PackBytes” ref. https://pkg.go.dev/github.com/ava-labs/avalanchego/utils/wrappers#Packer.PackBytes
Sourcepub fn unpack_bytes_with_header(&self) -> Result<Vec<u8>>
pub fn unpack_bytes_with_header(&self) -> Result<Vec<u8>>
Unpacks the “u8” slice from the “offset” position, and advances the cursor and offset. ref. “avalanchego/utils/wrappers.Packer.UnpackBytes” ref. https://pkg.go.dev/github.com/ava-labs/avalanchego/utils/wrappers#Packer.UnpackBytes
Sourcepub fn pack_2d_bytes(&self, v: Vec<Vec<u8>>) -> Result<()>
pub fn pack_2d_bytes(&self, v: Vec<Vec<u8>>) -> Result<()>
Writes the two-dimensional “u8” slice from the offset and increments the offset as much. ref. “avalanchego/utils/wrappers.Packer.PackFixedByteSlices” ref. https://pkg.go.dev/github.com/ava-labs/avalanchego/utils/wrappers#Packer.PackFixedByteSlices
Sourcepub fn unpack_2d_bytes(&self, n: usize) -> Result<Vec<Vec<u8>>>
pub fn unpack_2d_bytes(&self, n: usize) -> Result<Vec<Vec<u8>>>
Unpacks the two-dimensional “u8” slice from the “offset” position, and advances the cursor and offset. ref. “avalanchego/utils/wrappers.Packer.UnpackFixedByteSlices” ref. https://pkg.go.dev/github.com/ava-labs/avalanchego/utils/wrappers#Packer.UnpackFixedByteSlices
Sourcepub fn pack_2d_bytes_with_header(&self, v: Vec<Vec<u8>>) -> Result<()>
pub fn pack_2d_bytes_with_header(&self, v: Vec<Vec<u8>>) -> Result<()>
Writes the two-dimensional “u8” slice from the offset and increments the offset as much. ref. “avalanchego/utils/wrappers.Packer.Pack2DByteSlice” ref. https://pkg.go.dev/github.com/ava-labs/avalanchego/utils/wrappers#Packer.Pack2DByteSlice
Sourcepub fn unpack_2d_bytes_with_header(&self) -> Result<Vec<Vec<u8>>>
pub fn unpack_2d_bytes_with_header(&self) -> Result<Vec<Vec<u8>>>
Unpacks the two-dimensional “u8” slice from the “offset” position, and advances the cursor and offset. ref. “avalanchego/utils/wrappers.Packer.Unpack2DByteSlice” ref. https://pkg.go.dev/github.com/ava-labs/avalanchego/utils/wrappers#Packer.Unpack2DByteSlice
Sourcepub fn pack_str(&self, v: &str) -> Result<()>
pub fn pack_str(&self, v: &str) -> Result<()>
Writes str from the offset and increments the offset as much. ref. “avalanchego/utils/wrappers.Packer.PackStr” ref. https://pkg.go.dev/github.com/ava-labs/avalanchego/utils/wrappers#Packer.PackStr
Sourcepub fn unpack_str(&self) -> Result<String>
pub fn unpack_str(&self) -> Result<String>
Unpacks str from the offset. ref. “avalanchego/utils/wrappers.Packer.UnpackStr”
TODO: Go “UnpackStr” does deep-copy of bytes to “string” cast Can we bypass deep-copy by passing around bytes? ref. https://github.com/golang/go/issues/25484
ref. https://pkg.go.dev/github.com/ava-labs/avalanchego/utils/wrappers#Packer.UnpackStr
Auto Trait Implementations§
impl !Freeze for Packer
impl !RefUnwindSafe for Packer
impl !Sync for Packer
impl Send for Packer
impl Unpin for Packer
impl UnsafeUnpin for Packer
impl UnwindSafe for Packer
Blanket Implementations§
Source§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
Source§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Requestimpl<T> JsonSchemaMaybe for T
Source§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.