forked from launchdarkly/go-options
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtemplate_text.go
89 lines (76 loc) · 2.77 KB
/
template_text.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
// generated code, DO NOT EDIT
package main
const codeTemplateText = `
// Code generated by github.com/pjoc-team/go-options. DO NOT EDIT.
package {{$.packageName}}
{{ if .imports -}}
import (
{{- range .imports }}
{{ if .Alias }} {{ .Alias }} "{{ .Path }}"{{ else }} "{{ .Path }}"{{ end -}}
{{ end }}
)
{{ end }}
{{ $applyOptionFuncType := or $.applyOptionFuncType (printf "Apply%sFunc" (ToTitle $.optionTypeName)) }}
// {{ $applyOptionFuncType }} the func of {{ $.configTypeName }}
type {{ $applyOptionFuncType }} func(c *{{ $.configTypeName }}) error
func (f {{ $applyOptionFuncType }}) apply(c *{{ $.configTypeName }}) error {
return f(c)
}
{{ $applyFuncName := or $.applyFuncName (printf "apply%sOptions" (ToTitle $.configTypeName)) }}
{{ if $.createNewFunc}}
// New{{ $.configTypeName | ToTitle}} create {{ $.configTypeName | ToTitle}} with options
func New{{ $.configTypeName | ToTitle}}(opts ...{{ $.optionTypeName }}) ({{ $.configTypeName }}, error) {
var c {{ $.configTypeName }}
err := {{ $applyFuncName }}(&c, opts...)
return c, err
}
{{ end }}
{{ if $.createNewFunc}}
func new{{ $.configTypeName | ToTitle}}(opts ...{{ $.optionTypeName }}) ({{ $.configTypeName }}, error) {
var c {{ $.configTypeName }}
err := {{ $applyFuncName }}(&c, opts...)
return c, err
}
{{ end }}
func {{ $applyFuncName }}(c *{{ $.configTypeName }}, options ...{{ $.optionTypeName }}) error {
{{- range .options -}}{{ $optionName := .Name }}{{ if .DefaultValue }}
c.{{ .Name }} = {{ .DefaultValue }}
{{- end }}{{ if .IsStruct }}{{ range .Fields }}{{ if .DefaultValue }}
c.{{ $optionName }}.{{ .Name }} = {{ .DefaultValue }}
{{- end }}{{ end }}
{{- end }}{{ end }}
for _, o := range options {
if err := o.apply(c); err != nil {
return err
}
}
return nil
}
// {{ $.optionTypeName }} interface {{ $.optionTypeName }}
type {{ $.optionTypeName }} interface {
apply(*{{ $.configTypeName }}) error
}
{{ range .options }}{{ $option := . }}
{{ $name := .PublicName | ToTitle | printf "%s%s" $.optionPrefix }}
{{ if $.optionSuffix }}{{ $name = $.optionSuffix | printf "%s%s" (.PublicName | ToTitle) }}{{ end }}
{{ if .Docs }}
{{- range $i, $doc := .Docs }}// {{ if eq $i 0 }}{{ $name }} {{ end }}{{ $doc }}{{ end -}}
{{ end -}}
// {{ $name }} option func
func {{ $name }}(
{{- range $i, $f := .Fields }}{{ if ne $i 0 }},{{ end }}{{ $f.ParamName }} {{ $f.Type }}{{ end -}}
) {{ $applyOptionFuncType }} {
return func(c *{{ $.configTypeName }}) error {
{{- if and $option.IsStruct $option.DefaultIsNil }}
c.{{ $option.Name }} = new({{ $option.Type }})
{{- end }}
{{- range .Fields }}{{ if $option.IsStruct }}
c.{{ $option.Name }}.{{ .Name }} = {{ .ParamName }}
{{- else }}
c.{{ $option.Name }} = {{ if $option.DefaultIsNil }}&{{ end }}{{ .ParamName }}
{{- end }}{{- end }}
return nil
}
}
{{ end }}
`