Files
mautrix-telegram/pkg/gotd/gen/_template/interface_mapping.tmpl
T
2025-06-27 20:03:37 -07:00

57 lines
2.0 KiB
Cheetah

{{- /*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 }}