Skip to main content

MsgPackCodec

Struct MsgPackCodec 

Source
pub struct MsgPackCodec;
Available on crate feature msgpack only.
Expand description

MessagePack binary codec

This codec produces compact binary output, suitable for high-throughput scenarios where bandwidth is limited.

Note: MessagePack is not MCP-compliant for external communication but can be used for internal message passing.

§Security Considerations

When using MessagePack for untrusted input, be aware of:

§Nesting Depth

Deeply nested structures can cause stack overflow. The underlying rmp-serde library has default recursion limits, but extremely nested payloads may still cause issues. Consider validating message structure before decoding.

§Binary Field Size

MessagePack can encode arbitrarily large binary/string fields. Applications should:

  • Enforce maximum message size limits at the transport layer
  • Use streaming decoders for large payloads when possible
  • Set appropriate memory limits in production environments

§Type Confusion

MessagePack’s dynamic typing can lead to type confusion attacks. Always:

  • Validate deserialized data matches expected schema
  • Use strongly-typed Rust structs rather than serde_json::Value
  • Check for unexpected field types after deserialization

For production systems handling untrusted input, prefer JSON (with schema validation) or use MessagePack only within trusted boundaries (internal microservices, etc.).

Implementations§

Source§

impl MsgPackCodec

Source

pub fn new() -> Self

Create a new MessagePack codec

Trait Implementations§

Source§

impl Clone for MsgPackCodec

Source§

fn clone(&self) -> MsgPackCodec

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Codec for MsgPackCodec

Source§

fn encode<T: Serialize>(&self, value: &T) -> CodecResult<Vec<u8>>

Encode a value to bytes
Source§

fn decode<T: DeserializeOwned>(&self, bytes: &[u8]) -> CodecResult<T>

Decode bytes to a value
Source§

fn content_type(&self) -> &'static str

Get the content type for this codec (e.g., “application/json”)
Source§

fn supports_streaming(&self) -> bool

Check if this codec supports streaming
Source§

fn name(&self) -> &'static str

Get codec name for debugging
Source§

impl Debug for MsgPackCodec

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for MsgPackCodec

Source§

fn default() -> MsgPackCodec

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> MaybeSend for T
where T: Send + ?Sized,

Source§

impl<T> MaybeSync for T
where T: Sync + ?Sized,