github.com/alimy/mir/v4@v4.1.0/internal/generator/templates/gin_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 }}gin "{{ .EngineInfo.PkgName }}{{else}}"github.com/gin-gonic/gin{{end}}"
    12  	{{ declareImports .Imports }}
    13  )
    14  {{- if .DeclareCoreInterface }}
    15  type _binding_ interface {
    16  	Bind(*gin.Context) mir.Error
    17  }
    18  
    19  type _render_ interface {
    20  	Render(*gin.Context)
    21  }
    22  
    23  type _default_ interface {
    24  	Bind(*gin.Context, any) mir.Error
    25  	Render(*gin.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 gin
    36      {{.Chain}}() gin.HandlersChain
    37  {{end}}
    38  {{range .Fields}}    {{if .JustUseContext }}{{ .MethodName}}(*gin.Context){{else}}{{.MethodName}}({{if .IsUseContext }}*gin.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}}() gin.HandlersChain
    46  {{end}}
    47  
    48  	mustEmbedUnimplemented{{.TypeName}}Chain()
    49  }
    50  {{end}}
    51  
    52  // Register{{.TypeName}}Servant register {{.TypeName}} servant to gin
    53  func Register{{.TypeName}}Servant(e *gin.Engine, 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.Handle("{{.HttpMethod}}", "{{.Path}}", {{if .IsFieldChain }}append(cc.Chain{{.MethodName}}(), {{end}}{{if .JustUseContext}}s.{{ .MethodName}}{{else}}func(c *gin.Context) {
    69  	{{- if $.WatchCtxDone }}
    70  		select {
    71  		case <- c.Request.Context().Done():
    72  			return
    73  		default:
    74  		}
    75  	{{end -}}
    76  	{{if notEmptyStr .InName -}}
    77  	req := new({{.InName}})
    78  	{{if .IsBindIn -}}
    79  	var bv _binding_ = req
    80  	if err := bv.Bind(c); err != nil {
    81  	{{- else -}}
    82  	if err := s.Bind(c, req); err != nil {
    83  	{{- end }}
    84  		s.Render(c, nil, err)
    85  		return
    86  	}
    87  	{{- end }}
    88  	{{if notEmptyStr .OutName -}}
    89  	resp, err := s.{{ .MethodName}}({{if .IsUseContext }}c{{if notEmptyStr .InName }}, {{end}}{{end}}{{if notEmptyStr .InName }}req{{end}})
    90  	{{if .IsRenderOut -}}
    91  	if err != nil {
    92  		s.Render(c, nil, err)
    93  		return
    94  	}
    95  	var rv _render_ = resp
    96  	rv.Render(c)
    97  	{{- else -}}
    98  	s.Render(c, resp, err)
    99  	{{- end }}
   100  	{{- else -}}
   101  	s.Render(c, nil, s.{{.MethodName}}({{if .IsUseContext }}c{{if notEmptyStr .InName }}, {{end}}{{end}}{{if notEmptyStr .InName}}req{{end}}))
   102  	{{- end }}
   103  	}{{end}}{{if .IsFieldChain }})...{{end}})
   104  	{{else if .JustHttpAny}}    router.Any("{{.Path}}", {{if .IsFieldChain }}append(cc.Chain{{.MethodName}}(), {{end}}{{if .JustUseContext}}s.{{ .MethodName}}{{else}}func(c *gin.Context) {
   105  	{{- if $.WatchCtxDone }}
   106  		select {
   107  		case <- c.Request.Context().Done():
   108  			return
   109  		default:
   110  		}
   111  	{{end -}}
   112  	{{if notEmptyStr .InName -}}
   113  	req := new({{.InName}})
   114  	{{if .IsBindIn -}}
   115  	var bv _binding_ = req
   116  	if err := bv.Bind(c); err != nil {
   117  	{{- else -}}
   118  	if err := s.Bind(c, req); err != nil {
   119  	{{- end }}
   120  		s.Render(c, nil, err)
   121  		return
   122  	}
   123  	{{- end }}
   124  	{{if notEmptyStr .OutName -}}
   125  	resp, err := s.{{ .MethodName}}({{if .IsUseContext }}c{{if notEmptyStr .InName }}, {{end}}{{end}}{{if notEmptyStr .InName}}req{{end}})
   126  	{{if .IsRenderOut -}}
   127  	if err != nil {
   128  		s.Render(c, nil, err)
   129  		return
   130  	}
   131  	var rv _render_ = resp
   132  	rv.Render(c)
   133  	{{- else -}}
   134  	s.Render(c, resp, err)
   135  	{{- end }}
   136  	{{- else -}}
   137  	s.Render(c, nil, s.{{.MethodName}}({{if .IsUseContext }}c{{if notEmptyStr .InName }}, {{end}}{{end}}{{if notEmptyStr .InName}}req{{end}}))
   138  	{{- end }}
   139  	}{{end}}{{if .IsFieldChain }})...{{end}})
   140  	{{else}}{{$field := .}}    {
   141          	h := {{if .IsFieldChain }}append(cc.Chain{{.MethodName}}(), {{end}}{{if .JustUseContext}}s.{{ .MethodName}}{{else}}func(c *gin.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 }}
   176  	}{{end}}{{if .IsFieldChain }}){{end}}
   177  	{{range .AnyHttpMethods}}        router.Handle("{{.}}", "{{$field.Path}}", h{{if $field.IsFieldChain }}...{{end}})
   178  	{{end}}    }
   179  	{{end}}
   180  {{- end -}}
   181  }
   182  
   183  {{ $unimplementedServant := print "Unimplemented" .TypeName "Servant" }}
   184  // {{$unimplementedServant}} can be embedded to have forward compatible implementations.
   185  type {{$unimplementedServant}} struct {}
   186  
   187  {{if notEmptyStr .Chain }}
   188  func ({{$unimplementedServant}}){{.Chain}}() gin.HandlersChain {
   189      return nil
   190  }
   191  
   192  {{end}}
   193  {{range .Fields}}
   194  func ({{$unimplementedServant}}){{if .JustUseContext}}{{ .MethodName}}(c *gin.Context){{else}}{{.MethodName}}({{if .IsUseContext }}c *gin.Context{{if notEmptyStr .InName }}, {{end}}{{end}}{{if notEmptyStr .InName }}req *{{ .InName }}{{end}}) {{if notEmptyStr .OutName }}(*{{ .OutName}}, mir.Error){{else}}mir.Error{{end}}{{end}} {
   195  	{{if .JustUseContext -}}
   196  		c.String(http.StatusNotImplemented, http.StatusText(http.StatusNotImplemented))
   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}}() gin.HandlersChain {
   210  	return nil
   211  }
   212  {{end}}
   213  {{end}}
   214  func (b *{{$unimplementedChain}})mustEmbedUnimplemented{{.TypeName}}Chain() {}
   215  {{ end }}