Struct Codec

Source
pub struct Codec<T>(pub T);
Expand description

Codec extractor / response.

The serialized data is not specified. Upon deserialization, the request’s Content-Type header is used to determine the format of the data.

By default, only JSON is supported. To enable other formats, use the corresponding feature flags.

Note that IntoResponse is not implemented for this type, as the headers are not available when serializing the data. Instead, use Codec::to_response to create a response with the appropriate Content-Type header extracted from the request with Accept.

§Examples

#[axum_codec::apply(decode)]
struct Greeting {
  hello: String,
}

let bytes = b"{\"hello\": \"world\"}";
let content_type = ContentType::Json;

let Codec(data) = Codec::<Greeting>::from_bytes(bytes, content_type).unwrap();

assert_eq!(data.hello, "world");

Tuple Fields§

§0: T

Implementations§

Source§

impl<'b, T> Codec<T>
where T: Deserialize<'b>,

Source

pub fn from_json(bytes: &'b [u8]) -> Result<Self, Error>

Attempts to deserialize the given bytes as JSON.

§Errors

See serde_json::from_slice.

Source

pub fn from_form(bytes: &'b [u8]) -> Result<Self, Error>

Attempts to deserialize the given bytes as URL-encoded form data.

§Errors

See serde_urlencoded::from_bytes.

Source

pub fn from_msgpack(bytes: &'b [u8]) -> Result<Self, Error>

Attempts to deserialize the given bytes as MessagePack. Does not perform any validation if the validator feature is enabled. For validation, use Self::from_bytes.

§Errors

See rmp_serde::from_slice.

Source

pub fn from_yaml(text: &'b str) -> Result<Self, Error>

Attempts to deserialize the given text as YAML. Does not perform any validation if the validator feature is enabled. For validation, use Self::from_bytes.

§Errors

See serde_yaml::from_slice.

Source

pub fn from_toml(text: &'b str) -> Result<Self, Error>

Attempts to deserialize the given text as TOML. Does not perform any validation if the validator feature is enabled. For validation, use Self::from_bytes.

§Errors

See toml::from_str.

Source§

impl<'b, T> Codec<T>

Source

pub fn from_bincode(bytes: &'b [u8]) -> Result<Self, DecodeError>
where T: BorrowDecode<'b>,

Attempts to deserialize the given bytes as Bincode. Does not perform any validation if the validator feature is enabled. For validation, use Self::from_bytes.

§Errors

See bincode::decode_from_slice.

Source

pub fn from_bitcode(bytes: &'b [u8]) -> Result<Self, Error>
where T: Decode<'b>,

Attempts to deserialize the given bytes as Bitcode. Does not perform any validation if the validator feature is enabled. For validation, use Self::from_bytes.

§Errors

See bitcode::decode.

Source

pub fn from_bytes( bytes: &'b [u8], content_type: ContentType, ) -> Result<Self, CodecRejection>
where T: CodecDecode<'b>,

Attempts to deserialize the given bytes as the specified ContentType.

§Errors

See CodecRejection.

Source§

impl<T> Codec<T>
where T: Serialize,

Source

pub fn to_json(&self) -> Result<Vec<u8>, Error>

Attempts to serialize the given value as JSON.

§Errors

See serde_json::to_vec.

Source

pub fn to_form(&self) -> Result<Vec<u8>, Error>

Attempts to serialize the given value as URL-encoded form data.

§Errors

See serde_urlencoded::to_string.

Source

pub fn to_msgpack(&self) -> Result<Vec<u8>, Error>

Attempts to serialize the given value as MessagePack.

§Errors

See rmp_serde::to_vec_named.

Source

pub fn to_yaml(&self) -> Result<String, Error>

Attempts to serialize the given value as YAML.

§Errors

See [serde_yaml::to_vec].

Source

pub fn to_toml(&self) -> Result<String, Error>

Attempts to serialize the given value as TOML.

§Errors

See toml::to_string.

Source§

impl<T> Codec<T>

Source

pub fn to_bincode(&self) -> Result<Vec<u8>, EncodeError>
where T: Encode,

Attempts to serialize the given value as Bincode

§Errors

See [bincode::serialize].

Source

pub fn to_bitcode(&self) -> Vec<u8>
where T: Encode,

Attempts to serialize the given value as Bitcode

§Errors

See bitcode::encode.

Source

pub fn to_bytes(&self, content_type: ContentType) -> Result<Vec<u8>, Error>
where T: CodecEncode,

Attempts to serialize the given value as the specified ContentType.

§Errors

See [Error].

Source§

impl<T> Codec<T>

Source

pub fn into_inner(self) -> T

Consumes the Codec and returns the inner value.

Source§

impl<T> Codec<T>
where T: CodecEncode,

Source

pub fn to_response<C: Into<ContentType>>(&self, content_type: C) -> Response

Converts the inner value into a response with the given content type.

If serialization fails, the rejection is converted into a response. See encode::Error for possible errors.

Trait Implementations§

Source§

impl<T: Clone> Clone for Codec<T>

Source§

fn clone(&self) -> Codec<T>

Returns a copy 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<T: Debug> Debug for Codec<T>

Source§

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

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

impl<T: Default> Default for Codec<T>

Source§

fn default() -> Codec<T>

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

impl<T> Deref for Codec<T>

Source§

type Target = T

The resulting type after dereferencing.
Source§

fn deref(&self) -> &Self::Target

Dereferences the value.
Source§

impl<T> DerefMut for Codec<T>

Source§

fn deref_mut(&mut self) -> &mut Self::Target

Mutably dereferences the value.
Source§

impl<T: Display> Display for Codec<T>

Source§

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

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

impl<T, S> FromRequest<S> for Codec<T>
where T: for<'de> CodecDecode<'de>, S: Send + Sync + 'static,

Source§

type Rejection = Response<Body>

If the extractor fails it’ll use this “rejection” type. A rejection is a kind of error that can be converted into a response.
Source§

async fn from_request(req: Request, state: &S) -> Result<Self, Self::Rejection>

Perform the extraction.
Source§

impl<T: Hash> Hash for Codec<T>

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl<D> IntoCodecResponse for Codec<D>
where D: CodecEncode, Self: OperationOutput,

Source§

impl<T> OperationInput for Codec<T>
where T: JsonSchema,

Source§

fn operation_input(ctx: &mut GenContext, operation: &mut Operation)

Modify the operation. Read more
Source§

fn inferred_early_responses( ctx: &mut GenContext, operation: &mut Operation, ) -> Vec<(Option<u16>, Response)>

Inferred early responses are used to document early returns for extractors, guards inside handlers. For example these could represent JSON parsing errors, authentication failures. Read more
Source§

impl<T> OperationOutput for Codec<T>
where T: JsonSchema,

Source§

type Inner = T

The type that is used in examples. Read more
Source§

fn operation_response( ctx: &mut GenContext, operation: &mut Operation, ) -> Option<Response>

Return a response documentation for this type, alternatively modify the operation if required. Read more
Source§

fn inferred_responses( ctx: &mut GenContext, operation: &mut Operation, ) -> Vec<(Option<u16>, Response)>

Inferred responses are used when the type is used as a request handler return type. Read more
Source§

impl<T: Ord> Ord for Codec<T>

Source§

fn cmp(&self, other: &Codec<T>) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · Source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · Source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · Source§

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized,

Restrict a value to a certain interval. Read more
Source§

impl<T: PartialEq> PartialEq for Codec<T>

Source§

fn eq(&self, other: &Codec<T>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

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

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<T: PartialOrd> PartialOrd for Codec<T>

Source§

fn partial_cmp(&self, other: &Codec<T>) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · Source§

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

Tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · Source§

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

Tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · Source§

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

Tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · Source§

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

Tests greater than or equal to (for self and other) and is used by the >= operator. Read more
Source§

impl<T> Validate for Codec<T>
where T: Validate,

Source§

impl<T: Eq> Eq for Codec<T>

Source§

impl<T> StructuralPartialEq for Codec<T>

Auto Trait Implementations§

§

impl<T> Freeze for Codec<T>
where T: Freeze,

§

impl<T> RefUnwindSafe for Codec<T>
where T: RefUnwindSafe,

§

impl<T> Send for Codec<T>
where T: Send,

§

impl<T> Sync for Codec<T>
where T: Sync,

§

impl<T> Unpin for Codec<T>
where T: Unpin,

§

impl<T> UnwindSafe for Codec<T>
where T: UnwindSafe,

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<Q, K> Comparable<K> for Q
where Q: Ord + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn compare(&self, key: &K) -> Ordering

Compare self to key and return their ordering.
Source§

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

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

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

Source§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
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> IntoApi for T

Source§

fn into_api<A>(self) -> UseApi<T, A>

into UseApi
Source§

impl<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
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> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. 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> ValidateIp for T
where T: ToString,

Source§

fn validate_ipv4(&self) -> bool

Validates whether the given string is an IP V4
Source§

fn validate_ipv6(&self) -> bool

Validates whether the given string is an IP V6
Source§

fn validate_ip(&self) -> bool

Validates whether the given string is an IP
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> ErasedDestructor for T
where T: 'static,

Source§

impl<T> Input for T
where T: OperationInput,

Source§

impl<T> MaybeSendSync for T