use serde::Serialize;
use utoipa::openapi::{InfoBuilder, OpenApi, OpenApiBuilder};
use utoipa::ToSchema;
use crate::config::Config;
#[derive(Serialize, ToSchema)]
#[allow(dead_code)]
pub(crate) struct ServerInfo {
protocol: u32,
min_protocol: u32,
modules: Vec<String>,
}
#[derive(Serialize, ToSchema)]
#[allow(dead_code)]
pub(crate) struct ApiError {
code: String,
message: String,
#[schema(value_type = Option<Object>)]
details: Option<serde_json::Value>,
}
#[derive(Serialize, ToSchema)]
#[allow(dead_code)]
pub(crate) struct ErrorBody {
error: ApiError,
}
#[derive(Serialize, ToSchema)]
#[allow(dead_code)]
pub(crate) struct Status {
status: String,
}
pub(crate) fn base(config: &Config) -> OpenApi {
let info = InfoBuilder::new().title(config.openapi.title.clone()).version(config.openapi.version.clone()).build();
let mut doc = OpenApiBuilder::new().info(info).build();
let components = doc.components.get_or_insert_with(Default::default);
components.schemas.insert("ErrorBody".into(), <ErrorBody as utoipa::PartialSchema>::schema());
components.schemas.insert("ApiError".into(), <ApiError as utoipa::PartialSchema>::schema());
doc
}