48 lines
890 B
Rust
48 lines
890 B
Rust
use axum::{
|
|
Router,
|
|
routing::{get, post},
|
|
};
|
|
use std::sync::Arc;
|
|
use utoipa::OpenApi;
|
|
use utoipa_swagger_ui::SwaggerUi;
|
|
|
|
use crate::Datasets;
|
|
|
|
mod lookup;
|
|
pub use lookup::*;
|
|
|
|
mod item;
|
|
pub use item::*;
|
|
|
|
mod field;
|
|
pub use field::*;
|
|
|
|
#[derive(OpenApi)]
|
|
#[openapi(
|
|
tags(),
|
|
paths(lookup, item_get, get_field),
|
|
components(schemas(LookupRequest, LookupResponse, LookupResult, ItemQuery, FieldQuery))
|
|
)]
|
|
pub(crate) struct Api;
|
|
|
|
impl Datasets {
|
|
#[inline]
|
|
pub fn router(self: Arc<Self>, with_docs: bool) -> Router<()> {
|
|
let mut router = Router::new()
|
|
.route("/lookup", post(lookup))
|
|
.route("/item", get(item_get))
|
|
.route("/field", get(get_field))
|
|
.with_state(self.clone());
|
|
|
|
if with_docs {
|
|
let docs_path = "/docs";
|
|
let docs = SwaggerUi::new(docs_path)
|
|
.url(format!("{}/openapi.json", docs_path), Api::openapi());
|
|
|
|
router = router.merge(docs);
|
|
}
|
|
|
|
router
|
|
}
|
|
}
|