use schemars::schema::Schema;
use apistos_core::ApiComponent;
use apistos_models::info::Info;
use apistos_models::paths::{ExternalDocumentation, Parameter};
use apistos_models::reference_or::ReferenceOr;
use apistos_models::server::Server;
use apistos_models::tag::Tag;
pub trait DefaultParameterAccessor {
fn get_default_parameter() -> DefaultParameters;
}
impl<T> DefaultParameterAccessor for T
where
T: ApiComponent,
{
fn get_default_parameter() -> DefaultParameters {
let mut components = T::child_schemas();
if let Some(sch) = T::schema() {
components.push(sch)
}
DefaultParameters {
parameters: T::parameters(),
components,
}
}
}
#[derive(Default, Clone)]
pub struct DefaultParameters {
pub parameters: Vec<Parameter>,
pub components: Vec<(String, ReferenceOr<Schema>)>,
}
#[derive(Default, Clone)]
pub struct Spec {
pub info: Info,
pub default_tags: Vec<String>,
pub tags: Vec<Tag>,
pub external_docs: Option<ExternalDocumentation>,
pub servers: Vec<Server>,
pub default_parameters: Vec<DefaultParameters>,
}