{{- /*gotype: go.mau.fi/mautrix-telegram/pkg/gotd/gen.structDef*/ -}}
{{ define "method" }}{{- $s := . -}}{{ if $s.Method }}
// {{ $s.Method }} invokes method {{ $s.RawType }} returning error if any.
{{- if $s.Docs }}
{{- range $d := $s.Docs }}
// {{ trim $d }}
{{- end }}
{{- end }}
{{- if $s.Links }}
    {{- template "print_links" $s.Links }}
{{- end }}
{{- if $s.Errors }}
    {{- template "print_errors" $s.Errors }}
{{- end }}
{{- if $s.URL }}
//
// See {{ $s.URL }} for reference.
{{- end }}
{{- if $s.BotCanUse }}
// Can be used by bots.
{{- end }}
{{- if $s.Result }}
{{- if $s.ResultSingular }}
func (c *Client) {{ $s.Method }}({{ template "request_params" $s }}) ({{ if not $s.ResultVector }}*{{ $s.Result }}{{ else }}{{ template "slice_result_name" $s }}{{ end }}, error) {
    var result {{ $s.Result }}
    {{ template "pack_request" $s }}
    if err := c.rpc.Invoke(ctx, request, &result); err != nil {
        return nil, err
    }
    {{- if $s.ResultVector }}
    return {{ template "slice_result_name" $s }}(result.Elems), nil
    {{- else }}
    return &result, nil
    {{- end }}
}
{{- else }}
func (c *Client) {{ $s.Method }}({{ template "request_params" $s }}) ({{if ne $s.Result "BoolClass"}}{{ $s.Result }}{{ else }}bool{{ end }}, error) {
    var result {{ $s.ResultFunc }}Box
    {{ template "pack_request" $s }}
    if err := c.rpc.Invoke(ctx, request, &result); err != nil {
{{- if ne $s.Result "BoolClass" }}return nil, err{{- else }}return false, err{{- end }}
    }
    {{- if ne $s.Result "BoolClass" }}
    return result.{{ $s.ResultBaseName }}, nil
    {{- else }}
    _, ok := result.{{ $s.ResultBaseName }}.(*BoolTrue)
    return ok, nil
    {{- end }}
}
{{- end }}
{{- else }}
func (c *Client) {{ $s.Method }}({{ template "request_params" $s }}) error {
    var ok Ok
    {{ template "pack_request" $s }}
    if err := c.rpc.Invoke(ctx, request, &ok); err != nil {
        return err
    }
    return nil
}
{{- end }}

{{ end }}{{ end }}
