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> { 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(()) }