1
+ package { {apiPackage} }
2
+
3
+ import { {apiPackage} }.path._
4
+ import { {apiPackage} }.query._
5
+
6
+ { {#imports} }import { {import} }
7
+ { {/imports} }
8
+
9
+ { {#extraImports} }import { {.} }
10
+ { {/extraImports} }
11
+
12
+ import cats.Monad
13
+ import cats.syntax.all._
14
+
15
+ import org.http4s._
16
+ import org.http4s.circe._
17
+ import org.http4s.server._
18
+ import org.http4s.headers._
19
+ import org.http4s.dsl.Http4sDsl
20
+ import org.http4s.circe.CirceEntityEncoder._
21
+
22
+ final case class { {classname} }Routes[
23
+ F[_]: JsonDecoder: Monad{ {#allAuth} }, { {.} }{ {/allAuth} }
24
+ ](delegate: { {classname} }Delegate[F{ {#allAuth} }, { {.} }{ {/allAuth} }]) extends Http4sDsl[F] {
25
+ {{#operations} }
26
+ { {#operation} }
27
+ object { {operationId} } {
28
+ import {{classname} }Delegate.{ {operationId} }Responses
29
+
30
+ { {#pathParams} }
31
+ { {#vendorExtensions.x-refined} }
32
+ object { {baseName} }Varr extends RefinedVarr[{ {vendorExtensions.x-refined-lft} }, { {{vendorExtensions.x-refined-rgt} }}]
33
+ { {/vendorExtensions.x-refined} }
34
+ { {/pathParams} }
35
+ { {#queryParams} }
36
+ { {#isArray} }
37
+ { {#required} }
38
+ object { {baseName} }QueryParam extends QuerySeqParamDecoderMatcher[{ {{items.vendorExtensions.x-type} }}]("{ {baseName} }")
39
+ { {/required} }
40
+ { {^required} }
41
+ object { {baseName} }QueryParam extends OptionalQuerySeqParamDecoderMatcher[{ {{items.vendorExtensions.x-type} }}]("{ {baseName} }")
42
+ { {/required} }
43
+ { {/isArray} }
44
+ { {^isArray} }
45
+ { {#required} }
46
+ object { {baseName} }QueryParam extends QueryParamDecoderMatcher[{ {{vendorExtensions.x-type} }}]("{ {baseName} }")
47
+ { {/required} }
48
+ { {^required} }
49
+ object { {baseName} }QueryParam extends OptionalQueryParamDecoderMatcher[{ {{vendorExtensions.x-type} }}]("{ {baseName} }")
50
+ { {/required} }
51
+ { {/isArray} }
52
+ { {/queryParams} }
53
+
54
+ { {^vendorExtensions.x-authed} }
55
+ val route = HttpRoutes.of[F] {
56
+ case req @ {{{httpMethod} }} -> Root{ {{vendorExtensions.x-codegen-path} }}{ {{vendorExtensions.x-codegen-query} }} =>
57
+ { {#vendorExtensions.x-json-body} }
58
+ { {#vendorExtensions.x-generic-body} }
59
+ req.contentType match {
60
+ case Some(`Content-Type`(MediaType.application.json, _)) =>
61
+ {{> delegateCallJson} }
62
+ case _ =>
63
+ { {> delegateCallGeneric} }
64
+ }
65
+ { {/vendorExtensions.x-generic-body} }
66
+ { {^vendorExtensions.x-generic-body} }
67
+ { {> delegateCallJson} }
68
+ { {/vendorExtensions.x-generic-body} }
69
+ { {/vendorExtensions.x-json-body} }
70
+ { {^vendorExtensions.x-json-body} }
71
+ { {> delegateCallGeneric} }
72
+ { {/vendorExtensions.x-json-body} }
73
+ }
74
+
75
+ { {/vendorExtensions.x-authed} }
76
+ { {#vendorExtensions.x-authed} }
77
+ val route{ {authName} } = AuthedRoutes.of[{ {authName} }, F] {
78
+ case (req @ {{{httpMethod} }} -> Root{ {{vendorExtensions.x-codegen-path} }}{ {{vendorExtensions.x-codegen-query} }}) as auth =>
79
+ { {#vendorExtensions.x-json-body} }
80
+ { {#vendorExtensions.x-generic-body} }
81
+ req.contentType match {
82
+ case Some(`Content-Type`(MediaType.application.json, _)) =>
83
+ {{> delegateCallJson} }
84
+ case _ =>
85
+ { {> delegateCallGeneric} }
86
+ }
87
+ { {/vendorExtensions.x-generic-body} }
88
+ { {^vendorExtensions.x-generic-body} }
89
+ { {> delegateCallJson} }
90
+ { {/vendorExtensions.x-generic-body} }
91
+ { {/vendorExtensions.x-json-body} }
92
+ { {^vendorExtensions.x-json-body} }
93
+ { {> delegateCallGeneric} }
94
+ { {/vendorExtensions.x-json-body} }
95
+ }
96
+ { {/vendorExtensions.x-authed} }
97
+
98
+ val responses: { {operationId} }Responses[F] = new { {operationId} }Responses[F] {
99
+ {{#responses} }
100
+ { {#vendorExtensions.x-response-location} }
101
+ { {#vendorExtensions.x-json-response} }
102
+ def resp{ {code} }(location: Location, value: { {{dataType} }}): F[Response[F]] = { {vendorExtensions.x-response} }(location, value)
103
+ { {/vendorExtensions.x-json-response} }
104
+ { {#vendorExtensions.x-generic-response} }
105
+ def resp{ {code} }(location: Location): F[Response[F]] = { {vendorExtensions.x-response} }(location)
106
+ { {/vendorExtensions.x-generic-response} }
107
+ { {/vendorExtensions.x-response-location} }
108
+ { {#vendorExtensions.x-response-www-auth} }
109
+ { {#vendorExtensions.x-json-response} }
110
+ def resp{ {code} }(authenticate: `WWW-Authenticate`, value: { {{dataType} }}): F[Response[F]] = { {vendorExtensions.x-response} }(authenticate, value)
111
+ { {/vendorExtensions.x-json-response} }
112
+ { {#vendorExtensions.x-generic-response} }
113
+ def resp{ {code} }(authenticate: `WWW-Authenticate`): F[Response[F]] = { {vendorExtensions.x-response} }(authenticate)
114
+ { {/vendorExtensions.x-generic-response} }
115
+ { {/vendorExtensions.x-response-www-auth} }
116
+ { {#vendorExtensions.x-response-allow} }
117
+ { {#vendorExtensions.x-json-response} }
118
+ def resp{ {code} }(allow: Allow, value: { {{dataType} }}): F[Response[F]] = { {vendorExtensions.x-response} }(allow, value)
119
+ { {/vendorExtensions.x-json-response} }
120
+ { {#vendorExtensions.x-generic-response} }
121
+ def resp{ {code} }(allow: Allow): F[Response[F]] = { {vendorExtensions.x-response} }(allow)
122
+ { {/vendorExtensions.x-generic-response} }
123
+ { {/vendorExtensions.x-response-allow} }
124
+ { {#vendorExtensions.x-response-proxy-auth} }
125
+ { {#vendorExtensions.x-json-response} }
126
+ def resp{ {code} }(authenticate: `Proxy-Authenticate`, value: { {{dataType} }}): F[Response[F]] = { {vendorExtensions.x-response} }(value, authenticate)
127
+ { {/vendorExtensions.x-json-response} }
128
+ { {#vendorExtensions.x-generic-response} }
129
+ def resp{ {code} }(authenticate: `Proxy-Authenticate`): F[Response[F]] = { {vendorExtensions.x-response} }(authenticate)
130
+ { {/vendorExtensions.x-generic-response} }
131
+ { {/vendorExtensions.x-response-proxy-auth} }
132
+ { {#vendorExtensions.x-response-standard} }
133
+ { {#vendorExtensions.x-json-response} }
134
+ def resp{ {code} }(value: { {{dataType} }}): F[Response[F]] = { {vendorExtensions.x-response} }(value)
135
+ { {/vendorExtensions.x-json-response} }
136
+ { {#vendorExtensions.x-generic-response} }
137
+ def resp{ {code} }(): F[Response[F]] = { {vendorExtensions.x-response} }()
138
+ { {/vendorExtensions.x-generic-response} }
139
+ { {/vendorExtensions.x-response-standard} }
140
+ { {/responses} }
141
+ }
142
+ }
143
+ { {/operation} }
144
+ { {/operations} }
145
+
146
+ { {#operationsByAuth} }
147
+ val routes{ {auth} } =
148
+ { {#ops} }
149
+ { {.} }.route{ {auth} }{ {^-last} } <+>{ {/-last} }
150
+ { {/ops} }
151
+ { {/operationsByAuth} }
152
+ }
153
+
154
+ object { {classname} }Delegate {
155
+ {{#operations} }
156
+ { {#operation} }
157
+ trait { {operationId} }Responses[F[_]] {
158
+ {{#responses} }
159
+ { {#vendorExtensions.x-response-location} }
160
+ { {#vendorExtensions.x-json-response} }
161
+ def resp{ {code} }(location: Location, value: { {{dataType} }}): F[Response[F]]
162
+ { {/vendorExtensions.x-json-response} }
163
+ { {#vendorExtensions.x-generic-response} }
164
+ def resp{ {code} }(location: Location): F[Response[F]]
165
+ { {/vendorExtensions.x-generic-response} }
166
+ { {/vendorExtensions.x-response-location} }
167
+ { {#vendorExtensions.x-response-www-auth} }
168
+ { {#vendorExtensions.x-json-response} }
169
+ def resp{ {code} }(authenticate: `WWW-Authenticate`, value: { {{dataType} }}): F[Response[F]]
170
+ { {/vendorExtensions.x-json-response} }
171
+ { {#vendorExtensions.x-generic-response} }
172
+ def resp{ {code} }(authenticate: `WWW-Authenticate`): F[Response[F]]
173
+ { {/vendorExtensions.x-generic-response} }
174
+ { {/vendorExtensions.x-response-www-auth} }
175
+ { {#vendorExtensions.x-response-allow} }
176
+ { {#vendorExtensions.x-json-response} }
177
+ def resp{ {code} }(allow: Allow, value: { {{dataType} }}): F[Response[F]]
178
+ { {/vendorExtensions.x-json-response} }
179
+ { {#vendorExtensions.x-generic-response} }
180
+ def resp{ {code} }(allow: Allow): F[Response[F]]
181
+ { {/vendorExtensions.x-generic-response} }
182
+ { {/vendorExtensions.x-response-allow} }
183
+ { {#vendorExtensions.x-response-proxy-auth} }
184
+ { {#vendorExtensions.x-json-response} }
185
+ def resp{ {code} }(authenticate: `Proxy-Authenticate`, value: { {{dataType} }}): F[Response[F]]
186
+ { {/vendorExtensions.x-json-response} }
187
+ { {#vendorExtensions.x-generic-response} }
188
+ def resp{ {code} }(authenticate: `Proxy-Authenticate`): F[Response[F]]
189
+ { {/vendorExtensions.x-generic-response} }
190
+ { {/vendorExtensions.x-response-proxy-auth} }
191
+ { {#vendorExtensions.x-response-standard} }
192
+ { {#vendorExtensions.x-json-response} }
193
+ def resp{ {code} }(value: { {{dataType} }}): F[Response[F]]
194
+ { {/vendorExtensions.x-json-response} }
195
+ { {#vendorExtensions.x-generic-response} }
196
+ def resp{ {code} }(): F[Response[F]]
197
+ { {/vendorExtensions.x-generic-response} }
198
+ { {/vendorExtensions.x-response-standard} }
199
+ { {/responses} }
200
+ }
201
+
202
+ { {/operation} }
203
+ { {/operations} }
204
+ }
205
+
206
+ trait { {classname} }Delegate[F[_]{ {#allAuth} }, { {.} }{ {/allAuth} }] {
207
+ {{#operations} }
208
+ { {#operation} }
209
+
210
+ trait { {operationId} } {
211
+ import {{classname} }Delegate.{ {operationId} }Responses
212
+ { {#vendorExtensions.x-json-body} }
213
+
214
+ { {^vendorExtensions.x-authed} }
215
+ def handle(
216
+ req: Request[F],
217
+ { {operationId} }: F[{ {{bodyParam.dataType} }}],
218
+ { {> delegateArgs} } responses: { {operationId} }Responses[F]
219
+ ): F[Response[F]]
220
+ { {/vendorExtensions.x-authed} }
221
+
222
+ { {#vendorExtensions.x-authed} }
223
+ def handle_{ {authName} }(
224
+ auth: { {authName} },
225
+ req: Request[F],
226
+ { {operationId} }: F[{ {{bodyParam.dataType} }}],
227
+ { {> delegateArgs} } responses: { {operationId} }Responses[F]
228
+ ): F[Response[F]]
229
+
230
+ { {/vendorExtensions.x-authed} }
231
+ { {/vendorExtensions.x-json-body} }
232
+
233
+ { {#vendorExtensions.x-generic-body} }
234
+ { {^vendorExtensions.x-authed} }
235
+ def handle(
236
+ req: Request[F],
237
+ { {> delegateArgs} } responses: { {operationId} }Responses[F]
238
+ ): F[Response[F]]
239
+ { {/vendorExtensions.x-authed} }
240
+
241
+ { {#vendorExtensions.x-authed} }
242
+ def handle_{ {authName} }(
243
+ auth: { {authName} },
244
+ req: Request[F],
245
+ { {> delegateArgs} } responses: { {operationId} }Responses[F]
246
+ ): F[Response[F]]
247
+
248
+ { {/vendorExtensions.x-authed} }
249
+ { {/vendorExtensions.x-generic-body} }
250
+ }
251
+ def { {operationId} }: { {operationId} }
252
+
253
+ { {/operation} }
254
+ { {/operations} }
255
+ }
0 commit comments