{{define "service"}} {{- $Imps := .Imps -}} {{- $Types := .Types -}} // Package {{.Manifest.Package}} provides types for the {{quote .Manifest.ServiceType}} service. {{- with .Manifest.DocumentURL}} // // Documented at {{.}}. {{- end}} package {{.Manifest.Package}} import ( {{- range .Imps.ImportLines}} {{.Alias}} {{quote .Path}} {{- end}} ) {{range .Types.StringVarDefs}} {{- $Name := .Name}} {{- with .AllowedValues}} // Allowed values for state variable {{$Name}}. const ( {{- range .}} {{$Name}}_{{.}} = "{{.}}" {{- end}} ) {{- end}} {{- end}} const ServiceType = {{quote .Manifest.ServiceType}} {{range .SCPD.SortedActions}} {{- template "action" args "Action" . "Imps" $Imps "Types" $Types}} {{end}} {{- end}} {{define "action"}} {{- $Imps := .Imps}} {{- $Types := .Types}} {{- $soapActionType := index $Types.TypeByName "SOAPActionInterface"}} // {{.Action.Name}} provides request and response for the action. // // ServiceType implements {{$soapActionType.AbsRef}}, self-describing the SOAP action. type {{.Action.Name}} struct{ Request {{.Action.Name}}Request Response {{.Action.Name}}Response } var _ {{$soapActionType.Ref}} = &{{.Action.Name}}{{"{}"}} // ServiceType implements {{$soapActionType.AbsRef}}. func (a *{{.Action.Name}}) ServiceType() string { return ServiceType } // ActionName implements {{$soapActionType.AbsRef}}. func (a *{{.Action.Name}}) ActionName() string { return {{quote .Action.Name}} } // RefRequest implements {{$soapActionType.AbsRef}}. func (a *{{.Action.Name}}) RefRequest() any { return &a.Request } // RefResponse implements {{$soapActionType.AbsRef}}. func (a *{{.Action.Name}}) RefResponse() any { return &a.Response } // {{.Action.Name}}Request contains the "in" args for the {{quote .Action.Name}} action. type {{.Action.Name}}Request struct {{- template "args" args "Args" .Action.InArgs "Imps" $Imps "Types" $Types}} // {{.Action.Name}}Response contains the "out" args for the {{quote .Action.Name}} action. type {{.Action.Name}}Response struct {{- template "args" args "Args" .Action.OutArgs "Imps" $Imps "Types" $Types}} {{- end}} {{define "args"}} {{- $Imps := .Imps -}} {{- $Types := .Types -}} { {{- with .Args}} {{- range .}} {{- $fieldType := index $Types.TypeByName .RelatedStateVariable.DataType}} // {{.Name}} relates to state variable {{.RelatedStateVariable.Name}} {{- with .RelatedStateVariable.AllowedValues}} {{- ""}} ({{len .}} standard allowed values) {{- end }}. {{.Name}} {{$fieldType.Ref}} {{- end}} {{end -}} } {{- end}}