use crate::HasValidate;
#[cfg(feature = "validator")]
use crate::HasValidateArgs;
use axum_serde::Toml;
#[cfg(feature = "validator")]
use validator::ValidateArgs;
impl<T> HasValidate for Toml<T> {
type Validate = T;
fn get_validate(&self) -> &T {
&self.0
}
}
#[cfg(feature = "validator")]
impl<'v, T: ValidateArgs<'v>> HasValidateArgs<'v> for Toml<T> {
type ValidateArgs = T;
fn get_validate_args(&self) -> &Self::ValidateArgs {
&self.0
}
}
#[cfg(feature = "validify")]
impl<T: validify::Modify> crate::HasModify for Toml<T> {
type Modify = T;
fn get_modify(&mut self) -> &mut Self::Modify {
&mut self.0
}
}
#[cfg(feature = "validify")]
impl<T> crate::PayloadExtractor for Toml<T> {
type Payload = T;
fn get_payload(self) -> Self::Payload {
self.0
}
}
#[cfg(feature = "validify")]
impl<T: validify::Validify + validify::ValidifyPayload> crate::HasValidify for Toml<T> {
type Validify = T;
type PayloadExtractor = Toml<T::Payload>;
fn from_validify(v: Self::Validify) -> Self {
Toml(v)
}
}
#[cfg(test)]
mod tests {
use crate::tests::{ValidTest, ValidTestParameter};
use axum::http::StatusCode;
use axum_serde::Toml;
use reqwest::RequestBuilder;
use serde::Serialize;
impl<T: ValidTestParameter + Serialize> ValidTest for Toml<T> {
const ERROR_STATUS_CODE: StatusCode = StatusCode::UNPROCESSABLE_ENTITY;
fn set_valid_request(builder: RequestBuilder) -> RequestBuilder {
builder
.header(reqwest::header::CONTENT_TYPE, "application/toml")
.body(toml::to_string(&T::valid()).expect("Failed to serialize parameters to toml"))
}
fn set_error_request(builder: RequestBuilder) -> RequestBuilder {
#[derive(Serialize, Default)]
struct ErrorData {
error_field: i32,
}
builder
.header(reqwest::header::CONTENT_TYPE, "application/toml")
.body(
toml::to_string(&ErrorData::default())
.expect("Failed to serialize parameters to toml"),
)
}
fn set_invalid_request(builder: RequestBuilder) -> RequestBuilder {
builder
.header(reqwest::header::CONTENT_TYPE, "application/toml")
.body(
toml::to_string(&T::invalid()).expect("Failed to serialize parameters to toml"),
)
}
}
}