github.com/alimy/mir/v4@v4.1.0/internal/generator/templates/iris_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 }}iris "{{ .EngineInfo.PkgName }}{{else}}"github.com/kataras/iris/v12{{end}}"
    12  	"{{if notEmptyStr .EngineInfo.PkgName }}{{ .EngineInfo.PkgName }}/context{{else}}github.com/kataras/iris/v12/context{{end}}"
    13  	{{ declareImports .Imports }}
    14  )
    15  {{- if .DeclareCoreInterface }}
    16  type _binding_ interface {
    17  	Bind(*context.Context) mir.Error
    18  }
    19  
    20  type _render_ interface {
    21  	Render(*context.Context)
    22  }
    23  
    24  type _default_ interface {
    25  	Bind(*context.Context, any) mir.Error
    26  	Render(*context.Context, 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 iris
    37      {{.Chain}}() context.Handlers
    38  {{end}}
    39  {{range .Fields}}    {{if .JustUseContext }}{{ .MethodName}}(*context.Context){{else}}{{.MethodName}}({{if .IsUseContext }}*context.Context{{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  {{if .IsUseFieldChain }}
    45  type {{.TypeName}}Chain interface {
    46  {{range .ChainFields }}    Chain{{.MethodName}}() context.Handlers
    47  {{end}}
    48  
    49  	mustEmbedUnimplemented{{.TypeName}}Chain()
    50  }
    51  {{end}}
    52  
    53  // Register{{.TypeName}}Servant register {{.TypeName}} servant to iris
    54  func Register{{.TypeName}}Servant(app *iris.Application, s {{.TypeName}}{{if .IsUseFieldChain }},  m ...{{.TypeName}}Chain{{end}}) {
    55  {{- if .IsUseFieldChain -}}
    56  	var cc {{.TypeName}}Chain
    57  	if len(m) > 0 {
    58  		cc = m[0]
    59  	} else {
    60  		cc = &Unimplemented{{.TypeName}}Chain{}
    61  	}
    62  {{- end}}
    63  {{if notEmptyStr .Group }}    router := app.Party("{{.Group}}"){{else}}    router := app{{end}}
    64  {{if notEmptyStr .Chain }}    // use chain for party
    65      middlewares := s.{{.Chain}}()
    66      router.Use(middlewares...)
    67  {{end}}
    68      // register routes info to router
    69  {{range .Fields}}{{if .NotHttpAny }}    router.Handle("{{.HttpMethod}}", "{{.Path}}", {{if .IsFieldChain }}append(cc.Chain{{.MethodName}}(), {{end}}{{if .JustUseContext}}s.{{ .MethodName}}{{else}}func(c *context.Context) {
    70  	{{- if $.WatchCtxDone }}
    71  		select {
    72  		case <- c.Request().Context().Done():
    73  			return
    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
    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
    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  	}{{end}}{{if .IsFieldChain }})...{{end}})
   105  	{{else if .JustHttpAny}}    router.Any("{{.Path}}", {{if .IsFieldChain }}append(cc.Chain{{.MethodName}}(), {{end}}{{if .JustUseContext}}s.{{ .MethodName}}{{else}}func(c *context.Context) {
   106  	{{- if $.WatchCtxDone }}
   107  		select {
   108  		case <- c.Request().Context().Done():
   109  			return
   110  		default:
   111  		}
   112  	{{end -}}
   113  	{{if notEmptyStr .InName -}}
   114  	req := new({{.InName}})
   115  	{{if .IsBindIn -}}
   116  	var bv _binding_ = req
   117  	if err := bv.Bind(c); err != nil {
   118  	{{- else -}}
   119  	if err := s.Bind(c, req); err != nil {
   120  	{{- end }}
   121  		s.Render(c, nil, err)
   122  		return
   123  	}
   124  	{{- end }}
   125  	{{if notEmptyStr .OutName -}}
   126  	resp, err := s.{{ .MethodName}}({{if .IsUseContext }}c{{if notEmptyStr .InName }}, {{end}}{{end}}{{if notEmptyStr .InName}}req{{end}})
   127  	{{if .IsRenderOut -}}
   128  	if err != nil {
   129  		s.Render(c, nil, err)
   130  		return
   131  	}
   132  	var rv _render_ = resp
   133  	rv.Render(c)
   134  	{{- else -}}
   135  	s.Render(c, resp, err)
   136  	{{- end }}
   137  	{{- else -}}
   138  	s.Render(c, nil, s.{{.MethodName}}({{if .IsUseContext }}c{{if notEmptyStr .InName }}, {{end}}{{end}}{{if notEmptyStr .InName}}req{{end}}))
   139  	{{- end }}	}{{end}}{{if .IsFieldChain }})...{{end}})
   140  	{{else}}{{$field := .}}    {
   141          h := {{if .IsFieldChain }}append(cc.Chain{{.MethodName}}(), {{end}}{{if .JustUseContext}}s.{{ .MethodName}}{{else}}func(c *context.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 }}	    }{{end}}{{if .IsFieldChain }}){{end}}
   176  		{{range .AnyHttpMethods}}        router.Handle("{{.}}", "{{$field.Path}}", h{{if $field.IsFieldChain }}...{{end}})
   177  		{{end}}    }
   178  	{{end}}
   179  {{- end -}}
   180  }
   181  
   182  {{ $unimplementedServant := print "Unimplemented" .TypeName "Servant" }}
   183  // {{$unimplementedServant}} can be embedded to have forward compatible implementations.
   184  type {{$unimplementedServant}} struct {}
   185  
   186  {{if notEmptyStr .Chain }}
   187  func ({{$unimplementedServant}}){{.Chain}}() context.Handlers {
   188      return nil
   189  }
   190  
   191  {{end}}
   192  {{range .Fields}}
   193  func ({{$unimplementedServant}}){{if .JustUseContext }}{{ .MethodName}}(c *context.Context){{else}}{{.MethodName}}({{if .IsUseContext }}c *context.Context{{if notEmptyStr .InName }}, {{end}}{{end}}{{if notEmptyStr .InName }}req *{{ .InName }}{{end}}) {{if notEmptyStr .OutName }}(*{{ .OutName}}, mir.Error){{else}}mir.Error{{end}}{{end}} {
   194  	{{if .JustUseContext -}}
   195  		c.StatusCode(http.StatusNotImplemented)
   196  		c.WriteString("method not implemented")
   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}}() context.Handlers {
   210  	return nil
   211  }
   212  {{end}}
   213  {{end}}
   214  func (b *{{$unimplementedChain}})mustEmbedUnimplemented{{.TypeName}}Chain() {}
   215  {{end}}