github.com/alimy/mir/v4@v4.1.0/internal/generator/templates/httprouter_iface.tmpl (about) 1 // Code generated by go-mir. DO NOT EDIT. 2 // versions: 3 // - mir {{ .VerInfo.MirVer }} 4 5 package {{ .PkgName }} 6 7 import ( 8 "net/http" 9 10 "github.com/alimy/mir/v4" 11 {{if notEmptyStr .EngineInfo.PkgName }}httprouter "{{ .EngineInfo.PkgName }}{{else}}"github.com/julienschmidt/httprouter{{end}}" 12 {{ declareImports .Imports }} 13 ) 14 {{- if .DeclareCoreInterface }} 15 type _binding_ interface { 16 Bind(*http.Request, httprouter.Params) mir.Error 17 } 18 19 type _render_ interface { 20 Render(http.ResponseWriter) 21 } 22 23 type _default_ interface { 24 Bind(*http.Request, httprouter.Params, any) mir.Error 25 Render(http.ResponseWriter, any, mir.Error) 26 } 27 {{- end }} 28 29 {{ declareTypes .InOuts .PkgPath .Imports }} 30 31 {{if notEmptyStr .Comment }}// {{.Comment}}{{end}} 32 type {{.TypeName}} interface { 33 _default_ 34 35 {{range .Fields}} {{if .JustUseContext }}{{ .MethodName}}(http.ResponseWriter, *http.Request, httprouter.Params){{else}}{{.MethodName}}({{if .IsUseContext }}http.ResponseWriter, *http.Request, httprouter.Params{{if notEmptyStr .InName }}, {{end}}{{end}}{{if notEmptyStr .InName }}*{{ .InName }}{{end}}) {{if notEmptyStr .OutName }}(*{{ .OutName}}, mir.Error){{else}}mir.Error{{end}}{{end}} 36 {{end}} 37 38 mustEmbedUnimplemented{{.TypeName}}Servant() 39 } 40 41 // Register{{.TypeName}}Servant register {{.TypeName}} servant to httprouter 42 func Register{{.TypeName}}Servant(router *httprouter.Router, s {{.TypeName}}) { 43 {{range .Fields}}{{if .NotHttpAny }} router.Handle("{{.HttpMethod}}", "{{joinPath $.Group .Path}}", {{if .JustUseContext}}s.{{ .MethodName}}{{else}}func(rw http.ResponseWriter, hr *http.Request, p httprouter.Params) { 44 {{- if $.WatchCtxDone }} 45 select { 46 case <-hr.Context().Done(): 47 return 48 default: 49 } 50 {{end -}} 51 {{if notEmptyStr .InName -}} 52 req := new({{.InName}}) 53 {{if .IsBindIn -}} 54 var bv _binding_ = req 55 if err := bv.Bind(hr, p); err != nil { 56 {{- else -}} 57 if err := s.Bind(hr, p, req); err != nil { 58 {{- end }} 59 s.Render(rw, nil, err) 60 return 61 } 62 {{- end }} 63 {{if notEmptyStr .OutName -}} 64 resp, err := s.{{ .MethodName}}({{if .IsUseContext }}rw, hr, p{{if notEmptyStr .InName }}, {{end}}{{end}}{{if notEmptyStr .InName}}req{{end}}) 65 {{if .IsRenderOut -}} 66 if err != nil { 67 s.Render(rw, nil, err) 68 return 69 } 70 var rv _render_ = resp 71 rv.Render(rw) 72 {{- else -}} 73 s.Render(rw, resp, err) 74 {{- end }} 75 {{- else -}} 76 s.Render(rw, nil, s.{{.MethodName}}({{if .IsUseContext }}rw, hr, p{{if notEmptyStr .InName }}, {{end}}{{end}}{{if notEmptyStr .InName}}req{{end}})) 77 {{- end }} 78 }{{end}}) 79 {{else}}{{$field := .}} { 80 h := {{if .JustUseContext}}s.{{ .MethodName}}{{else}}func(rw http.ResponseWriter, hr *http.Request, p httprouter.Params) { 81 {{- if $.WatchCtxDone }} 82 select { 83 case <-hr.Context().Done(): 84 return 85 default: 86 } 87 {{end -}} 88 {{if notEmptyStr .InName -}} 89 req := new({{.InName}}) 90 {{if .IsBindIn -}} 91 var bv _binding_ = req 92 if err := bv.Bind(hr, p); err != nil { 93 {{- else -}} 94 if err := s.Bind(hr, p, req); err != nil { 95 {{- end }} 96 s.Render(rw, nil, err) 97 return 98 } 99 {{- end }} 100 {{if notEmptyStr .OutName -}} 101 resp, err := s.{{ .MethodName}}({{if .IsUseContext }}rw, hr, p{{if notEmptyStr .InName }}, {{end}}{{end}}{{if notEmptyStr .InName}}req{{end}}) 102 {{if .IsRenderOut -}} 103 if err != nil { 104 s.Render(rw, nil, err) 105 return 106 } 107 var rv _render_ = resp 108 rv.Render(rw) 109 {{- else -}} 110 s.Render(rw, resp, err) 111 {{- end }} 112 {{- else -}} 113 s.Render(rw, nil, s.{{.MethodName}}({{if .IsUseContext }}rw, hr, p{{if notEmptyStr .InName }}, {{end}}{{end}}{{if notEmptyStr .InName}}req{{end}})) 114 {{- end }} 115 }{{end}} 116 {{range .AnyHttpMethods}} router.Handle("{{.}}", "{{joinPath $.Group $field.Path}}", h) 117 {{end}} } 118 {{end}} 119 {{- end -}} 120 } 121 122 {{ $unimplementedServant := print "Unimplemented" .TypeName "Servant" }} 123 // {{$unimplementedServant}} can be embedded to have forward compatible implementations. 124 type {{$unimplementedServant}} struct {} 125 126 {{range .Fields}} 127 func ({{$unimplementedServant}}){{if .JustUseContext }}{{ .MethodName}}(rw http.ResponseWriter, hr *http.Request, p httprouter.Params){{else}}{{.MethodName}}({{if .IsUseContext }}rw http.ResponseWriter, hr *http.Request, p httprouter.Params{{if notEmptyStr .InName }}, {{end}}{{end}}{{if notEmptyStr .InName }}req *{{ .InName }}{{end}}) {{if notEmptyStr .OutName }}(*{{ .OutName}}, mir.Error){{else}}mir.Error{{end}}{{end}} { 128 {{if .JustUseContext -}} 129 rw.WriteHeader(http.StatusNotImplemented) 130 rw.Write([]byte("method not implemented")) 131 {{else -}} 132 return {{if notEmptyStr .OutName }}nil, {{end}}mir.Errorln(http.StatusNotImplemented, http.StatusText(http.StatusNotImplemented)) 133 {{end -}} 134 } 135 136 {{end}} 137 func ({{$unimplementedServant}})mustEmbedUnimplemented{{.TypeName}}Servant() {}