oasgen-core 0.20.2

Dependency of oasgen. Generates OpenAPI 3.0 spec based on Rust code. Works with actix-web, but architected to easily extend to other frameworks (or no framework).
Documentation
use openapiv3::{ReferenceOr, Schema};
use openapiv3 as oa;

use crate::OaSchema;

impl<T: OaSchema> OaSchema for axum::extract::Json<T> {
    fn schema() -> Schema {
        panic!("Call body_schema() for Json, not schema().")
    }

    fn body_schema() -> Option<ReferenceOr<Schema>> {
        T::body_schema()
    }
}

impl<T> OaSchema for axum::extract::Extension<T> {
    fn schema() -> Schema {
        panic!("Call parameters() for Extension, not schema().")
    }
    fn body_schema() -> Option<ReferenceOr<Schema>> { None }
}

impl<T> OaSchema for axum::extract::State<T> {
    fn schema() -> Schema {
        panic!("Call parameters() for State, not schema().")
    }

    fn body_schema() -> Option<ReferenceOr<Schema>> {
        None
    }
}

impl<T> OaSchema for http::Response<T> {
    fn schema() -> Schema {
        Schema::new_any()
    }
}

impl<T> OaSchema for http::Request<T> {
    fn schema() -> Schema {
        panic!("Call parameters() for Request, not schema().")
    }
    fn body_schema() -> Option<ReferenceOr<Schema>> { None }
}

impl<T> OaSchema for axum::extract::ConnectInfo<T> {
    fn body_schema() -> Option<ReferenceOr<Schema>> { None }
    fn schema() -> Schema {
        panic!("Call parameters() for ConnectInfo, not schema().")
    }
}

impl OaSchema for http::HeaderMap {
    fn schema() -> Schema {
        panic!("Call parameters() for HeaderMap, not schema().")
    }
    fn body_schema() -> Option<ReferenceOr<Schema>> { None }
}

impl<T: OaSchema> OaSchema for axum::extract::Query<T> {
    fn schema() -> Schema {
        panic!("Call parameters() for Query, not schema().")
    }

    fn parameters() -> Vec<ReferenceOr<oa::Parameter>> {
        let p = oa::Parameter::query("query", T::schema_ref());
        vec![ReferenceOr::Item(p)]
    }

    fn body_schema() -> Option<ReferenceOr<Schema>> { None }
}

impl<T: OaSchema> OaSchema for axum::extract::Path<T> {
    fn schema() -> Schema {
        panic!("Call parameters() for Path, not schema().");
    }

    fn parameters() -> Vec<ReferenceOr<oa::Parameter>> {
        let p = oa::Parameter::path("path", T::schema_ref());
        vec![ReferenceOr::Item(p)]
    }

    fn body_schema() -> Option<ReferenceOr<Schema>> {
        None
    }
}

impl OaSchema for http::request::Parts {
    fn schema() -> Schema {
        panic!("Call parameters() for Parts, not schema().")
    }
    fn body_schema() -> Option<ReferenceOr<Schema>> { None }
}

#[cfg(feature = "qs")]
impl<T: OaSchema> OaSchema for serde_qs::axum::QsQuery<T> {
    fn schema() -> Schema {
        panic!("Call parameters() for QsQuery, not schema().")
    }

    fn parameters() -> Vec<ReferenceOr<oa::Parameter>> {
        let p = oa::Parameter::query("query", T::schema_ref());
        vec![ReferenceOr::Item(p)]
    }
    fn body_schema() -> Option<ReferenceOr<Schema>> { None }
}