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