github.com/alimy/mir/v4@v4.1.0/internal/generator/templates/fiber_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 }}fiber "{{ .EngineInfo.PkgName }}{{else}}"github.com/gofiber/fiber/v2{{end}}" 12 {{if notEmptyStr .Chain }}"github.com/gofiber/fiber/v2/middleware/logger"{{end}} 13 {{ declareImports .Imports }} 14 ) 15 {{- if .DeclareCoreInterface }} 16 type _binding_ interface { 17 Bind(*fiber.Ctx) mir.Error 18 } 19 20 type _render_ interface { 21 Render(*fiber.Ctx) 22 } 23 24 type _default_ interface { 25 Bind(*fiber.Ctx, any) mir.Error 26 Render(*fiber.Ctx, 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 fiber 37 {{.Chain}}() []any 38 {{end}} 39 {{range .Fields}} {{if .JustUseContext }}{{ .MethodName}}(*fiber.Ctx) error{{else}}{{.MethodName}}({{if .IsUseContext }}*fiber.Ctx{{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 45 // Register{{.TypeName}}Servant register {{.TypeName}} servant to fiber 46 func Register{{.TypeName}}Servant(app *fiber.App, s {{.TypeName}}) { 47 {{if notEmptyStr .Group }} router := app.Group("{{.Group}}"){{else}} router := app{{end}} 48 {{if notEmptyStr .Chain }} // use chain for router 49 middlewares := s.{{.Chain}}() 50 router.Use(middlewares...) 51 {{end}} 52 // register routes info to router 53 {{range .Fields}}{{if .NotHttpAny }} router.Add("{{.HttpMethod}}", "{{.Path}}", {{if .JustUseContext}}s.{{ .MethodName}}{{else}}func(c *fiber.Ctx) error { 54 {{if notEmptyStr .InName -}} 55 req := new({{.InName}}) 56 {{if .IsBindIn -}} 57 var bv _binding_ = req 58 if err := bv.Bind(c); err != nil { 59 {{- else -}} 60 if err := s.Bind(c, req); err != nil { 61 {{- end }} 62 s.Render(c, nil, err) 63 return err 64 } 65 {{- end }} 66 {{if notEmptyStr .OutName -}} 67 resp, err := s.{{ .MethodName}}({{if .IsUseContext }}c{{if notEmptyStr .InName }}, {{end}}{{end}}{{if notEmptyStr .InName}}req{{end}}) 68 {{if .IsRenderOut -}} 69 if err != nil { 70 s.Render(c, nil, err) 71 return err 72 } 73 var rv _render_ = resp 74 rv.Render(c) 75 {{- else -}} 76 s.Render(c, resp, err) 77 {{- end }} 78 {{- else -}} 79 s.Render(c, nil, s.{{.MethodName}}({{if .IsUseContext }}c{{if notEmptyStr .InName }}, {{end}}{{end}}{{if notEmptyStr .InName}}req{{end}})) 80 {{- end }} 81 return nil 82 }{{end}}) 83 {{else if .JustHttpAny}} router.All("{{.Path}}", {{if .JustUseContext}}s.{{ .MethodName}}{{else}}func(c *fiber.Ctx) error { 84 {{if notEmptyStr .InName -}} 85 req := new({{.InName}}) 86 {{if .IsBindIn -}} 87 var bv _binding_ = req 88 if err := bv.Bind(c); err != nil { 89 {{- else -}} 90 if err := s.Bind(c, req); err != nil { 91 {{- end }} 92 s.Render(c, nil, err) 93 return err 94 } 95 {{- end }} 96 {{if notEmptyStr .OutName -}} 97 resp, err := s.{{ .MethodName}}({{if .IsUseContext }}c{{if notEmptyStr .InName }}, {{end}}{{end}}{{if notEmptyStr .InName}}req{{end}}) 98 {{if .IsRenderOut -}} 99 if err != nil { 100 s.Render(c, nil, err) 101 return err 102 } 103 var rv _render_ = resp 104 rv.Render(c) 105 {{- else -}} 106 s.Render(c, resp, err) 107 {{- end }} 108 {{- else -}} 109 s.Render(c, nil, s.{{.MethodName}}({{if .IsUseContext }}c{{if notEmptyStr .InName }}, {{end}}{{end}}{{if notEmptyStr .InName}}req{{end}})) 110 {{- end }} 111 return nil 112 }{{end}}) 113 {{else}}{{$field := .}} { 114 h := {{if .JustUseContext}}s.{{ .MethodName}}{{else}}func(c *fiber.Ctx) error { 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}} 144 {{range .AnyHttpMethods}} router.Add("{{.}}", "{{$field.Path}}", h) 145 {{end}} } 146 {{end}} 147 {{- end -}} 148 } 149 150 {{ $unimplementedServant := print "Unimplemented" .TypeName "Servant" }} 151 // {{$unimplementedServant}} can be embedded to have forward compatible implementations. 152 type {{$unimplementedServant}} struct {} 153 154 {{if notEmptyStr .Chain }} 155 func ({{$unimplementedServant}}){{.Chain}}() []any { 156 return []any{logger.New()} 157 } 158 159 {{end}} 160 {{range .Fields}} 161 func ({{$unimplementedServant}}){{if .JustUseContext }}{{ .MethodName}}(c *fiber.Ctx) error{{else}}{{.MethodName}}({{if .IsUseContext }}c *fiber.Ctx{{if notEmptyStr .InName }}, {{end}}{{end}}{{if notEmptyStr .InName }}req *{{ .InName }}{{end}}) {{if notEmptyStr .OutName }}(*{{ .OutName}}, mir.Error){{else}}mir.Error{{end}}{{end}} { 162 {{if .JustUseContext -}} 163 c.Status(http.StatusNotImplemented) 164 c.Write([]byte("method not implemented")) 165 return nil 166 {{else -}} 167 return {{if notEmptyStr .OutName }}nil, {{end}}mir.Errorln(http.StatusNotImplemented, http.StatusText(http.StatusNotImplemented)) 168 {{end -}} 169 } 170 171 {{end}} 172 func ({{$unimplementedServant}})mustEmbedUnimplemented{{.TypeName}}Servant() {}