Skip to main content

FormUrlencodedCodec

Struct FormUrlencodedCodec 

Source
pub struct FormUrlencodedCodec;
Expand description

Encodes and decodes application/x-www-form-urlencoded text fragments.

Its low-level Codec<Value = u8, Unit = u8> implementation converts one byte at a time, including the form-specific space and + mapping. UTF-8 validation remains part of the owned decode helper. Streaming skip/replace hooks may consume the malformed span visible in the current input chunk, so recovery output for malformed input can depend on chunk boundaries. This does not affect valid input or strict decoding.

§Examples

use qubit_codec_misc::FormUrlencodedCodec;

let codec = FormUrlencodedCodec::new();
let encoded = codec.encode("hello world");
assert_eq!(encoded, "hello+world");
assert_eq!(codec.decode(&encoded).unwrap(), "hello world");

Implementations§

Source§

impl FormUrlencodedCodec

Source

pub fn new() -> Self

Creates a form-url-encoded codec.

§Returns

Form URL encoded codec.

Source

pub fn encode(&self, text: &str) -> String

Encodes text, using + for spaces.

§Parameters
  • text: Text to encode.
§Returns

Form-url-encoded text.

Source

pub fn decode(&self, text: &str) -> MiscCodecResult<String>

Decodes text, treating + as space.

§Parameters
  • text: Text to decode.
§Returns

Decoded UTF-8 text.

§Errors

Returns MiscCodecError when an escape is malformed or decoded bytes are not valid UTF-8.

Trait Implementations§

Source§

impl Clone for FormUrlencodedCodec

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 Codec for FormUrlencodedCodec

Source§

type Value = u8

A decoded or encoded value is one input byte.

Source§

type Unit = u8

The encoded representation is stored in byte units.

Source§

type DecodeError = MiscCodecError

Errors raised when an encoded byte sequence cannot be decoded.

Source§

type EncodeError = MiscCodecError

Errors raised when a value cannot be encoded.

Source§

fn encode_len(&self, value: &u8) -> usize

Returns the exact form-url-encoded width for one byte.

§Parameters
  • value: Byte whose encoded width is queried.
§Returns

The number of output bytes required to encode value.

Source§

unsafe fn decode( &mut self, input: &[u8], input_index: usize, ) -> Result<(u8, NonZeroUsize), DecodeFailure<Self::DecodeError>>

Decodes one raw byte, +, or %XX escape.

§Parameters
  • input: Encoded input bytes.
  • input_index: Index of the value to decode.
§Returns

The decoded byte and the non-zero number of consumed input units.

§Errors

Returns a decode failure when the input is malformed or incomplete.

§Safety

The caller must provide an input index with at least one readable unit and a slice satisfying the codec trait’s decode preconditions.

Source§

unsafe fn encode( &mut self, value: &u8, output: &mut [u8], output_index: usize, ) -> Result<usize, Self::EncodeError>

Encodes one byte using form URL encoding.

§Parameters
  • value: Byte to encode.
  • output: Destination buffer.
  • output_index: Index at which encoding begins.
§Returns

The number of output bytes written.

§Errors

This implementation does not fail when the caller satisfies the safety preconditions.

§Safety

The caller must provide enough writable output units for Self::encode_len.

Source§

unsafe fn decode_eof( &mut self, input: &[u8], input_index: usize, ) -> Result<(u8, NonZeroUsize), DecodeFailure<Self::DecodeError>>

Decodes one value after end of input has been confirmed.

§Parameters
  • input: Encoded input bytes.
  • input_index: Index of the value to decode.
§Returns

The decoded byte and the non-zero number of consumed input units.

§Errors

Returns a decode failure when the input is malformed or incomplete at end of input.

§Safety

The caller must provide an input index with at least one readable unit and a slice satisfying the codec trait’s EOF decode preconditions.

Source§

const MIN_UNITS_PER_VALUE: usize = 1

The minimum possible non-zero readable unit count for one decoded value. Read more
Source§

const MAX_ENCODE_UNITS_PER_VALUE: usize = 3

The maximum unit count emitted when encoding one value. Read more
Source§

const MAX_DECODE_UNITS_PER_VALUE: usize = 3

The maximum non-zero unit count consumed to decode one value. Read more
Source§

const MAX_ENCODE_RESET_UNITS: usize = 0

The maximum unit count emitted when resetting encode state. Read more
Source§

const MAX_ENCODE_FINISH_UNITS: usize = 0

The maximum unit count emitted when finishing encode state at EOF. Read more
Source§

const MAX_DECODE_RESET_VALUES: usize = 0

The maximum value count emitted when resetting decode state. Read more
Source§

const MAX_DECODE_FINISH_VALUES: usize = 0

The maximum value count emitted when finishing decode state. Read more
Source§

fn can_encode_value(&self, _value: &Self::Value) -> bool

Returns whether value is in this codec’s encodable value domain. Read more
Source§

unsafe fn encode_reset( &mut self, _output: &mut [Self::Unit], _output_index: usize, ) -> Result<usize, Self::EncodeError>

Emits stream-start output and resets encode-side state. Read more
Source§

unsafe fn encode_finish( &mut self, _output: &mut [Self::Unit], _output_index: usize, ) -> Result<usize, Self::EncodeError>

Emits EOF trailer output and finishes encode-side state. Read more
Source§

unsafe fn decode_reset( &mut self, _output: &mut [Self::Value], _output_index: usize, ) -> Result<usize, Self::DecodeError>

Emits stream-start values and resets decode-side state. Read more
Source§

unsafe fn decode_finish( &mut self, _output: &mut [Self::Value], _output_index: usize, ) -> Result<usize, Self::DecodeError>

Finishes decode-side EOF state into output. Read more
Source§

impl Copy for FormUrlencodedCodec

Source§

impl Debug for FormUrlencodedCodec

Source§

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

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

impl Default for FormUrlencodedCodec

Source§

fn default() -> Self

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

impl Eq for FormUrlencodedCodec

Source§

impl PartialEq for FormUrlencodedCodec

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 FormUrlencodedCodec

Source§

impl ValueDecoder<str> for FormUrlencodedCodec

Source§

type Error = MiscCodecError

Errors produced when the encoded value is malformed or not valid UTF-8.

Source§

type Output = String

Owned UTF-8 text produced from a successfully decoded input string.

Source§

fn decode(&mut self, input: &str) -> Result<Self::Output, Self::Error>

Decodes form-url-encoded text.

§Parameters
  • input: Form-url-encoded text to decode.
§Returns

The decoded UTF-8 text.

§Errors

Returns an error when an escape is malformed or decoded bytes are not valid UTF-8.

Source§

impl ValueEncoder<str> for FormUrlencodedCodec

Source§

type Error = MiscCodecError

Errors produced while converting an encoded value.

Form URL encoding accepts every UTF-8 string, so this implementation does not produce an error.

Source§

type Output = String

Owned form-url-encoded text produced from the input string.

Source§

fn encode(&mut self, input: &str) -> Result<Self::Output, Self::Error>

Encodes text, using + for spaces.

§Parameters
  • input: Text to encode.
§Returns

The form-url-encoded text.

§Errors

This implementation does not fail for UTF-8 text.

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.