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