github.com/alimy/mir/v4@v4.1.0/internal/generator/templates/echo_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 }}echo "{{ .EngineInfo.PkgName }}{{else}}"github.com/labstack/echo/v4{{end}}"
    12  	{{ declareImports .Imports }}
    13  )
    14  {{- if .DeclareCoreInterface }}
    15  type _binding_ interface {
    16  	Bind(echo.Context) mir.Error
    17  }
    18  
    19  type _render_ interface {
    20  	Render(echo.Context)
    21  }
    22  
    23  type _default_ interface {
    24  	Bind(echo.Context, any) mir.Error
    25  	Render(echo.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 echo
    36      {{.Chain}}() []echo.MiddlewareFunc
    37  {{end}}
    38  {{range .Fields}}    {{if .JustUseContext }}{{ .MethodName}}(echo.Context) error{{else}}{{.MethodName}}({{if .IsUseContext }}echo.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}}() []echo.MiddlewareFunc
    46  {{end}}
    47  
    48  	mustEmbedUnimplemented{{.TypeName}}Chain()
    49  }
    50  {{end}}
    51  
    52  // Register{{.TypeName}}Servant register {{.TypeName}} servant to echo
    53  func Register{{.TypeName}}Servant(e *echo.Echo, 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.Add("{{.HttpMethod}}", "{{.Path}}", {{if .JustUseContext}}s.{{ .MethodName}}{{else}}func(c echo.Context) error {
    69  	{{- if $.WatchCtxDone }}
    70  		ctx := c.Request().Context()
    71  		select {
    72  		case <-ctx.Done():
    73  			return ctx.Err()
    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 err
    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 err
    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  	return nil
   105  	}{{end}}{{if .IsFieldChain }}, cc.Chain{{.MethodName}}()...{{end}})
   106  	{{else if .JustHttpAny}}    router.Any("{{.Path}}", {{if .JustUseContext}}s.{{ .MethodName}}{{else}}func(c echo.Context) error {
   107  	{{- if $.WatchCtxDone }}
   108  		ctx := c.Request().Context()
   109  		select {
   110  		case <-ctx.Done():
   111  			return ctx.Err()
   112  		default:
   113  		}
   114  	{{end -}}
   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}}{{if .IsFieldChain }}, cc.Chain{{.MethodName}}()...{{end}})
   144  	{{else}}{{$field := .}}    {
   145          	h := {{if .JustUseContext}}s.{{ .MethodName}}{{else}}func(c echo.Context) error {
   146  			{{- if $.WatchCtxDone }}
   147  				ctx := c.Request().Context()
   148  				select {
   149  				case <-ctx.Done():
   150  				return ctx.Err()
   151  				default:
   152  				}
   153  			{{end -}}
   154  			{{if notEmptyStr .InName -}}
   155  				req := new({{.InName}})
   156  			{{if .IsBindIn -}}
   157  				var bv _binding_ = req
   158  				if err := bv.Bind(c); err != nil {
   159  			{{- else -}}
   160  				if err := s.Bind(c, req); err != nil {
   161  			{{- end }}
   162  				s.Render(c, nil, err)
   163  				return err
   164  			}
   165  			{{- end }}
   166  			{{if notEmptyStr .OutName -}}
   167  				resp, err := s.{{ .MethodName}}({{if .IsUseContext }}c{{if notEmptyStr .InName }}, {{end}}{{end}}{{if notEmptyStr .InName}}req{{end}})
   168  			{{if .IsRenderOut -}}
   169  				if err != nil {
   170  					s.Render(c, nil, err)
   171  					return err
   172  				}
   173  				var rv _render_ = resp
   174  				rv.Render(c)
   175  			{{- else -}}
   176  				s.Render(c, resp, err)
   177  			{{- end }}
   178  			{{- else -}}
   179  				s.Render(c, nil, s.{{.MethodName}}({{if .IsUseContext }}c{{if notEmptyStr .InName }}, {{end}}{{end}}{{if notEmptyStr .InName}}req{{end}}))
   180  			{{- end }}
   181  			return nil
   182  	    	}{{end}}
   183  		{{range .AnyHttpMethods}}        router.Add("{{.}}", "{{$field.Path}}", h{{if $field.IsFieldChain }}, cc.Chain{{$field.MethodName}}()...{{end}})
   184  		{{end}}    }
   185  	{{end}}
   186  {{- end -}}
   187  }
   188  
   189  {{ $unimplementedServant := print "Unimplemented" .TypeName "Servant" }}
   190  // {{$unimplementedServant}} can be embedded to have forward compatible implementations.
   191  type {{$unimplementedServant}} struct {}
   192  
   193  {{if notEmptyStr .Chain }}
   194  func ({{$unimplementedServant}}){{.Chain}}() []echo.MiddlewareFunc {
   195      return nil
   196  }
   197  
   198  {{end}}
   199  {{range .Fields}}
   200  func ({{$unimplementedServant}}){{if .JustUseContext }}{{ .MethodName}}(c echo.Context) error{{else}}{{.MethodName}}({{if .IsUseContext }}c echo.Context{{if notEmptyStr .InName }}, {{end}}{{end}}{{if notEmptyStr .InName }}req *{{ .InName }}{{end}}) {{if notEmptyStr .OutName }}(*{{ .OutName}}, mir.Error){{else}}mir.Error{{end}}{{end}} {
   201  	{{if .JustUseContext -}}
   202  		return c.String(http.StatusNotImplemented, "method not implemented")
   203  	{{else -}}
   204  	return {{if notEmptyStr .OutName }}nil, {{end}}mir.Errorln(http.StatusNotImplemented, http.StatusText(http.StatusNotImplemented))
   205  	{{end -}}
   206  }
   207  
   208  {{end}}
   209  func ({{$unimplementedServant}})mustEmbedUnimplemented{{.TypeName}}Servant() {}
   210  {{if .IsUseFieldChain }}
   211  {{ $unimplementedChain := print "Unimplemented" .TypeName "Chain" }}
   212  // {{$unimplementedChain}} can be embedded to have forward compatible implementations.
   213  type {{$unimplementedChain}} struct {}
   214  
   215  {{range .Fields}}{{if .IsFieldChain }}func (b *{{$unimplementedChain}}) Chain{{.MethodName}}() []echo.MiddlewareFunc {
   216  	return nil
   217  }
   218  {{end}}
   219  {{end}}
   220  func (b *{{$unimplementedChain}})mustEmbedUnimplemented{{.TypeName}}Chain() {}
   221  {{end}}