{{> partials.copyHeader }} package query import ( "net/url" "strconv" ) type Params struct { {{#each queryOptions as |query|}} {{#if (eq query.name "provider")}} {{structProp query.name}} interface{} `json:"{{query.name}},omitempty"` {{else if (eq query.type "bool")}} {{structProp query.name}} *{{query.type}} `json:"{{query.name}},omitempty"` {{else}} {{structProp query.name}} {{query.type}} `json:"{{query.name}},omitempty"` {{/if}} {{/each}} } func NewQueryParams(paramOpt ...ParamOptions) *Params { p := &Params{} for _, par := range paramOpt { par(p) } return p } type ParamOptions func(*Params) {{#each queryOptions as |query|}} func With{{structProp query.name}}(query{{structProp query.name}} {{paramType query}}) ParamOptions { return func(p *Params) { {{#if (eq query.name "provider")}} p.{{structProp query.name}} = query{{structProp query.name}} {{else if (eq query.type "bool")}} b := new(bool) *b = query{{structProp query.name}} p.{{structProp query.name}} = b {{else}} p.{{structProp query.name}} = query{{structProp query.name}} {{/if}} } } {{/each}} func (p *Params) String() string { qs := url.Values{} {{#each queryOptions as |query|}} {{#if (eq query.name "provider")}} if (p.{{structProp query.name}} != nil) { if b, ok := p.{{structProp query.name}}.(bool); ok { qs.Add(`{{query.name}}`, strconv.FormatBool(b)) } else { qs.Add(`{{query.name}}`, p.{{structProp query.name}}.(string)) } } {{else if (eq query.type "bool")}} if (p.{{structProp query.name}} != nil) { qs.Add(`{{query.name}}`, strconv.FormatBool(*p.{{structProp query.name}})) } {{else if (eq query.type "int64")}} if (p.{{structProp query.name}} != 0) { qs.Add(`{{query.name}}`, strconv.FormatInt(p.{{structProp query.name}}, 10)) } {{else if (eq query.type "string")}} if (p.{{structProp query.name}} != "") { qs.Add(`{{query.name}}`, p.{{structProp query.name}}) } {{else}} {{log "query.go.hbs: unknown type for Params.String()" level="error"}} {{/if}} {{/each}} if len(qs) != 0 { return "?" + qs.Encode() } return "" }