Trait salvo_oapi::ToParameters

source ·
pub trait ToParameters<'de>: Extractible<'de> {
    // Required method
    fn to_parameters(components: &mut Components) -> Parameters;
}
Expand description

Trait used to convert implementing type to OpenAPI parameters.

This trait is derivable for structs which are used to describe path or query parameters. For more details of #[derive(ToParameters)] refer to derive documentation.

§Examples

Derive ToParameters implementation. This example will fail to compile because ToParameters cannot be used alone and it need to be used together with endpoint using the params as well. See derive documentation for more details.

use serde::Deserialize;
use salvo_oapi::{ToParameters, EndpointArgRegister, Components, Operation};
use salvo_core::prelude::*;

#[derive(Deserialize, ToParameters)]
struct PetParams {
    /// Id of pet
    id: i64,
    /// Name of pet
    name: String,
}

Roughly equal manual implementation of ToParameters trait.

#[derive(Deserialize)]
impl<'de> salvo_oapi::ToParameters<'de> for PetParams {
    fn to_parameters(_components: &mut Components) -> salvo_oapi::Parameters {
        salvo_oapi::Parameters::new().parameter(
            salvo_oapi::Parameter::new("id")
                .required(salvo_oapi::Required::True)
                .parameter_in(salvo_oapi::ParameterIn::Path)
                .description("Id of pet")
                .schema(
                    salvo_oapi::Object::new()
                        .schema_type(salvo_oapi::SchemaType::Integer)
                        .format(salvo_oapi::SchemaFormat::KnownFormat(salvo_oapi::schema::KnownFormat::Int64)),
                ),
        ).parameter(
            salvo_oapi::Parameter::new("name")
                .required(salvo_oapi::Required::True)
                .parameter_in(salvo_oapi::ParameterIn::Query)
                .description("Name of pet")
                .schema(
                    salvo_oapi::Object::new()
                        .schema_type(salvo_oapi::SchemaType::String),
                ),
        )
    }
}

impl<'ex> Extractible<'ex> for PetParams {
   fn metadata() -> &'ex Metadata {
     static METADATA: Metadata = Metadata::new("");
     &METADATA
   }
   async fn extract(req: &'ex mut Request) -> Result<Self, salvo_core::http::ParseError> {
       salvo_core::serde::from_request(req, Self::metadata()).await
   }
   async fn extract_with_arg(req: &'ex mut Request, _arg: &str) -> Result<Self, salvo_core::http::ParseError> {
       Self::extract(req).await
   }
}

impl EndpointArgRegister for PetParams {
    fn register(components: &mut Components, operation: &mut Operation, _arg: &str) {
        operation.parameters.append(&mut PetParams::to_parameters(components));
    }
}

Required Methods§

source

fn to_parameters(components: &mut Components) -> Parameters

Provide Vec of Parameters to caller. The result is used in salvo-oapi-macros library to provide OpenAPI parameter information for the endpoint using the parameters.

Object Safety§

This trait is not object safe.

Implementors§