github.com/alimy/mir/v4@v4.1.0/internal/generator/templates/httprouter_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 }}httprouter "{{ .EngineInfo.PkgName }}{{else}}"github.com/julienschmidt/httprouter{{end}}"
    12  	{{ declareImports .Imports }}
    13  )
    14  {{- if .DeclareCoreInterface }}
    15  type _binding_ interface {
    16  	Bind(*http.Request, httprouter.Params) mir.Error
    17  }
    18  
    19  type _render_ interface {
    20  	Render(http.ResponseWriter)
    21  }
    22  
    23  type _default_ interface {
    24  	Bind(*http.Request, httprouter.Params, any) mir.Error
    25  	Render(http.ResponseWriter, 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  {{range .Fields}}    {{if .JustUseContext }}{{ .MethodName}}(http.ResponseWriter, *http.Request, httprouter.Params){{else}}{{.MethodName}}({{if .IsUseContext }}http.ResponseWriter, *http.Request, httprouter.Params{{if notEmptyStr .InName }}, {{end}}{{end}}{{if notEmptyStr .InName }}*{{ .InName }}{{end}}) {{if notEmptyStr .OutName }}(*{{ .OutName}}, mir.Error){{else}}mir.Error{{end}}{{end}}
    36  {{end}}
    37  
    38      mustEmbedUnimplemented{{.TypeName}}Servant()
    39  }
    40  
    41  // Register{{.TypeName}}Servant register {{.TypeName}} servant to httprouter
    42  func Register{{.TypeName}}Servant(router *httprouter.Router, s {{.TypeName}}) {
    43  {{range .Fields}}{{if .NotHttpAny }}    router.Handle("{{.HttpMethod}}", "{{joinPath $.Group .Path}}", {{if .JustUseContext}}s.{{ .MethodName}}{{else}}func(rw http.ResponseWriter, hr *http.Request, p httprouter.Params) {
    44  	{{- if $.WatchCtxDone }}
    45  		select {
    46  		case <-hr.Context().Done():
    47  			return
    48  		default:
    49  		}
    50  	{{end -}}
    51  	{{if notEmptyStr .InName -}}
    52  	req := new({{.InName}})
    53  	{{if .IsBindIn -}}
    54  	var bv _binding_ = req
    55  	if err := bv.Bind(hr, p); err != nil {
    56  	{{- else -}}
    57  	if err := s.Bind(hr, p, req); err != nil {
    58  	{{- end }}
    59  		s.Render(rw, nil, err)
    60  		return
    61  	}
    62  	{{- end }}
    63  	{{if notEmptyStr .OutName -}}
    64  	resp, err := s.{{ .MethodName}}({{if .IsUseContext }}rw, hr, p{{if notEmptyStr .InName }}, {{end}}{{end}}{{if notEmptyStr .InName}}req{{end}})
    65  	{{if .IsRenderOut -}}
    66  	if err != nil {
    67  		s.Render(rw, nil, err)
    68  		return
    69  	}
    70  	var rv _render_ = resp
    71  	rv.Render(rw)
    72  	{{- else -}}
    73  	s.Render(rw, resp, err)
    74  	{{- end }}
    75  	{{- else -}}
    76  	s.Render(rw, nil, s.{{.MethodName}}({{if .IsUseContext }}rw, hr, p{{if notEmptyStr .InName }}, {{end}}{{end}}{{if notEmptyStr .InName}}req{{end}}))
    77  	{{- end }}
    78  	}{{end}})
    79  	{{else}}{{$field := .}}    {
    80          h := {{if .JustUseContext}}s.{{ .MethodName}}{{else}}func(rw http.ResponseWriter, hr *http.Request, p httprouter.Params) {
    81  			{{- if $.WatchCtxDone }}
    82  		select {
    83  		case <-hr.Context().Done():
    84  			return
    85  		default:
    86  		}
    87  	{{end -}}
    88  	{{if notEmptyStr .InName -}}
    89  	req := new({{.InName}})
    90  	{{if .IsBindIn -}}
    91  	var bv _binding_ = req
    92  	if err := bv.Bind(hr, p); err != nil {
    93  	{{- else -}}
    94  	if err := s.Bind(hr, p, req); err != nil {
    95  	{{- end }}
    96  		s.Render(rw, nil, err)
    97  		return
    98  	}
    99  	{{- end }}
   100  	{{if notEmptyStr .OutName -}}
   101  	resp, err := s.{{ .MethodName}}({{if .IsUseContext }}rw, hr, p{{if notEmptyStr .InName }}, {{end}}{{end}}{{if notEmptyStr .InName}}req{{end}})
   102  	{{if .IsRenderOut -}}
   103  	if err != nil {
   104  		s.Render(rw, nil, err)
   105  		return
   106  	}
   107  	var rv _render_ = resp
   108  	rv.Render(rw)
   109  	{{- else -}}
   110  	s.Render(rw, resp, err)
   111  	{{- end }}
   112  	{{- else -}}
   113  	s.Render(rw, nil, s.{{.MethodName}}({{if .IsUseContext }}rw, hr, p{{if notEmptyStr .InName }}, {{end}}{{end}}{{if notEmptyStr .InName}}req{{end}}))
   114  	{{- end }}
   115  	    }{{end}}
   116  		{{range .AnyHttpMethods}}        router.Handle("{{.}}", "{{joinPath $.Group $field.Path}}", h)
   117  		{{end}}    }
   118  	{{end}}
   119  {{- end -}}
   120  }
   121  
   122  {{ $unimplementedServant := print "Unimplemented" .TypeName "Servant" }}
   123  // {{$unimplementedServant}} can be embedded to have forward compatible implementations.
   124  type {{$unimplementedServant}} struct {}
   125  
   126  {{range .Fields}}
   127  func ({{$unimplementedServant}}){{if .JustUseContext }}{{ .MethodName}}(rw http.ResponseWriter, hr *http.Request, p httprouter.Params){{else}}{{.MethodName}}({{if .IsUseContext }}rw http.ResponseWriter, hr *http.Request, p httprouter.Params{{if notEmptyStr .InName }}, {{end}}{{end}}{{if notEmptyStr .InName }}req *{{ .InName }}{{end}}) {{if notEmptyStr .OutName }}(*{{ .OutName}}, mir.Error){{else}}mir.Error{{end}}{{end}} {
   128  	{{if .JustUseContext -}}
   129  		rw.WriteHeader(http.StatusNotImplemented)
   130  		rw.Write([]byte("method not implemented"))
   131  	{{else -}}
   132  	return {{if notEmptyStr .OutName }}nil, {{end}}mir.Errorln(http.StatusNotImplemented, http.StatusText(http.StatusNotImplemented))
   133  	{{end -}}
   134  }
   135  
   136  {{end}}
   137  func ({{$unimplementedServant}})mustEmbedUnimplemented{{.TypeName}}Servant() {}