github.com/alimy/mir/v4@v4.1.0/internal/generator/templates/mux_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 }}mux "{{ .EngineInfo.PkgName }}{{else}}"github.com/gorilla/mux{{end}}"
    12  	{{ declareImports .Imports }}
    13  )
    14  {{- if .DeclareCoreInterface }}
    15  type _binding_ interface {
    16  	Bind(*http.Request) mir.Error
    17  }
    18  
    19  type _render_ interface {
    20  	Render(http.ResponseWriter)
    21  }
    22  
    23  type _default_ interface {
    24  	Bind(*http.Request, 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  {{if notEmptyStr .Chain }}    // Chain provide middlewares for mux
    36      {{.Chain}}() []mux.MiddlewareFunc
    37  {{end}}
    38  {{range .Fields}}    {{if .JustUseContext }}{{ .MethodName}}(http.ResponseWriter, *http.Request){{else}}{{.MethodName}}({{if .IsUseContext }}http.ResponseWriter, *http.Request{{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  
    44  // Register{{.TypeName}}Servant register {{.TypeName}} servant to mux
    45  func Register{{.TypeName}}Servant(e *mux.Router, s {{.TypeName}}) {
    46  {{if notEmptyStr .Group }}    router := e.PathPrefix("{{.Group}}").Subrouter(){{else}}    router := e
    47  {{end}}
    48  {{if notEmptyStr .Chain }}    // use chain for router
    49      middlewares := s.{{.Chain}}()
    50      router.Use(middlewares...)
    51  {{end}}
    52  
    53      // register routes info to router
    54  {{range .Fields}}
    55  {{if .NotHttpAny }}    router.HandleFunc("{{.Path}}", {{if .JustUseContext}}s.{{ .MethodName}}{{else}}func(rw http.ResponseWriter, hr *http.Request) {
    56  	{{- if $.WatchCtxDone }}	
    57  		select {
    58  		case <-hr.Context().Done():
    59  			return
    60  		default:
    61  		}
    62  	{{end -}}
    63  	{{if notEmptyStr .InName -}}
    64  	req := new({{.InName}})
    65  	{{if .IsBindIn -}}
    66  	var bv _binding_ = req
    67  	if err := bv.Bind(hr); err != nil {
    68  	{{- else -}}
    69  	if err := s.Bind(hr, req); err != nil {
    70  	{{- end }}
    71  		s.Render(rw, nil, err)
    72  		return
    73  	}
    74  	{{- end }}
    75  	{{if notEmptyStr .OutName -}}
    76  	resp, err := s.{{ .MethodName}}({{if .IsUseContext }}rw, hr{{if notEmptyStr .InName }}, {{end}}{{end}}{{if notEmptyStr .InName}}req{{end}})
    77  	{{if .IsRenderOut -}}
    78  	if err != nil {
    79  		s.Render(rw, nil, err)
    80  		return
    81  	}
    82  	var rv _render_ = resp
    83  	rv.Render(rw)
    84  	{{- else -}}
    85  	s.Render(rw, resp, err)
    86  	{{- end }}
    87  	{{- else -}}
    88  	s.Render(rw, nil, s.{{.MethodName}}({{if .IsUseContext }}rw, hr{{if notEmptyStr .InName }}, {{end}}{{end}}{{if notEmptyStr .InName}}req{{end}}))
    89  	{{- end }}
    90  	}{{end}}).Methods("{{.HttpMethod}}"){{if notEmptyStr .Host}}.
    91          Host("{{.Host}}"){{end}}{{if valideQuery .Queries}}.
    92          Queries({{inflateQuery .Queries}}){{end}}{{else}}    router.HandleFunc("{{.Path}}", {{if .JustUseContext}}s.{{ .MethodName}}{{else}}func(rw http.ResponseWriter, hr *http.Request) {
    93  		{{- if $.WatchCtxDone }}	
    94  		select {
    95  		case <-hr.Context().Done():
    96  			return
    97  		default:
    98  		}
    99  	{{end -}}
   100  	{{if notEmptyStr .InName -}}
   101  	req := new({{.InName}})
   102  	{{if .IsBindIn -}}
   103  	var bv _binding_ = req
   104  	if err := bv.Bind(hr); err != nil {
   105  	{{- else -}}
   106  	if err := s.Bind(hr, req); err != nil {
   107  	{{- end }}
   108  		s.Render(rw, nil, err)
   109  		return
   110  	}
   111  	{{- end }}
   112  	{{if notEmptyStr .OutName -}}
   113  	resp, err := s.{{ .MethodName}}({{if .IsUseContext }}rw, hr{{if notEmptyStr .InName }}, {{end}}{{end}}{{if notEmptyStr .InName}}req{{end}})
   114  	{{if .IsRenderOut -}}
   115  	if err != nil {
   116  		s.Render(rw, nil, err)
   117  		return
   118  	}
   119  	var rv _render_ = resp
   120  	rv.Render(rw)
   121  	{{- else -}}
   122  	s.Render(rw, resp, err)
   123  	{{- end }}
   124  	{{- else -}}
   125  	s.Render(rw, nil, s.{{.MethodName}}({{if .IsUseContext }}rw, hr{{if notEmptyStr .InName }}, {{end}}{{end}}{{if notEmptyStr .InName}}req{{end}}))
   126  	{{- end }}
   127  	}{{end}}).Methods({{.HttpMethodArgs}}){{if notEmptyStr .Host}}.
   128          Host("{{.Host}}"){{end}}{{if valideQuery .Queries}}.
   129          Queries({{inflateQuery .Queries}}){{end}}{{end}}
   130  {{- end -}}
   131  }
   132  
   133  {{ $unimplementedServant := print "Unimplemented" .TypeName "Servant" }}
   134  // {{$unimplementedServant}} can be embedded to have forward compatible implementations.
   135  type {{$unimplementedServant}} struct {}
   136  
   137  {{if notEmptyStr .Chain }}
   138  func ({{$unimplementedServant}}){{.Chain}}() []mux.MiddlewareFunc {
   139      return nil
   140  }
   141  
   142  {{end}}
   143  {{range .Fields}}
   144  func ({{$unimplementedServant}}){{if .JustUseContext }}{{ .MethodName}}(rw http.ResponseWriter, hr *http.Request){{else}}{{.MethodName}}({{if .IsUseContext }}rw http.ResponseWriter, hr *http.Request{{if notEmptyStr .InName }}, {{end}}{{end}}{{if notEmptyStr .InName }}req *{{ .InName }}{{end}}) {{if notEmptyStr .OutName }}(*{{ .OutName}}, mir.Error){{else}}mir.Error{{end}}{{end}} {
   145  	{{if .JustUseContext -}}
   146  		rw.WriteHeader(http.StatusNotImplemented)
   147  		rw.Write([]byte("method not implemented"))
   148  	{{else -}}
   149  	return {{if notEmptyStr .OutName }}nil, {{end}}mir.Errorln(http.StatusNotImplemented, http.StatusText(http.StatusNotImplemented))
   150  	{{end -}}
   151  }
   152  
   153  {{end}}
   154  func ({{$unimplementedServant}})mustEmbedUnimplemented{{.TypeName}}Servant() {}
   155