use utoipa::openapi::{Components, OpenApi};
use crate::config::Route;
#[derive(Default, Clone)]
pub(crate) struct MosecOpenAPI {
pub api: OpenApi,
}
impl MosecOpenAPI {
pub fn merge_route(&mut self, route: &Route) -> &mut Self {
let reserved = match route.is_sse {
true => "/openapi/reserved/inference",
false => "/openapi/reserved/inference_sse",
};
let mut path = self.api.paths.paths.get(reserved).unwrap().clone();
if let Some(mut op) = path.post.clone() {
if let Some(mut user_schemas) = route.schemas.clone() {
if self.api.components.is_none() {
self.api.components = Some(Components::default());
}
self.api
.components
.as_mut()
.unwrap()
.schemas
.append(&mut user_schemas);
};
if let Some(req) = route.request_body.clone() {
op.request_body = Some(req);
};
if let Some(mut responses) = route.responses.clone() {
op.responses.responses.append(&mut responses);
};
path.post = Some(op);
}
self.api.paths.paths.insert(route.endpoint.clone(), path);
self
}
pub fn clean(&mut self) -> &mut Self {
self.api.paths.paths.remove("/openapi/reserved/inference");
self.api
.paths
.paths
.remove("/openapi/reserved/inference_sse");
self
}
}