autapi 0.0.1

Automatic OpenAPI specification from function signatures
Documentation
use crate::{
    Registry,
    openapi::{MaybeRef, Operation, Parameter, ParameterIn, Type},
    schema::ToSchema,
};

pub fn add_parameters_to_operation<T: ToSchema>(
    operation: &mut Operation,
    registry: &mut Registry,
    parameter_in: ParameterIn,
    err_name: &'static str,
) {
    let schema = T::schema(registry);
    let MaybeRef::T(schema) = schema else {
        panic!("schema for {err_name} parameter cannot be a Ref");
    };
    if !schema
        .schema_type
        .is_some_and(|typ| typ.contains(&Type::Object))
    {
        panic!("{err_name} parameter schema has to be an object");
    };
    operation.parameters.extend(
        schema
            .properties
            .into_iter()
            .map(|(property_name, property)| {
                let required = schema.required.contains(&property_name);
                Parameter::new(property_name, parameter_in.clone())
                    .with_schema(property)
                    .with_required(required)
                    .into()
            }),
    );
}