Skip to main content

CodecOptions

Struct CodecOptions 

Source
pub struct CodecOptions {
    pub recursion_limit: usize,
}
Expand description

Encoding and decoding options for a Codec.

Construct with Default and adjust what you need, so that options added in future versions keep their defaults:

use capnp_json::{Codec, CodecOptions};

let codec = Codec::new_with_options(CodecOptions {
  recursion_limit: 32,
  ..Default::default()
});

Fields§

§recursion_limit: usize

How deeply decoding will recurse before giving up. Defaults to 64, matching the C++ codec’s maxNestingDepth.

Decoding is recursive, so without a bound, deeply nested input exhausts the stack and aborts the process — which is not a catchable error in Rust. The limit turns that into an ordinary Err.

It bounds two things: the nesting depth of the JSON itself, and the depth of the walk over the schema. The second is not implied by the first, because a struct that flattens a field of its own type recurses on the schema without descending into the JSON at all.

A limit of N admits N nested arrays or objects. Scalars do not count against it, so the boundary is the same one the C++ codec applies at the same numeric setting.

Raising this reintroduces the crash it exists to prevent. The safe ceiling depends on your build profile and the stack size of the thread doing the decoding; measured on a 1 MiB stack, decoding survived depth 1600 in release but overflowed at depth 200 in debug. The default is comfortably safe in both. Lowering it is always safe.

Trait Implementations§

Source§

impl Clone for CodecOptions

Source§

fn clone(&self) -> CodecOptions

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Debug for CodecOptions

Source§

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

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

impl Default for CodecOptions

Source§

fn default() -> Self

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

impl Eq for CodecOptions

Source§

impl PartialEq for CodecOptions

Source§

fn eq(&self, other: &CodecOptions) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for CodecOptions

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, 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.