@@ -12,10 +12,7 @@ use axum::{
1212} ;
1313
1414use indexmap:: IndexMap ;
15- use schemars:: {
16- schema:: { ArrayValidation , InstanceType , Schema , SingleOrVec } ,
17- JsonSchema ,
18- } ;
15+ use schemars:: { json_schema, JsonSchema , Schema } ;
1916use serde_json:: json;
2017
2118use crate :: {
@@ -75,22 +72,22 @@ fn operation_input_json<T: JsonSchema>(
7572 ctx : & mut crate :: generate:: GenContext ,
7673 operation : & mut Operation ,
7774) {
78- let schema = ctx. schema . subschema_for :: < T > ( ) . into_object ( ) ;
79- let resolved_schema = ctx. resolve_schema ( & schema ) ;
75+ let json_schema = ctx. schema . subschema_for :: < T > ( ) ;
76+ let resolved_schema = ctx. resolve_schema ( & json_schema ) ;
8077
8178 set_body (
8279 ctx,
8380 operation,
8481 RequestBody {
8582 description : resolved_schema
86- . metadata
87- . as_ref ( )
88- . and_then ( |m| m . description . clone ( ) ) ,
83+ . get ( "description" )
84+ . and_then ( |d| d . as_str ( ) )
85+ . map ( String :: from ) ,
8986 content : IndexMap :: from_iter ( [ (
9087 "application/json" . into ( ) ,
9188 MediaType {
9289 schema : Some ( SchemaObject {
93- json_schema : schema . into ( ) ,
90+ json_schema,
9491 example : None ,
9592 external_docs : None ,
9693 } ) ,
@@ -129,17 +126,17 @@ where
129126 T : JsonSchema ,
130127{
131128 fn operation_input ( ctx : & mut crate :: generate:: GenContext , operation : & mut Operation ) {
132- let schema = ctx. schema . subschema_for :: < T > ( ) . into_object ( ) ;
129+ let schema = ctx. schema . subschema_for :: < T > ( ) ;
133130 let resolved_schema = ctx. resolve_schema ( & schema) ;
134131
135132 set_body (
136133 ctx,
137134 operation,
138135 RequestBody {
139136 description : resolved_schema
140- . metadata
141- . as_ref ( )
142- . and_then ( |m| m . description . clone ( ) ) ,
137+ . get ( "description" )
138+ . and_then ( |d| d . as_str ( ) )
139+ . map ( String :: from ) ,
143140 content : IndexMap :: from_iter ( [ (
144141 "application/x-www-form-urlencoded" . into ( ) ,
145142 MediaType {
@@ -163,7 +160,7 @@ where
163160 T : JsonSchema ,
164161{
165162 fn operation_input ( ctx : & mut crate :: generate:: GenContext , operation : & mut Operation ) {
166- let schema = ctx. schema . subschema_for :: < T > ( ) . into_object ( ) ;
163+ let schema = ctx. schema . subschema_for :: < T > ( ) ;
167164 let params = parameters_from_schema ( ctx, schema, ParamLocation :: Path ) ;
168165 add_parameters ( ctx, operation, params) ;
169166 }
@@ -175,7 +172,7 @@ where
175172 T : JsonSchema ,
176173{
177174 fn operation_input ( ctx : & mut crate :: generate:: GenContext , operation : & mut Operation ) {
178- let schema = ctx. schema . subschema_for :: < T > ( ) . into_object ( ) ;
175+ let schema = ctx. schema . subschema_for :: < T > ( ) ;
179176 let params = parameters_from_schema ( ctx, schema, ParamLocation :: Query ) ;
180177 add_parameters ( ctx, operation, params) ;
181178 }
@@ -207,13 +204,10 @@ impl OperationInput for axum::extract::ws::WebSocketUpgrade {
207204 deprecated : None ,
208205 format : crate :: openapi:: ParameterSchemaOrContent :: Schema (
209206 SchemaObject {
210- json_schema : Schema :: Object ( schemars:: schema:: SchemaObject {
211- instance_type : Some ( SingleOrVec :: Single ( Box :: new (
212- InstanceType :: String ,
213- ) ) ) ,
214- enum_values : Some ( vec ! [ json!( "upgrade" ) ] ) ,
215- const_value : Some ( json ! ( "upgrade" ) ) ,
216- ..Default :: default ( )
207+ json_schema : json_schema ! ( {
208+ "type" : "string" ,
209+ "enum" : [ "upgrade" ] ,
210+ "const" : "upgrade" ,
217211 } ) ,
218212 external_docs : None ,
219213 example : Some ( json ! ( "upgrade" ) ) ,
@@ -233,13 +227,10 @@ impl OperationInput for axum::extract::ws::WebSocketUpgrade {
233227 deprecated : None ,
234228 format : crate :: openapi:: ParameterSchemaOrContent :: Schema (
235229 SchemaObject {
236- json_schema : Schema :: Object ( schemars:: schema:: SchemaObject {
237- instance_type : Some ( SingleOrVec :: Single ( Box :: new (
238- InstanceType :: String ,
239- ) ) ) ,
240- enum_values : Some ( vec ! [ json!( "websocket" ) ] ) ,
241- const_value : Some ( json ! ( "websocket" ) ) ,
242- ..Default :: default ( )
230+ json_schema : json_schema ! ( {
231+ "type" : "string" ,
232+ "enum" : [ "websocket" ] ,
233+ "const" : "websocket" ,
243234 } ) ,
244235 external_docs : None ,
245236 example : Some ( json ! ( "websocket" ) ) ,
@@ -259,11 +250,8 @@ impl OperationInput for axum::extract::ws::WebSocketUpgrade {
259250 deprecated : None ,
260251 format : crate :: openapi:: ParameterSchemaOrContent :: Schema (
261252 SchemaObject {
262- json_schema : Schema :: Object ( schemars:: schema:: SchemaObject {
263- instance_type : Some ( SingleOrVec :: Single ( Box :: new (
264- InstanceType :: String ,
265- ) ) ) ,
266- ..Default :: default ( )
253+ json_schema : json_schema ! ( {
254+ "type" : "string" ,
267255 } ) ,
268256 external_docs : None ,
269257 example : None ,
@@ -283,11 +271,8 @@ impl OperationInput for axum::extract::ws::WebSocketUpgrade {
283271 deprecated : None ,
284272 format : crate :: openapi:: ParameterSchemaOrContent :: Schema (
285273 SchemaObject {
286- json_schema : Schema :: Object ( schemars:: schema:: SchemaObject {
287- instance_type : Some ( SingleOrVec :: Single ( Box :: new (
288- InstanceType :: String ,
289- ) ) ) ,
290- ..Default :: default ( )
274+ json_schema : json_schema ! ( {
275+ "type" : "string" ,
291276 } ) ,
292277 external_docs : None ,
293278 example : None ,
@@ -321,11 +306,8 @@ impl OperationInput for axum::extract::Multipart {
321306 "multipart/form-data" . into ( ) ,
322307 MediaType {
323308 schema : Some ( SchemaObject {
324- json_schema : Schema :: Object ( schemars:: schema:: SchemaObject {
325- instance_type : Some ( SingleOrVec :: Single ( Box :: new (
326- InstanceType :: Array ,
327- ) ) ) ,
328- ..Default :: default ( )
309+ json_schema : json_schema ! ( {
310+ "type" : "array" ,
329311 } ) ,
330312 external_docs : None ,
331313 example : None ,
@@ -384,17 +366,17 @@ mod extra {
384366 T : JsonSchema ,
385367 {
386368 fn operation_input ( ctx : & mut crate :: generate:: GenContext , operation : & mut Operation ) {
387- let schema = ctx. schema . subschema_for :: < T > ( ) . into_object ( ) ;
369+ let schema = ctx. schema . subschema_for :: < T > ( ) ;
388370 let resolved_schema = ctx. resolve_schema ( & schema) ;
389371
390372 set_body (
391373 ctx,
392374 operation,
393375 RequestBody {
394376 description : resolved_schema
395- . metadata
396- . as_ref ( )
397- . and_then ( |m| m . description . clone ( ) ) ,
377+ . get ( "description" )
378+ . and_then ( |d| d . as_str ( ) )
379+ . map ( String :: from ) ,
398380 content : IndexMap :: from_iter ( [ (
399381 "application/x-www-form-urlencoded" . into ( ) ,
400382 MediaType {
@@ -418,7 +400,7 @@ mod extra {
418400 T : JsonSchema ,
419401 {
420402 fn operation_input ( ctx : & mut crate :: generate:: GenContext , operation : & mut Operation ) {
421- let schema = ctx. schema . subschema_for :: < T > ( ) . into_object ( ) ;
403+ let schema = ctx. schema . subschema_for :: < T > ( ) ;
422404 let params = parameters_from_schema ( ctx, schema, ParamLocation :: Query ) ;
423405 add_parameters ( ctx, operation, params) ;
424406 }
0 commit comments