Skip to main content

LenientJsonDecoder

Struct LenientJsonDecoder 

Source
pub struct LenientJsonDecoder { /* private fields */ }
Expand description

A configurable JSON decoder for non-fully-trusted text inputs.

LenientJsonDecoder applies a small set of predictable normalization rules before delegating actual parsing and deserialization to serde_json.

The decoder itself is stateless aside from its immutable configuration, so a single instance can be reused across many decoding calls.

Implementations§

Source§

impl LenientJsonDecoder

Source

pub const fn new(options: JsonDecodeOptions) -> Self

Creates a decoder with the exact normalization rules in options.

Reusing a decoder instance is recommended when multiple inputs should follow the same lenient decoding policy.

Source

pub const fn options(&self) -> &JsonDecodeOptions

Returns the immutable options used by this decoder.

This accessor allows callers to inspect the effective configuration without cloning the decoder or duplicating the options elsewhere.

Source

pub fn decode<T>(&self, input: &str) -> Result<T, JsonDecodeError>

Decodes input into the target Rust type T.

This method does not constrain the JSON top-level structure. Arrays, objects, scalars, and any other JSON value kinds are all allowed as long as they can be deserialized into T.

The generic type T must implement DeserializeOwned, because the decoder first builds an owned Value and then deserializes from it.

§Errors

Returns JsonDecodeError when the input becomes empty after normalization, when the normalized text is not valid JSON, or when the parsed JSON value cannot be deserialized into T.

Source

pub fn decode_object<T>(&self, input: &str) -> Result<T, JsonDecodeError>

Decodes input into a target type T, requiring a top-level JSON object.

This method is useful for APIs that require a structured object at the top level and want an explicit error when an array or scalar is received.

§Errors

Returns JsonDecodeError when the input cannot be normalized into a valid JSON value, when the top-level JSON kind is not an object, or when the object cannot be deserialized into T.

Source

pub fn decode_array<T>(&self, input: &str) -> Result<Vec<T>, JsonDecodeError>

Decodes input into a Vec<T>, requiring a top-level JSON array.

This method should be preferred over Self::decode when the caller wants an explicit top-level array contract instead of relying on the target type alone.

§Errors

Returns JsonDecodeError when the input cannot be normalized into a valid JSON value, when the top-level JSON kind is not an array, or when the array cannot be deserialized into Vec<T>.

Source

pub fn decode_value(&self, input: &str) -> Result<Value, JsonDecodeError>

Decodes input into a serde_json::Value.

This is the lowest-level public entry point. It exposes the normalized and parsed JSON value before any additional type-specific deserialization is attempted.

§Errors

Returns JsonDecodeError when the input is empty after normalization or when the normalized text is not valid JSON syntax.

Trait Implementations§

Source§

impl Clone for LenientJsonDecoder

Source§

fn clone(&self) -> LenientJsonDecoder

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 Debug for LenientJsonDecoder

Source§

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

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

impl Default for LenientJsonDecoder

Source§

fn default() -> LenientJsonDecoder

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