1 module route; 2 3 import boilerplate; 4 import std.json; 5 import std.typecons; 6 import text.json.Decode; 7 import ToJson; 8 import types; 9 10 struct Route 11 { 12 string url; 13 14 string method; 15 16 string description; 17 18 string operationId; 19 20 Type schema; 21 22 Parameter[] parameters; 23 24 Response[] responses; 25 26 mixin(GenerateAll); 27 } 28 29 abstract class Parameter 30 { 31 mixin(GenerateAll); 32 } 33 34 class ValueParameter : Parameter 35 { 36 string in_; 37 38 @(This.Default!null) 39 string description; 40 41 string name; 42 43 Type schema; 44 45 @(This.Default) 46 Nullable!bool required; 47 48 mixin(GenerateAll); 49 } 50 51 class RefParameter : Parameter 52 { 53 string target; 54 55 mixin(GenerateAll); 56 } 57 58 struct Response 59 { 60 string code; 61 62 @(This.Default!null) 63 Type schema; 64 65 mixin(GenerateAll); 66 } 67 68 Parameter decode(T : Parameter)(const JSONValue value) 69 in (value.type == JSONType.array) 70 { 71 if (value.hasKey("$ref")) 72 { 73 return new RefParameter(value.getEntry("$ref").decodeJson!string); 74 } 75 return value.toObject.decodeJson!(ValueParameter, types.decode); 76 } 77 78 private alias _ = decode!Parameter;