use std::any::Any;
use galvyn_core::GalvynRouter;
use crate::openapi::metadata::OpenapiMetadata;
pub trait OpenapiRouterExt {
fn openapi_tag(self, tag: &'static str) -> Self;
fn with_openapi_tag(tag: &'static str) -> Self;
fn openapi_page(self, page: impl Any) -> Self;
fn with_openapi_page(page: impl Any) -> Self;
}
impl OpenapiRouterExt for GalvynRouter {
fn openapi_tag(self, tag: &'static str) -> Self {
self.metadata(OpenapiMetadata {
tags: vec![tag],
pages: Vec::new(),
})
}
fn with_openapi_tag(tag: &'static str) -> Self {
Self::new().openapi_tag(tag)
}
fn openapi_page(self, page: impl Any) -> Self {
assert_eq!(
size_of_val(&page),
0,
"pages should be zero-sized marker types"
);
self.metadata(OpenapiMetadata {
tags: Vec::new(),
pages: vec![page.type_id()],
})
}
fn with_openapi_page(page: impl Any) -> Self {
Self::new().openapi_page(page)
}
}