46 lines
1.2 KiB
Rust
46 lines
1.2 KiB
Rust
use tracing::info;
|
|
use utoipa::OpenApi;
|
|
|
|
pub mod tag {
|
|
/// nginx
|
|
pub const NGINX_TAG: &str = "Nginx Agent";
|
|
}
|
|
|
|
#[derive(utoipa::OpenApi)]
|
|
#[openapi(
|
|
paths(
|
|
crate::routes::status,
|
|
crate::routes::validate,
|
|
crate::routes::validate_and_reload,
|
|
crate::routes::write_config,
|
|
),
|
|
components(
|
|
schemas(crate::routes::StatusResp),
|
|
schemas(crate::routes::ValidateAndReloadResp),
|
|
schemas(crate::routes::ValidateBody),
|
|
schemas(crate::routes::WriteConfigBody),
|
|
schemas(crate::routes::ValidateAndReloadBody),
|
|
),
|
|
tags(
|
|
(name = tag::NGINX_TAG, description = "Nginx Agent API"),
|
|
)
|
|
)]
|
|
struct ApiDoc;
|
|
|
|
pub struct GenerateOpenapiArgs {
|
|
pub output: String,
|
|
}
|
|
|
|
pub async fn generate_openapi_doc(
|
|
args: &GenerateOpenapiArgs,
|
|
) -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
|
|
info!("Generating OpenAPI documentation...");
|
|
let doc = ApiDoc::openapi();
|
|
let json = doc
|
|
.to_pretty_json()
|
|
.expect("Failed to serialize OpenAPI doc to JSON");
|
|
std::fs::write(&args.output, json).expect("Failed to write OpenAPI doc to file");
|
|
info!("OpenAPI documentation generated at {}", args.output);
|
|
Ok(())
|
|
}
|