{{- /*gotype: go.mau.fi/mautrix-telegram/pkg/gotd/gen.interfaceConfig*/ -}} {{ define "box" }}{{ $f := .Interface }} // Decode{{ $f.Func }} implements binary de-serialization for {{ $f.Name }}. func Decode{{ $f.Func }} (buf *bin.Buffer) ({{ $f.Name }}, error) { id, err := buf.PeekID() if err != nil { return nil, err } switch id { {{- range $c := $f.Constructors }} case {{ $c.Name }}TypeID: // Decoding {{ $c.RawType }}. v := {{ $c.Name }}{} if err := v.Decode(buf); err != nil { return nil, fmt.Errorf("unable to decode {{ $f.Name }}: %w", err) } return &v, nil {{- end }} default: return nil, fmt.Errorf("unable to decode {{ $f.Name }}: %w", bin.NewUnexpectedID(id)) } } {{- if $.Config.Flags.TDLibJSON }} // DecodeTDLibJSON{{ $f.Func }} implements binary de-serialization for {{ $f.Name }}. func DecodeTDLibJSON{{ $f.Func }} (buf tdjson.Decoder) ({{ $f.Name }}, error) { id, err := buf.FindTypeID() if err != nil { return nil, err } switch id { {{- range $c := $f.Constructors }} case "{{ $c.RawName }}": // Decoding {{ $c.RawType }}. v := {{ $c.Name }}{} if err := v.DecodeTDLibJSON(buf); err != nil { return nil, fmt.Errorf("unable to decode {{ $f.Name }}: %w", err) } return &v, nil {{- end }} default: return nil, fmt.Errorf("unable to decode {{ $f.Name }}: %w", tdjson.NewUnexpectedID(id)) } } {{- end }} // {{ $f.Func }} boxes the {{ $f.Name }} providing a helper. type {{ $f.Func }}Box struct { {{ $f.BaseName }} {{ $f.Name }} } // Decode implements bin.Decoder for {{ $f.Func }}Box. func (b *{{ $f.Func }}Box) Decode(buf *bin.Buffer) error { if b == nil { return fmt.Errorf("unable to decode {{ $f.Func }}Box to nil") } v, err := Decode{{ $f.Func }}(buf) if err != nil { return fmt.Errorf("unable to decode boxed value: %w", err) } b.{{ $f.BaseName }} = v return nil } // Encode implements bin.Encode for {{ $f.Func }}Box. func (b *{{ $f.Func }}Box) Encode(buf *bin.Buffer) error { if b == nil || b.{{ $f.BaseName }} == nil { return fmt.Errorf("unable to encode {{ $f.Name }} as nil") } return b.{{ $f.BaseName }}.Encode(buf) } {{- if $.Config.Flags.TDLibJSON }} // DecodeTDLibJSON implements bin.Decoder for {{ $f.Func }}Box. func (b *{{ $f.Func }}Box) DecodeTDLibJSON(buf tdjson.Decoder) error { if b == nil { return fmt.Errorf("unable to decode {{ $f.Func }}Box to nil") } v, err := DecodeTDLibJSON{{ $f.Func }}(buf) if err != nil { return fmt.Errorf("unable to decode boxed value: %w", err) } b.{{ $f.BaseName }} = v return nil } // EncodeTDLibJSON implements bin.Encode for {{ $f.Func }}Box. func (b *{{ $f.Func }}Box) EncodeTDLibJSON(buf tdjson.Encoder) error { if b == nil || b.{{ $f.BaseName }} == nil { return fmt.Errorf("unable to encode {{ $f.Name }} as nil") } return b.{{ $f.BaseName }}.EncodeTDLibJSON(buf) } {{- end }} {{ end }}