diff --git a/example/src/main.rs b/example/src/main.rs index 3faee12..1612a22 100644 --- a/example/src/main.rs +++ b/example/src/main.rs @@ -26,17 +26,16 @@ rest_resource!{Users, route => { }} #[derive(Deserialize, OpenapiType, Serialize)] -enum TestEnum +struct TestStruct { - Foo, - Bar + foo : String } #[derive(Deserialize, OpenapiType, Serialize)] struct User { username : String, - test : Option + test : Option> } impl ResourceReadAll>>> for Users diff --git a/gotham_restful/src/openapi/types.rs b/gotham_restful/src/openapi/types.rs index 69f4adc..f0167f0 100644 --- a/gotham_restful/src/openapi/types.rs +++ b/gotham_restful/src/openapi/types.rs @@ -156,7 +156,7 @@ impl OpenapiType for Vec fn to_schema() -> OpenapiSchema { let schema = T::to_schema(); - let mut dependencies : IndexMap = IndexMap::new(); + let mut dependencies = schema.dependencies.clone(); let items = if let Some(name) = schema.name.clone() { diff --git a/gotham_restful_derive/src/openapi_type.rs b/gotham_restful_derive/src/openapi_type.rs index f041d5b..7138da1 100644 --- a/gotham_restful_derive/src/openapi_type.rs +++ b/gotham_restful_derive/src/openapi_type.rs @@ -84,6 +84,16 @@ fn expand_field(field : &Field) -> TokenStream2 required.push(stringify!(#ident).to_string()); } + let keys : Vec = schema.dependencies.keys().map(|k| k.to_string()).collect(); + for dep in keys + { + let dep_schema = schema.dependencies.swap_remove(&dep); + if let Some(dep_schema) = dep_schema + { + dependencies.insert(dep, dep_schema); + } + } + match schema.name.clone() { Some(name) => { properties.insert(