github.com/alimy/mir/v4@v4.1.0/internal/generator/templates/mux_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 }}mux "{{ .EngineInfo.PkgName }}{{else}}"github.com/gorilla/mux{{end}}" 12 {{ declareImports .Imports }} 13 ) 14 {{- if .DeclareCoreInterface }} 15 type _binding_ interface { 16 Bind(*http.Request) mir.Error 17 } 18 19 type _render_ interface { 20 Render(http.ResponseWriter) 21 } 22 23 type _default_ interface { 24 Bind(*http.Request, 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 {{if notEmptyStr .Chain }} // Chain provide middlewares for mux 36 {{.Chain}}() []mux.MiddlewareFunc 37 {{end}} 38 {{range .Fields}} {{if .JustUseContext }}{{ .MethodName}}(http.ResponseWriter, *http.Request){{else}}{{.MethodName}}({{if .IsUseContext }}http.ResponseWriter, *http.Request{{if notEmptyStr .InName }}, {{end}}{{end}}{{if notEmptyStr .InName }}*{{ .InName }}{{end}}) {{if notEmptyStr .OutName }}(*{{ .OutName}}, mir.Error){{else}}mir.Error{{end}}{{end}} 39 {{end}} 40 41 mustEmbedUnimplemented{{.TypeName}}Servant() 42 } 43 44 // Register{{.TypeName}}Servant register {{.TypeName}} servant to mux 45 func Register{{.TypeName}}Servant(e *mux.Router, s {{.TypeName}}) { 46 {{if notEmptyStr .Group }} router := e.PathPrefix("{{.Group}}").Subrouter(){{else}} router := e 47 {{end}} 48 {{if notEmptyStr .Chain }} // use chain for router 49 middlewares := s.{{.Chain}}() 50 router.Use(middlewares...) 51 {{end}} 52 53 // register routes info to router 54 {{range .Fields}} 55 {{if .NotHttpAny }} router.HandleFunc("{{.Path}}", {{if .JustUseContext}}s.{{ .MethodName}}{{else}}func(rw http.ResponseWriter, hr *http.Request) { 56 {{- if $.WatchCtxDone }} 57 select { 58 case <-hr.Context().Done(): 59 return 60 default: 61 } 62 {{end -}} 63 {{if notEmptyStr .InName -}} 64 req := new({{.InName}}) 65 {{if .IsBindIn -}} 66 var bv _binding_ = req 67 if err := bv.Bind(hr); err != nil { 68 {{- else -}} 69 if err := s.Bind(hr, req); err != nil { 70 {{- end }} 71 s.Render(rw, nil, err) 72 return 73 } 74 {{- end }} 75 {{if notEmptyStr .OutName -}} 76 resp, err := s.{{ .MethodName}}({{if .IsUseContext }}rw, hr{{if notEmptyStr .InName }}, {{end}}{{end}}{{if notEmptyStr .InName}}req{{end}}) 77 {{if .IsRenderOut -}} 78 if err != nil { 79 s.Render(rw, nil, err) 80 return 81 } 82 var rv _render_ = resp 83 rv.Render(rw) 84 {{- else -}} 85 s.Render(rw, resp, err) 86 {{- end }} 87 {{- else -}} 88 s.Render(rw, nil, s.{{.MethodName}}({{if .IsUseContext }}rw, hr{{if notEmptyStr .InName }}, {{end}}{{end}}{{if notEmptyStr .InName}}req{{end}})) 89 {{- end }} 90 }{{end}}).Methods("{{.HttpMethod}}"){{if notEmptyStr .Host}}. 91 Host("{{.Host}}"){{end}}{{if valideQuery .Queries}}. 92 Queries({{inflateQuery .Queries}}){{end}}{{else}} router.HandleFunc("{{.Path}}", {{if .JustUseContext}}s.{{ .MethodName}}{{else}}func(rw http.ResponseWriter, hr *http.Request) { 93 {{- if $.WatchCtxDone }} 94 select { 95 case <-hr.Context().Done(): 96 return 97 default: 98 } 99 {{end -}} 100 {{if notEmptyStr .InName -}} 101 req := new({{.InName}}) 102 {{if .IsBindIn -}} 103 var bv _binding_ = req 104 if err := bv.Bind(hr); err != nil { 105 {{- else -}} 106 if err := s.Bind(hr, req); err != nil { 107 {{- end }} 108 s.Render(rw, nil, err) 109 return 110 } 111 {{- end }} 112 {{if notEmptyStr .OutName -}} 113 resp, err := s.{{ .MethodName}}({{if .IsUseContext }}rw, hr{{if notEmptyStr .InName }}, {{end}}{{end}}{{if notEmptyStr .InName}}req{{end}}) 114 {{if .IsRenderOut -}} 115 if err != nil { 116 s.Render(rw, nil, err) 117 return 118 } 119 var rv _render_ = resp 120 rv.Render(rw) 121 {{- else -}} 122 s.Render(rw, resp, err) 123 {{- end }} 124 {{- else -}} 125 s.Render(rw, nil, s.{{.MethodName}}({{if .IsUseContext }}rw, hr{{if notEmptyStr .InName }}, {{end}}{{end}}{{if notEmptyStr .InName}}req{{end}})) 126 {{- end }} 127 }{{end}}).Methods({{.HttpMethodArgs}}){{if notEmptyStr .Host}}. 128 Host("{{.Host}}"){{end}}{{if valideQuery .Queries}}. 129 Queries({{inflateQuery .Queries}}){{end}}{{end}} 130 {{- end -}} 131 } 132 133 {{ $unimplementedServant := print "Unimplemented" .TypeName "Servant" }} 134 // {{$unimplementedServant}} can be embedded to have forward compatible implementations. 135 type {{$unimplementedServant}} struct {} 136 137 {{if notEmptyStr .Chain }} 138 func ({{$unimplementedServant}}){{.Chain}}() []mux.MiddlewareFunc { 139 return nil 140 } 141 142 {{end}} 143 {{range .Fields}} 144 func ({{$unimplementedServant}}){{if .JustUseContext }}{{ .MethodName}}(rw http.ResponseWriter, hr *http.Request){{else}}{{.MethodName}}({{if .IsUseContext }}rw http.ResponseWriter, hr *http.Request{{if notEmptyStr .InName }}, {{end}}{{end}}{{if notEmptyStr .InName }}req *{{ .InName }}{{end}}) {{if notEmptyStr .OutName }}(*{{ .OutName}}, mir.Error){{else}}mir.Error{{end}}{{end}} { 145 {{if .JustUseContext -}} 146 rw.WriteHeader(http.StatusNotImplemented) 147 rw.Write([]byte("method not implemented")) 148 {{else -}} 149 return {{if notEmptyStr .OutName }}nil, {{end}}mir.Errorln(http.StatusNotImplemented, http.StatusText(http.StatusNotImplemented)) 150 {{end -}} 151 } 152 153 {{end}} 154 func ({{$unimplementedServant}})mustEmbedUnimplemented{{.TypeName}}Servant() {} 155