Skip to main content

DecodeLimits

Struct DecodeLimits 

Source
pub struct DecodeLimits {
    pub max_depth: usize,
    pub max_values: usize,
    pub max_payload_bytes: usize,
}
Expand description

Resource limits applied while decoding a single data entry or the metadata section.

A MaxMind DB can encode a value as a pointer, and many pointers can share one target, so a small record can describe a structure that is huge, deeply nested, or effectively infinite when expanded. These limits bound the time and memory one decode operation may consume. When a limit is exceeded, the decode fails with MaxMindDBError::ResourceLimit.

The defaults follow the recommendations in the MaxMind DB specification: a maximum nesting depth of 512, a maximum of 65_536 decoded values, and a maximum of 2 MiB of string and byte payload materialized per operation. The largest records MaxMind produces stay far below these values.

Fields§

§max_depth: usize

Maximum nesting depth. Each nested map, array, or followed pointer adds one level. This also bounds pointer cycles and unbounded pointer chains.

The decoder is recursive, so raising this value increases stack usage proportionally. The default of 512 is safe on typical thread stacks.

§max_values: usize

Maximum number of logical values decoded per operation. Every value, map key, and map value counts once; following a pointer does not add to the count.

§max_payload_bytes: usize

Maximum number of string and byte payload bytes materialized per operation. Each occurrence of a string or byte value is charged.

Trait Implementations§

Source§

impl Clone for DecodeLimits

Source§

fn clone(&self) -> Self

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 Copy for DecodeLimits

Source§

impl Debug for DecodeLimits

Source§

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

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

impl Default for DecodeLimits

Source§

fn default() -> Self

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

impl Eq for DecodeLimits

Source§

impl PartialEq for DecodeLimits

Source§

fn eq(&self, other: &Self) -> 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 DecodeLimits

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 = !

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

fn try_from(value: U) -> Result<T, !>

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.