{{- /*gotype: go.mau.fi/mautrix-telegram/pkg/gotd/gen.interfaceDef*/ -}} {{ define "interface_mapping" }}{{ $f := . }} {{ range $mapping := $f.Mappings -}} {{- if not ($mapping.Concrete) }} // {{ $mapping.Name }} represents {{ $mapping.MapperName }} subset of {{ $f.Name }}. type {{ $mapping.Name }} interface { {{ template "class_interface_header" $f }} {{ range $field := index ($f.SharedFields) ($mapping.MapperName) -}}{{- /*gotype: go.mau.fi/mautrix-telegram/pkg/gotd/gen.fieldDef*/ -}} {{- template "print_comment" $field.Comment }} {{- if $field.Links }} {{- template "print_links" $field.Links }} {{- end }} {{ template "getter_func_type" $field}} {{ end }} } {{- end }} {{ range $s := $f.Constructors -}}{{- if or (not $mapping.Constructor) (eq ($s.Name) ($mapping.Constructor)) }} // As{{ $mapping.MapperName }} tries to map {{ $s.Name }} to {{ $mapping.Name }}. func ({{ $s.Receiver }} *{{ $s.Name }}) {{ template "mapper_func_type" $mapping }} { {{- if not ($mapping.Concrete) }} value, ok := ({{ $f.Name }}({{ $s.Receiver }})).({{ $mapping.Name }}) return value, ok {{- else }}{{- if $mapping.Fields }} value := new({{ $mapping.Name }}) {{- range $pair := $mapping.Fields -}} {{- if and ($pair.L.Conditional) (not $pair.L.ConditionalBool) }} if fieldValue, ok := {{ $s.Receiver }}.Get{{ $pair.L.Name }}(); ok { {{- if $pair.R.Conditional }} value.Set{{ $pair.R.Name }}(fieldValue) {{- else }} value.{{ $pair.R.Name }} = fieldValue {{- end }} } {{ else }} {{- if $pair.R.Conditional -}} value.Set{{ $pair.R.Name }}({{ $s.Receiver }}.Get{{ $pair.L.Name }}()) {{- else }} value.{{ $pair.R.Name }} = {{ $s.Receiver }}.Get{{ $pair.L.Name }}() {{- end }} {{- end }} {{- end }} return value {{- else }} {{- if eq ($s.Name) ($mapping.Name) }} return {{ $s.Receiver }}, true {{- else }} return nil, false {{ end }} {{- end }}{{- end }} } {{ end }}{{ end }} {{ end }} {{ end }}