diff --git a/examples/users.rs b/examples/users.rs index fd8caac..077ef41 100644 --- a/examples/users.rs +++ b/examples/users.rs @@ -127,7 +127,7 @@ fn main() ); gotham::start(ADDR, build_router(chain, pipelines, |route| { - route.with_openapi("Users Example", "0.0.1", |mut route| { + route.with_openapi("Users Example", "0.0.1", ADDR, |mut route| { route.resource::("users"); route.get_openapi("openapi"); }); diff --git a/src/openapi.rs b/src/openapi.rs index c67f518..7d36973 100644 --- a/src/openapi.rs +++ b/src/openapi.rs @@ -14,7 +14,7 @@ use gotham::{ use indexmap::IndexMap; use log::error; use mime::{APPLICATION_JSON, TEXT_PLAIN}; -use openapiv3::{MediaType, OpenAPI, Operation, PathItem, Paths, ReferenceOr, ReferenceOr::Item, Response, Responses, StatusCode}; +use openapiv3::{MediaType, OpenAPI, Operation, PathItem, Paths, ReferenceOr, ReferenceOr::Item, Response, Responses, Server, StatusCode}; use serde::de::DeserializeOwned; use std::panic::RefUnwindSafe; @@ -22,7 +22,7 @@ pub struct OpenapiRouter(OpenAPI); impl OpenapiRouter { - pub fn new(title : Title, version : Version) -> Self + pub fn new<Title : ToString, Version : ToString, Url : ToString>(title : Title, version : Version, server_url : Url) -> Self { Self(OpenAPI { openapi: "3.0.2".to_string(), @@ -34,7 +34,11 @@ impl OpenapiRouter license: None, version: version.to_string() }, - servers: Vec::new(), + servers: vec![Server { + url: server_url.to_string(), + description: None, + variables: None + }], paths: Paths::new(), components: None, security: Vec::new(), diff --git a/src/routing.rs b/src/routing.rs index ae073a9..a7ea592 100644 --- a/src/routing.rs +++ b/src/routing.rs @@ -34,11 +34,12 @@ struct PathExtractor<ID : RefUnwindSafe + Send + 'static> #[cfg(feature = "openapi")] pub trait WithOpenapi<D> { - fn with_openapi<F, Title, Version>(&mut self, title : Title, version : Version, block : F) + fn with_openapi<F, Title, Version, Url>(&mut self, title : Title, version : Version, server_url : Url, block : F) where F : FnOnce((&mut D, &mut OpenapiRouter)), Title : ToString, - Version : ToString; + Version : ToString, + Url : ToString; } /// This trait adds the `resource` method to gotham's routing. It allows you to register @@ -235,13 +236,14 @@ macro_rules! implDrawResourceRoutes { C : PipelineHandleChain<P> + Copy + Send + Sync + 'static, P : RefUnwindSafe + Send + Sync + 'static { - fn with_openapi<F, Title, Version>(&mut self, title : Title, version : Version, block : F) + fn with_openapi<F, Title, Version, Url>(&mut self, title : Title, version : Version, server_url : Url, block : F) where F : FnOnce((&mut Self, &mut OpenapiRouter)), Title : ToString, - Version : ToString + Version : ToString, + Url : ToString { - let mut router = OpenapiRouter::new(title, version); + let mut router = OpenapiRouter::new(title, version, server_url); block((self, &mut router)); } }