github.com/alimy/mir/v4@v4.1.0/internal/generator/templates/echo_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 }}echo "{{ .EngineInfo.PkgName }}{{else}}"github.com/labstack/echo/v4{{end}}" 12 {{ declareImports .Imports }} 13 ) 14 {{- if .DeclareCoreInterface }} 15 type _binding_ interface { 16 Bind(echo.Context) mir.Error 17 } 18 19 type _render_ interface { 20 Render(echo.Context) 21 } 22 23 type _default_ interface { 24 Bind(echo.Context, any) mir.Error 25 Render(echo.Context, 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 handlers chain for echo 36 {{.Chain}}() []echo.MiddlewareFunc 37 {{end}} 38 {{range .Fields}} {{if .JustUseContext }}{{ .MethodName}}(echo.Context) error{{else}}{{.MethodName}}({{if .IsUseContext }}echo.Context{{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 {{if .IsUseFieldChain }} 44 type {{.TypeName}}Chain interface { 45 {{range .ChainFields }} Chain{{.MethodName}}() []echo.MiddlewareFunc 46 {{end}} 47 48 mustEmbedUnimplemented{{.TypeName}}Chain() 49 } 50 {{end}} 51 52 // Register{{.TypeName}}Servant register {{.TypeName}} servant to echo 53 func Register{{.TypeName}}Servant(e *echo.Echo, s {{.TypeName}}{{if .IsUseFieldChain }}, m ...{{.TypeName}}Chain{{end}}) { 54 {{- if .IsUseFieldChain -}} 55 var cc {{.TypeName}}Chain 56 if len(m) > 0 { 57 cc = m[0] 58 } else { 59 cc = &Unimplemented{{.TypeName}}Chain{} 60 } 61 {{- end}} 62 {{if notEmptyStr .Group }} router := e.Group("{{.Group}}"){{else}} router := e{{end}} 63 {{if notEmptyStr .Chain }} // use chain for router 64 middlewares := s.{{.Chain}}() 65 router.Use(middlewares...) 66 {{end}} 67 // register routes info to router 68 {{range .Fields}}{{if .NotHttpAny }} router.Add("{{.HttpMethod}}", "{{.Path}}", {{if .JustUseContext}}s.{{ .MethodName}}{{else}}func(c echo.Context) error { 69 {{- if $.WatchCtxDone }} 70 ctx := c.Request().Context() 71 select { 72 case <-ctx.Done(): 73 return ctx.Err() 74 default: 75 } 76 {{end -}} 77 {{if notEmptyStr .InName -}} 78 req := new({{.InName}}) 79 {{if .IsBindIn -}} 80 var bv _binding_ = req 81 if err := bv.Bind(c); err != nil { 82 {{- else -}} 83 if err := s.Bind(c, req); err != nil { 84 {{- end }} 85 s.Render(c, nil, err) 86 return err 87 } 88 {{- end }} 89 {{if notEmptyStr .OutName -}} 90 resp, err := s.{{ .MethodName}}({{if .IsUseContext }}c{{if notEmptyStr .InName }}, {{end}}{{end}}{{if notEmptyStr .InName}}req{{end}}) 91 {{if .IsRenderOut -}} 92 if err != nil { 93 s.Render(c, nil, err) 94 return err 95 } 96 var rv _render_ = resp 97 rv.Render(c) 98 {{- else -}} 99 s.Render(c, resp, err) 100 {{- end }} 101 {{- else -}} 102 s.Render(c, nil, s.{{.MethodName}}({{if .IsUseContext }}c{{if notEmptyStr .InName }}, {{end}}{{end}}{{if notEmptyStr .InName}}req{{end}})) 103 {{- end }} 104 return nil 105 }{{end}}{{if .IsFieldChain }}, cc.Chain{{.MethodName}}()...{{end}}) 106 {{else if .JustHttpAny}} router.Any("{{.Path}}", {{if .JustUseContext}}s.{{ .MethodName}}{{else}}func(c echo.Context) error { 107 {{- if $.WatchCtxDone }} 108 ctx := c.Request().Context() 109 select { 110 case <-ctx.Done(): 111 return ctx.Err() 112 default: 113 } 114 {{end -}} 115 {{if notEmptyStr .InName -}} 116 req := new({{.InName}}) 117 {{if .IsBindIn -}} 118 var bv _binding_ = req 119 if err := bv.Bind(c); err != nil { 120 {{- else -}} 121 if err := s.Bind(c, req); err != nil { 122 {{- end }} 123 s.Render(c, nil, err) 124 return err 125 } 126 {{- end }} 127 {{if notEmptyStr .OutName -}} 128 resp, err := s.{{ .MethodName}}({{if .IsUseContext }}c{{if notEmptyStr .InName }}, {{end}}{{end}}{{if notEmptyStr .InName}}req{{end}}) 129 {{if .IsRenderOut -}} 130 if err != nil { 131 s.Render(c, nil, err) 132 return err 133 } 134 var rv _render_ = resp 135 rv.Render(c) 136 {{- else -}} 137 s.Render(c, resp, err) 138 {{- end }} 139 {{- else -}} 140 s.Render(c, nil, s.{{.MethodName}}({{if .IsUseContext }}c{{if notEmptyStr .InName }}, {{end}}{{end}}{{if notEmptyStr .InName}}req{{end}})) 141 {{- end }} 142 return nil 143 }{{end}}{{if .IsFieldChain }}, cc.Chain{{.MethodName}}()...{{end}}) 144 {{else}}{{$field := .}} { 145 h := {{if .JustUseContext}}s.{{ .MethodName}}{{else}}func(c echo.Context) error { 146 {{- if $.WatchCtxDone }} 147 ctx := c.Request().Context() 148 select { 149 case <-ctx.Done(): 150 return ctx.Err() 151 default: 152 } 153 {{end -}} 154 {{if notEmptyStr .InName -}} 155 req := new({{.InName}}) 156 {{if .IsBindIn -}} 157 var bv _binding_ = req 158 if err := bv.Bind(c); err != nil { 159 {{- else -}} 160 if err := s.Bind(c, req); err != nil { 161 {{- end }} 162 s.Render(c, nil, err) 163 return err 164 } 165 {{- end }} 166 {{if notEmptyStr .OutName -}} 167 resp, err := s.{{ .MethodName}}({{if .IsUseContext }}c{{if notEmptyStr .InName }}, {{end}}{{end}}{{if notEmptyStr .InName}}req{{end}}) 168 {{if .IsRenderOut -}} 169 if err != nil { 170 s.Render(c, nil, err) 171 return err 172 } 173 var rv _render_ = resp 174 rv.Render(c) 175 {{- else -}} 176 s.Render(c, resp, err) 177 {{- end }} 178 {{- else -}} 179 s.Render(c, nil, s.{{.MethodName}}({{if .IsUseContext }}c{{if notEmptyStr .InName }}, {{end}}{{end}}{{if notEmptyStr .InName}}req{{end}})) 180 {{- end }} 181 return nil 182 }{{end}} 183 {{range .AnyHttpMethods}} router.Add("{{.}}", "{{$field.Path}}", h{{if $field.IsFieldChain }}, cc.Chain{{$field.MethodName}}()...{{end}}) 184 {{end}} } 185 {{end}} 186 {{- end -}} 187 } 188 189 {{ $unimplementedServant := print "Unimplemented" .TypeName "Servant" }} 190 // {{$unimplementedServant}} can be embedded to have forward compatible implementations. 191 type {{$unimplementedServant}} struct {} 192 193 {{if notEmptyStr .Chain }} 194 func ({{$unimplementedServant}}){{.Chain}}() []echo.MiddlewareFunc { 195 return nil 196 } 197 198 {{end}} 199 {{range .Fields}} 200 func ({{$unimplementedServant}}){{if .JustUseContext }}{{ .MethodName}}(c echo.Context) error{{else}}{{.MethodName}}({{if .IsUseContext }}c echo.Context{{if notEmptyStr .InName }}, {{end}}{{end}}{{if notEmptyStr .InName }}req *{{ .InName }}{{end}}) {{if notEmptyStr .OutName }}(*{{ .OutName}}, mir.Error){{else}}mir.Error{{end}}{{end}} { 201 {{if .JustUseContext -}} 202 return c.String(http.StatusNotImplemented, "method not implemented") 203 {{else -}} 204 return {{if notEmptyStr .OutName }}nil, {{end}}mir.Errorln(http.StatusNotImplemented, http.StatusText(http.StatusNotImplemented)) 205 {{end -}} 206 } 207 208 {{end}} 209 func ({{$unimplementedServant}})mustEmbedUnimplemented{{.TypeName}}Servant() {} 210 {{if .IsUseFieldChain }} 211 {{ $unimplementedChain := print "Unimplemented" .TypeName "Chain" }} 212 // {{$unimplementedChain}} can be embedded to have forward compatible implementations. 213 type {{$unimplementedChain}} struct {} 214 215 {{range .Fields}}{{if .IsFieldChain }}func (b *{{$unimplementedChain}}) Chain{{.MethodName}}() []echo.MiddlewareFunc { 216 return nil 217 } 218 {{end}} 219 {{end}} 220 func (b *{{$unimplementedChain}})mustEmbedUnimplemented{{.TypeName}}Chain() {} 221 {{end}}