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() {}