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}}