pub struct ProblemValidatedJson<T>(pub T);Expand description
The problem-flavored sibling of ValidatedJson:
deserializes a JSON request body, validates it with
validator, and rejects with an RFC 9457
Problem body via ProblemRejection on failure.
Status codes and the stable code extension member match
ValidatedJson’s rejections exactly:
- malformed JSON ->
400 Bad Request, codeINVALID_JSON - well-formed JSON of the wrong shape ->
422 Unprocessable Entity, codeINVALID_BODY - missing or incorrect
Content-Type->415 Unsupported Media Type, codeUNSUPPORTED_MEDIA_TYPE - validation failure ->
422 Unprocessable Entity, codeVALIDATION_ERROR
A validation failure carries the same field-level map the flat rejection
exposes, under the "details" extension member:
{
"title": "Unprocessable Entity",
"status": 422,
"detail": "validation failed",
"code": "VALIDATION_ERROR",
"details": { "fields": { "name": [{ "code": "length", "params": { "min": 2 } }] } }
}As with ProblemJson, detail carries the flat
rejection’s message, code becomes the "code" extension member, and the
Content-Type is negotiated from the request’s Accept headers via
ProblemFormat::negotiate.
Requires the problem and validator features.
§Example
use axum_api_kit::ProblemValidatedJson;
use serde::Deserialize;
use validator::Validate;
#[derive(Deserialize, Validate)]
struct CreateUser {
#[validate(length(min = 1, max = 100))]
name: String,
#[validate(email)]
email: String,
}
// The body is deserialized and validated before the handler body runs;
// failures become RFC 9457 problem details responses.
async fn create_user(ProblemValidatedJson(user): ProblemValidatedJson<CreateUser>) {
let _ = (user.name, user.email);
}Tuple Fields§
§0: TTrait Implementations§
Source§impl<T: Clone> Clone for ProblemValidatedJson<T>
impl<T: Clone> Clone for ProblemValidatedJson<T>
Source§fn clone(&self) -> ProblemValidatedJson<T>
fn clone(&self) -> ProblemValidatedJson<T>
Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl<T: Debug> Debug for ProblemValidatedJson<T>
impl<T: Debug> Debug for ProblemValidatedJson<T>
Source§impl<T, S> FromRequest<S> for ProblemValidatedJson<T>
Available on crate feature validator only.
impl<T, S> FromRequest<S> for ProblemValidatedJson<T>
Available on crate feature
validator only.Auto Trait Implementations§
impl<T> Freeze for ProblemValidatedJson<T>where
T: Freeze,
impl<T> RefUnwindSafe for ProblemValidatedJson<T>where
T: RefUnwindSafe,
impl<T> Send for ProblemValidatedJson<T>where
T: Send,
impl<T> Sync for ProblemValidatedJson<T>where
T: Sync,
impl<T> Unpin for ProblemValidatedJson<T>where
T: Unpin,
impl<T> UnsafeUnpin for ProblemValidatedJson<T>where
T: UnsafeUnpin,
impl<T> UnwindSafe for ProblemValidatedJson<T>where
T: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more