1package generator
2
3import (
4	"strings"
5	"text/template"
6)
7
8var packageFuncs = template.FuncMap{
9	"ToLower":  strings.ToLower,
10	"UnExport": unexport,
11	"Replace":  strings.Replace,
12	"Generate": func() string { return "go:generate" }, // yes, this seems insane but ensures that we can use `go generate ./...` from the main package
13}
14
15const packageTemplate string = `{{.Header}}// Code generated by counterfeiter. DO NOT EDIT.
16package {{.DestinationPackage}}
17
18import (
19	{{- range $index, $import := .Imports.ByAlias}}
20	{{$import}}
21	{{- end}}
22)
23
24//{{.Generate}} counterfeiter . {{.Name}}
25
26// {{.Name}} is a generated interface representing the exported functions
27// in the {{.TargetPackage}} package.
28type {{.Name}} interface {
29  {{- range .Methods}}
30  {{.Name}}({{.Params.AsNamedArgsWithTypes}}) {{.Returns.AsReturnSignature}}
31  {{- end}}
32}
33
34type {{.Name}}Shim struct {}
35
36{{- range .Methods}}
37func (p *{{$.Name}}Shim) {{.Name}}({{.Params.AsNamedArgsWithTypes}}) {{.Returns.AsReturnSignature}} {
38  {{if .Returns.HasLength}}return {{end}}{{$.TargetAlias}}.{{.Name}}({{.Params.AsNamedArgsForInvocation}})
39}
40{{end}}
41var _ {{.Name}} = new({{.Name}}Shim)
42`
43