Skip to content

Commit b45ecf1

Browse files
authored
Merge pull request #55 from matsuri-tech/docs/api
feat: noRequest functions
2 parents c5896af + aa95b8f commit b45ecf1

File tree

1 file changed

+171
-28
lines changed

1 file changed

+171
-28
lines changed

wrapper.go

Lines changed: 171 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -145,8 +145,8 @@ func (w *EchoWrapper) PATCHTyped(path string, h echo.HandlerFunc, desc Desc, req
145145
return w.Echo.PATCH(path, h, m...)
146146
}
147147

148-
func (w *EchoWrapper) DELETETyped(path string, h echo.HandlerFunc, desc Desc, resp any, m ...echo.MiddlewareFunc) *echo.Route {
149-
w.AddAPITyped(path, desc, "DELETE", nil, resp)
148+
func (w *EchoWrapper) DELETETyped(path string, h echo.HandlerFunc, desc Desc, req any, resp any, m ...echo.MiddlewareFunc) *echo.Route {
149+
w.AddAPITyped(path, desc, "DELETE", req, resp)
150150
return w.Echo.DELETE(path, h, m...)
151151
}
152152

@@ -198,65 +198,122 @@ func makeHandlerNoContent[Req any](h func(ctx echo.Context, req Req) error) echo
198198
}
199199
}
200200

201-
// handlerを受け取ってGETエンドポイントを生やす関数
202-
// handlerの戻り値がnilではない時は、c.JSON(http.StatusOK, resp)として返す
203-
// handlerの戻り値がnilの場合は、c.NoContent(http.StatusOK)として返す
204-
// NOTE: Go1.20時点では、メソッドがtype parameterをもてないので関数として定義されている
201+
/*
202+
func(echo.Context) (Resp, error)の型をもつhandlerを受け取り、GETのAPIを生やす。Responseはstatusとして200、bodyとしてJSONで返す。
203+
204+
NOTE: Go1.20時点では、メソッドがtype parameterをもてないので関数として定義されている
205+
*/
205206
func EwGET[Resp any](w *EchoWrapper, path string, h func(ctx echo.Context) (Resp, error), desc Desc, m ...echo.MiddlewareFunc) *echo.Route {
206207
var resp Resp
207208
return w.GETTyped(path, makeHandlerNoRequest(h), desc, resp, m...)
208209
}
209210

210-
// 詳細についてはEwGETを見よ
211-
// 返すべきresponseがないケースでは、EwPOSTNoContentを使うこと
211+
/*
212+
func(echo.Context, Req) (Resp, error)の型をもつhandlerを受け取り、POSTのAPIを生やす。RequestはJSONとしてBindする。Responseはstatusとして200、bodyとしてJSONで返す。
213+
214+
Requestを受け取らないケースでは EwPOSTNoRequest を使い、Responseを返さないケースでは EwPOSTNoContent を使うこと。
215+
*/
212216
func EwPOST[Req any, Resp any](w *EchoWrapper, path string, h func(ctx echo.Context, req Req) (Resp, error), desc Desc, m ...echo.MiddlewareFunc) *echo.Route {
213217
var req Req
214218
var resp Resp
215219
return w.POSTTyped(path, makeHandler(h), desc, req, resp, m...)
216220
}
217221

218-
// 詳細についてはEwGETを見よ
222+
/*
223+
func(echo.Context) (Resp, error)の型をもつhandlerを受け取り、POSTのAPIを生やす。Responseはstatusとして200、bodyとしてJSONで返す。
224+
*/
225+
func EwPOSTNoRequest[Resp any](w *EchoWrapper, path string, h func(ctx echo.Context) (Resp, error), desc Desc, m ...echo.MiddlewareFunc) *echo.Route {
226+
var resp Resp
227+
return w.POSTTyped(path, makeHandlerNoRequest(h), desc, nil, resp, m...)
228+
}
229+
230+
/*
231+
func(echo.Context, Req) errorの型をもつhandlerを受け取り、POSTのAPIを生やす。RequestはJSONとしてBindする。Responseはstatusとして204を返す。
232+
*/
219233
func EwPOSTNoContent[Req any](w *EchoWrapper, path string, h func(ctx echo.Context, req Req) error, desc Desc, m ...echo.MiddlewareFunc) *echo.Route {
220234
var req Req
221235
return w.POSTTyped(path, makeHandlerNoContent(h), desc, req, nil, m...)
222236
}
223237

224-
// 詳細についてはEwGETを見よ
225-
// 返すべきresponseがないケースでは、EwPUTNoContentを使うこと
238+
/*
239+
func(echo.Context, Req) (Resp, error)の型をもつhandlerを受け取り、PUTのAPIを生やす。RequestはJSONとしてBindする。Responseはstatusとして200、bodyとしてJSONで返す。
240+
241+
Requestを受け取らないケースでは EwPUTNoRequest を使い、Responseを返さないケースでは EwPUTNoContent を使うこと。
242+
*/
226243
func EwPUT[Req any, Resp any](w *EchoWrapper, path string, h func(ctx echo.Context, req Req) (Resp, error), desc Desc, m ...echo.MiddlewareFunc) *echo.Route {
227244
var req Req
228245
var resp Resp
229246
return w.PUTTyped(path, makeHandler(h), desc, req, resp, m...)
230247
}
231248

232-
// 詳細についてはEwGETを見よ
249+
/*
250+
func(echo.Context) (Resp, error)の型をもつhandlerを受け取り、PUTのAPIを生やす。Responseはstatusとして200、bodyとしてJSONで返す。
251+
*/
252+
func EwPUTNoRequest[Resp any](w *EchoWrapper, path string, h func(ctx echo.Context) (Resp, error), desc Desc, m ...echo.MiddlewareFunc) *echo.Route {
253+
var resp Resp
254+
return w.PUTTyped(path, makeHandlerNoRequest(h), desc, nil, resp, m...)
255+
}
256+
257+
/*
258+
func(echo.Context, Req) errorの型をもつhandlerを受け取り、PUTのAPIを生やす。RequestはJSONとしてBindする。Responseはstatusとして204を返す。
259+
*/
233260
func EwPUTNoContent[Req any](w *EchoWrapper, path string, h func(ctx echo.Context, req Req) error, desc Desc, m ...echo.MiddlewareFunc) *echo.Route {
234261
var req Req
235262
return w.PUTTyped(path, makeHandlerNoContent(h), desc, req, nil, m...)
236263
}
237264

238-
// 詳細についてはEwGETを見よ
265+
/*
266+
func(echo.Context, Req) (Resp, error)の型をもつhandlerを受け取り、PATCHのAPIを生やす。RequestはJSONとしてBindする。Responseはstatusとして200、bodyとしてJSONで返す。
267+
268+
Requestを受け取らないケースでは EwPATCHNoRequest を使い、Responseを返さないケースでは EwPATCHNoContent を使うこと。
269+
*/
239270
func EwPATCH[Req any, Resp any](w *EchoWrapper, path string, h func(ctx echo.Context, req Req) (Resp, error), desc Desc, m ...echo.MiddlewareFunc) *echo.Route {
240271
var req Req
241272
var resp Resp
242273
return w.PATCHTyped(path, makeHandler(h), desc, req, resp, m...)
243274
}
244275

245-
// 詳細についてはEwGETを見よ
276+
/*
277+
func(echo.Context) (Resp, error)の型をもつhandlerを受け取り、PATCHのAPIを生やす。Responseはstatusとして200、bodyとしてJSONで返す。
278+
*/
279+
func EwPATCHNoRequest[Resp any](w *EchoWrapper, path string, h func(ctx echo.Context) (Resp, error), desc Desc, m ...echo.MiddlewareFunc) *echo.Route {
280+
var resp Resp
281+
return w.PATCHTyped(path, makeHandlerNoRequest(h), desc, nil, resp, m...)
282+
}
283+
284+
/*
285+
func(echo.Context, Req) errorの型をもつhandlerを受け取り、PATCHのAPIを生やす。RequestはJSONとしてBindする。Responseはstatusとして204を返す。
286+
*/
246287
func EwPATCHNoContent[Req any](w *EchoWrapper, path string, h func(ctx echo.Context, req Req) error, desc Desc, m ...echo.MiddlewareFunc) *echo.Route {
247288
var req Req
248289
return w.PATCHTyped(path, makeHandlerNoContent(h), desc, req, nil, m...)
249290
}
250291

251-
// 詳細についてはEwGETを見よ
252-
func EwDELETE[Resp any](w *EchoWrapper, path string, h func(ctx echo.Context) (Resp, error), desc Desc, m ...echo.MiddlewareFunc) *echo.Route {
292+
/*
293+
func(echo.Context) (Resp, error)の型をもつhandlerを受け取り、DELETEのAPIを生やす。Responseはstatusとして200、bodyとしてJSONで返す。
294+
295+
Requestを受け取らないケースでは EwDELETENoRequest を使い、Responseを返さないケースでは EwDELETENoContent を使うこと。
296+
*/
297+
func EwDELETE[Req any, Resp any](w *EchoWrapper, path string, h func(ctx echo.Context, req Req) (Resp, error), desc Desc, m ...echo.MiddlewareFunc) *echo.Route {
298+
var req Req
299+
var resp Resp
300+
return w.DELETETyped(path, makeHandler(h), desc, req, resp, m...)
301+
}
302+
303+
/*
304+
func(echo.Context) (Resp, error)の型をもつhandlerを受け取り、DELETEのAPIを生やす。Responseはstatusとして200、bodyとしてJSONで返す。
305+
*/
306+
func EwDELETENoRequest[Resp any](w *EchoWrapper, path string, h func(ctx echo.Context) (Resp, error), desc Desc, m ...echo.MiddlewareFunc) *echo.Route {
253307
var resp Resp
254-
return w.DELETETyped(path, makeHandlerNoRequest(h), desc, resp, m...)
308+
return w.DELETETyped(path, makeHandlerNoRequest(h), desc, nil, resp, m...)
255309
}
256310

257-
// 詳細についてはEwGETを見よ
311+
/*
312+
func(echo.Context, Req) errorの型をもつhandlerを受け取り、DELETEのAPIを生やす。RequestはJSONとしてBindする。Responseはstatusとして204を返す。
313+
*/
258314
func EwDELETENoContent[Req any](w *EchoWrapper, path string, h func(ctx echo.Context, req Req) error, desc Desc, m ...echo.MiddlewareFunc) *echo.Route {
259-
return w.DELETETyped(path, makeHandlerNoContent(h), desc, nil, m...)
315+
var req Req
316+
return w.DELETETyped(path, makeHandlerNoContent(h), desc, req, nil, m...)
260317
}
261318

262319
func (w *EchoWrapper) Group(prefix string, m ...echo.MiddlewareFunc) *GroupWrapper {
@@ -359,58 +416,144 @@ func (g *GroupWrapper) DELETETyped(path string, h echo.HandlerFunc, desc Desc, r
359416
return g.Group.DELETE(path, h, m...)
360417
}
361418

362-
// 詳細についてはEwGETを見よ
419+
/*
420+
EwGET のGroup版
421+
422+
func(echo.Context) (Resp, error)の型をもつhandlerを受け取り、GETのAPIを生やす。Responseはstatusとして200、bodyとしてJSONで返す。
423+
424+
NOTE: Go1.20時点では、メソッドがtype parameterをもてないので関数として定義されている
425+
*/
363426
func GwGET[Resp any](g *GroupWrapper, path string, h func(ctx echo.Context) (Resp, error), desc Desc, m ...echo.MiddlewareFunc) *echo.Route {
364427
var resp Resp
365428
return g.GETTyped(path, makeHandlerNoRequest(h), desc, resp, m...)
366429
}
367430

368-
// 詳細についてはEwGETを見よ
431+
/*
432+
EwPOST のGroup版
433+
434+
func(echo.Context, Req) (Resp, error)の型をもつhandlerを受け取り、POSTのAPIを生やす。RequestはJSONとしてBindする。Responseはstatusとして200、bodyとしてJSONで返す。
435+
436+
Requestを受け取らないケースでは GwPOSTNoRequest を使い、Responseを返さないケースでは GwPOSTNoContent を使うこと。
437+
*/
369438
func GwPOST[Req any, Resp any](g *GroupWrapper, path string, h func(ctx echo.Context, req Req) (Resp, error), desc Desc, m ...echo.MiddlewareFunc) *echo.Route {
370439
var req Req
371440
var resp Resp
372441
return g.POSTTyped(path, makeHandler(h), desc, req, resp, m...)
373442
}
374443

375-
// 詳細についてはEwGETを見よ
444+
/*
445+
EwPOSTNoRequest のGroup版
446+
447+
func(echo.Context) (Resp, error)の型をもつhandlerを受け取り、POSTのAPIを生やす。Responseはstatusとして200、bodyとしてJSONで返す。
448+
*/
449+
func GwPOSTNoRequest[Resp any](g *GroupWrapper, path string, h func(ctx echo.Context) (Resp, error), desc Desc, m ...echo.MiddlewareFunc) *echo.Route {
450+
var resp Resp
451+
return g.POSTTyped(path, makeHandlerNoRequest(h), desc, nil, resp, m...)
452+
}
453+
454+
/*
455+
EwPOSTNoContent のGroup版
456+
457+
func(echo.Context, Req) errorの型をもつhandlerを受け取り、POSTのAPIを生やす。RequestはJSONとしてBindする。Responseはstatusとして204を返す。
458+
*/
376459
func GwPOSTNoContent[Req any](g *GroupWrapper, path string, h func(ctx echo.Context, req Req) error, desc Desc, m ...echo.MiddlewareFunc) *echo.Route {
377460
var req Req
378461
return g.POSTTyped(path, makeHandlerNoContent(h), desc, req, nil, m...)
379462
}
380463

381-
// 詳細についてはEwGETを見よ
464+
/*
465+
EwPUT のGroup版
466+
467+
func(echo.Context, Req) (Resp, error)の型をもつhandlerを受け取り、PUTのAPIを生やす。RequestはJSONとしてBindする。Responseはstatusとして200、bodyとしてJSONで返す。
468+
469+
Requestを受け取らないケースでは GwPUTNoRequest を使い、Responseを返さないケースでは GwPUTNoContent を使うこと。
470+
*/
382471
func GwPUT[Req any, Resp any](g *GroupWrapper, path string, h func(ctx echo.Context, req Req) (Resp, error), desc Desc, m ...echo.MiddlewareFunc) *echo.Route {
383472
var req Req
384473
var resp Resp
385474
return g.PUTTyped(path, makeHandler(h), desc, req, resp, m...)
386475
}
387476

388-
// 詳細についてはEwGETを見よ
477+
/*
478+
EwPUTNoRequest のGroup版
479+
480+
func(echo.Context) (Resp, error)の型をもつhandlerを受け取り、PUTのAPIを生やす。Responseはstatusとして200、bodyとしてJSONで返す。
481+
*/
482+
func GwPUTNoRequest[Resp any](g *GroupWrapper, path string, h func(ctx echo.Context) (Resp, error), desc Desc, m ...echo.MiddlewareFunc) *echo.Route {
483+
var resp Resp
484+
return g.PUTTyped(path, makeHandlerNoRequest(h), desc, nil, resp, m...)
485+
}
486+
487+
/*
488+
EwPUTNoContent のGroup版
489+
490+
func(echo.Context, Req) errorの型をもつhandlerを受け取り、PUTのAPIを生やす。RequestはJSONとしてBindする。Responseはstatusとして204を返す。
491+
*/
389492
func GwPUTNoContent[Req any](g *GroupWrapper, path string, h func(ctx echo.Context, req Req) error, desc Desc, m ...echo.MiddlewareFunc) *echo.Route {
390493
var req Req
391494
return g.PUTTyped(path, makeHandlerNoContent(h), desc, req, nil, m...)
392495
}
393496

394-
// 詳細についてはEwGETを見よ
497+
/*
498+
EwPATCH のGroup版
499+
500+
func(echo.Context, Req) (Resp, error)の型をもつhandlerを受け取り、PATCHのAPIを生やす。RequestはJSONとしてBindする。Responseはstatusとして200、bodyとしてJSONで返す。
501+
502+
Requestを受け取らないケースでは GwPATCHNoRequest を使い、Responseを返さないケースでは GwPATCHNoContent を使うこと。
503+
*/
395504
func GwPATCH[Req any, Resp any](g *GroupWrapper, path string, h func(ctx echo.Context, req Req) (Resp, error), desc Desc, m ...echo.MiddlewareFunc) *echo.Route {
396505
var req Req
397506
var resp Resp
398507
return g.PATCHTyped(path, makeHandler(h), desc, req, resp, m...)
399508
}
400509

401-
// 詳細についてはEwGETを見よ
510+
/*
511+
EwPATCHNoRequest のGroup版
512+
513+
func(echo.Context) (Resp, error)の型をもつhandlerを受け取り、PATCHのAPIを生やす。Responseはstatusとして200、bodyとしてJSONで返す。
514+
*/
515+
func GwPATCHNoRequest[Resp any](g *GroupWrapper, path string, h func(ctx echo.Context) (Resp, error), desc Desc, m ...echo.MiddlewareFunc) *echo.Route {
516+
var resp Resp
517+
return g.PATCHTyped(path, makeHandlerNoRequest(h), desc, nil, resp, m...)
518+
}
519+
520+
/*
521+
EwPATCHNoContent のGroup版
522+
523+
func(echo.Context, Req) errorの型をもつhandlerを受け取り、PATCHのAPIを生やす。RequestはJSONとしてBindする。Responseはstatusとして204を返す。
524+
*/
402525
func GwPATCHNoContent[Req any](g *GroupWrapper, path string, h func(ctx echo.Context, req Req) error, desc Desc, m ...echo.MiddlewareFunc) *echo.Route {
403526
var req Req
404527
return g.PATCHTyped(path, makeHandlerNoContent(h), desc, req, nil, m...)
405528
}
406529

407-
// 詳細についてはEwGETを見よ
530+
/*
531+
EwDELETE のGroup版
532+
533+
func(echo.Context, Req) (Resp, error)の型をもつhandlerを受け取り、DELETEのAPIを生やす。RequestはJSONとしてBindする。Responseはstatusとして200、bodyとしてJSONで返す。
534+
535+
Requestを受け取らないケースでは GwDELETENoRequest を使い、Responseを返さないケースでは GwDELETENoContent を使うこと。
536+
*/
408537
func GwDELETE[Resp any](g *GroupWrapper, path string, h func(ctx echo.Context) (Resp, error), desc Desc, m ...echo.MiddlewareFunc) *echo.Route {
409538
var resp Resp
410539
return g.DELETETyped(path, makeHandlerNoRequest(h), desc, resp, m...)
411540
}
412541

413-
// 詳細についてはEwGETを見よ
542+
/*
543+
EwDELETENoRequest のGroup版
544+
545+
func(echo.Context) (Resp, error)の型をもつhandlerを受け取り、DELETEのAPIを生やす。Responseはstatusとして200、bodyとしてJSONで返す。
546+
*/
547+
func GwDELETENoRequest[Resp any](g *GroupWrapper, path string, h func(ctx echo.Context) (Resp, error), desc Desc, m ...echo.MiddlewareFunc) *echo.Route {
548+
var resp Resp
549+
return g.DELETETyped(path, makeHandlerNoRequest(h), desc, resp, m...)
550+
}
551+
552+
/*
553+
EwDELETENoContent のGroup版
554+
555+
func(echo.Context, Req) errorの型をもつhandlerを受け取り、DELETEのAPIを生やす。RequestはJSONとしてBindする。Responseはstatusとして204を返す。
556+
*/
414557
func GwDELETENoContent[Req any](g *GroupWrapper, path string, h func(ctx echo.Context, req Req) error, desc Desc, m ...echo.MiddlewareFunc) *echo.Route {
415558
return g.DELETETyped(path, makeHandlerNoContent(h), desc, nil, m...)
416559
}

0 commit comments

Comments
 (0)