diff --git a/cloudstack/cloudstack.go b/cloudstack/cloudstack.go index 5b6b0ed..83f8726 100644 --- a/cloudstack/cloudstack.go +++ b/cloudstack/cloudstack.go @@ -487,6 +487,26 @@ func WithHTTPClient(client *http.Client) ClientOption { } } +// ListallSetter is an interface that every type that can set listall must implement +type ListallSetter interface { + SetListall(bool) +} + +// WithListall takes either a project name or ID and sets the `listall` parameter +func WithListall(listall bool) OptionFunc { + return func(cs *CloudStackClient, p interface{}) error { + ps, ok := p.(ListallSetter) + + if !ok { + return nil + } + + ps.SetListall(listall) + + return nil + } +} + // ProjectIDSetter is an interface that every type that can set a project ID must implement type ProjectIDSetter interface { SetProjectid(string) diff --git a/generate/generate.go b/generate/generate.go index 495baf4..d81235a 100644 --- a/generate/generate.go +++ b/generate/generate.go @@ -585,6 +585,25 @@ func (as *allServices) GeneralCode() ([]byte, error) { pn(" }") pn("}") pn("") + pn("// ListallSetter is an interface that every type that can set listall must implement") + pn("type ListallSetter interface {") + pn(" SetListall(bool)") + pn("}") + pn("") + pn("// WithListall takes either a project name or ID and sets the `listall` parameter") + pn("func WithListall(listall bool) OptionFunc {") + pn(" return func(cs *CloudStackClient, p interface{}) error {") + pn(" ps, ok := p.(ListallSetter)") + pn("") + pn(" if !ok {") + pn(" return nil") + pn(" }") + pn("") + pn(" ps.SetListall(listall)") + pn("") + pn(" return nil") + pn(" }") + pn("}") pn("// ProjectIDSetter is an interface that every type that can set a project ID must implement") pn("type ProjectIDSetter interface {") pn(" SetProjectid(string)")