diff --git a/internal/gen/_template/main.tmpl b/internal/gen/_template/main.tmpl index b14a98a194..ea83a1c14e 100644 --- a/internal/gen/_template/main.tmpl +++ b/internal/gen/_template/main.tmpl @@ -30,15 +30,19 @@ type {{ $s.Name }} struct { {{- end }} } +{{- if not $s.Vector }} // {{ $s.Name }}TypeID is TL type id of {{ $s.Name }}. const {{ $s.Name }}TypeID = 0x{{ $s.HexID }}; +{{- end }} // Encode implements bin.Encoder. func ({{ $s.Receiver }} *{{ $s.Name }}) Encode({{ $s.BufArg }} *bin.Buffer) error { if {{ $s.Receiver }} == nil { return fmt.Errorf("can't encode {{ $s.RawType }} as nil") } +{{- if not $s.Vector }} {{ $s.BufArg }}.PutID({{ $s.Name }}TypeID) +{{- end }} {{- range $f := $s.Fields }} {{- if not $f.ConditionalBool }} {{- if $f.Conditional }} @@ -125,9 +129,11 @@ func ({{ $s.Receiver }} *{{ $s.Name }}) Decode({{ $s.BufArg }} *bin.Buffer) erro if {{ $s.Receiver }} == nil { return fmt.Errorf("can't decode {{ $s.RawType }} to nil") } +{{- if not $s.Vector }} if err := {{ $s.BufArg }}.ConsumeID({{ $s.Name }}TypeID); err != nil { return fmt.Errorf("unable to decode {{ $s.RawType }}: %w", err) } +{{- end }} {{- range $f := $s.Fields }} {{- if $f.ConditionalBool }} {{ $s.Receiver }}.{{ $f.Name }} = {{ $s.Receiver }}.{{ $f.ConditionalField }}.Has({{ $f.ConditionalIndex }}) @@ -228,12 +234,16 @@ _ {{ $s.Interface }} = &{{ $s.Name }}{} {{- end }} {{- if $s.Result }} {{- if $s.ResultSingular }} -func (c *Client) {{ $s.Method }}(ctx context.Context, request *{{ $s.Name }}) (*{{ $s.Result }}, error) { +func (c *Client) {{ $s.Method }}(ctx context.Context, request *{{ $s.Name }}) ({{ if not $s.ResultVector }}*{{ $s.Result }}{{ else }}[]{{ $s.ResultFunc }}{{ end }}, error) { var result {{ $s.Result }} if err := c.rpc.InvokeRaw(ctx, request, &result); err != nil { return nil, err } + {{- if $s.ResultVector }} + return result.Elems, nil + {{- else }} return &result, nil + {{- end }} } {{- else }} func (c *Client) {{ $s.Method }}(ctx context.Context, request *{{ $s.Name }}) ({{ $s.Result }}, error) { diff --git a/internal/gen/_testdata/example.tl b/internal/gen/_testdata/example.tl index fcc299e303..195fd77258 100644 --- a/internal/gen/_testdata/example.tl +++ b/internal/gen/_testdata/example.tl @@ -144,3 +144,5 @@ send msg:SMS = SMS; sendMultipleSMS messages:vector = Ok; doAuth = Auth; + +echoVector ids:Vector = Vector; diff --git a/internal/gen/example/example_test.go b/internal/gen/example/example_test.go index dd7ba3de9f..acef10e5b1 100644 --- a/internal/gen/example/example_test.go +++ b/internal/gen/example/example_test.go @@ -1,6 +1,7 @@ package td import ( + "context" "testing" "github.com/stretchr/testify/require" @@ -148,6 +149,38 @@ func TestGetUpdatesRespNilElem(t *testing.T) { } } +type mockInvoker struct { + input bin.Encoder + output bin.Encoder +} + +func (m *mockInvoker) InvokeRaw(ctx context.Context, input bin.Encoder, output bin.Decoder) error { + m.input = input + + buf := bin.Buffer{} + err := m.output.Encode(&buf) + if err != nil { + return err + } + + return output.Decode(&buf) +} + +func TestVectorResponse(t *testing.T) { + elems := []int{1, 2, 3} + m := mockInvoker{ + output: &IntVector{Elems: []int{1, 2, 3}}, + } + client := NewClient(&m) + + r, err := client.EchoVector(context.Background(), &EchoVectorRequest{}) + if err != nil { + t.Fatal(err) + } + + require.Equal(t, r, elems) +} + func BenchmarkDecodeBool(b *testing.B) { b.ReportAllocs() diff --git a/internal/gen/example/tl_echo_vector_gen.go b/internal/gen/example/tl_echo_vector_gen.go new file mode 100644 index 0000000000..9a0b8bba8f --- /dev/null +++ b/internal/gen/example/tl_echo_vector_gen.go @@ -0,0 +1,80 @@ +// Code generated by gotdgen, DO NOT EDIT. + +package td + +import ( + "context" + "fmt" + + "github.com/gotd/td/bin" +) + +// No-op definition for keeping imports. +var _ = bin.Buffer{} +var _ = context.Background() +var _ = fmt.Stringer(nil) + +// EchoVectorRequest represents TL type `echoVector#d4785939`. +// +// See https://localhost:80/doc/method/echoVector for reference. +type EchoVectorRequest struct { + // Ids field of EchoVectorRequest. + Ids []int +} + +// EchoVectorRequestTypeID is TL type id of EchoVectorRequest. +const EchoVectorRequestTypeID = 0xd4785939 + +// Encode implements bin.Encoder. +func (e *EchoVectorRequest) Encode(b *bin.Buffer) error { + if e == nil { + return fmt.Errorf("can't encode echoVector#d4785939 as nil") + } + b.PutID(EchoVectorRequestTypeID) + b.PutVectorHeader(len(e.Ids)) + for _, v := range e.Ids { + b.PutInt(v) + } + return nil +} + +// Decode implements bin.Decoder. +func (e *EchoVectorRequest) Decode(b *bin.Buffer) error { + if e == nil { + return fmt.Errorf("can't decode echoVector#d4785939 to nil") + } + if err := b.ConsumeID(EchoVectorRequestTypeID); err != nil { + return fmt.Errorf("unable to decode echoVector#d4785939: %w", err) + } + { + headerLen, err := b.VectorHeader() + if err != nil { + return fmt.Errorf("unable to decode echoVector#d4785939: field ids: %w", err) + } + for idx := 0; idx < headerLen; idx++ { + value, err := b.Int() + if err != nil { + return fmt.Errorf("unable to decode echoVector#d4785939: field ids: %w", err) + } + e.Ids = append(e.Ids, value) + } + } + return nil +} + +// Ensuring interfaces in compile-time for EchoVectorRequest. +var ( + _ bin.Encoder = &EchoVectorRequest{} + _ bin.Decoder = &EchoVectorRequest{} +) + +// EchoVector invokes method echoVector#d4785939 returning error if any. +// +// See https://localhost:80/doc/method/echoVector for reference. +func (c *Client) EchoVector(ctx context.Context, request *EchoVectorRequest) ([]int, error) { + var result IntVector + if err := c.rpc.InvokeRaw(ctx, request, &result); err != nil { + return nil, err + } + return result.Elems, nil +} diff --git a/internal/gen/example/tl_int_vector_gen.go b/internal/gen/example/tl_int_vector_gen.go new file mode 100644 index 0000000000..6eed77575d --- /dev/null +++ b/internal/gen/example/tl_int_vector_gen.go @@ -0,0 +1,60 @@ +// Code generated by gotdgen, DO NOT EDIT. + +package td + +import ( + "context" + "fmt" + + "github.com/gotd/td/bin" +) + +// No-op definition for keeping imports. +var _ = bin.Buffer{} +var _ = context.Background() +var _ = fmt.Stringer(nil) + +// IntVector is a box for Vector +type IntVector struct { + // Elements of Vector + Elems []int +} + +// Encode implements bin.Encoder. +func (vec *IntVector) Encode(b *bin.Buffer) error { + if vec == nil { + return fmt.Errorf("can't encode Vector as nil") + } + b.PutVectorHeader(len(vec.Elems)) + for _, v := range vec.Elems { + b.PutInt(v) + } + return nil +} + +// Decode implements bin.Decoder. +func (vec *IntVector) Decode(b *bin.Buffer) error { + if vec == nil { + return fmt.Errorf("can't decode Vector to nil") + } + { + headerLen, err := b.VectorHeader() + if err != nil { + return fmt.Errorf("unable to decode Vector: field Elems: %w", err) + } + for idx := 0; idx < headerLen; idx++ { + value, err := b.Int() + if err != nil { + return fmt.Errorf("unable to decode Vector: field Elems: %w", err) + } + vec.Elems = append(vec.Elems, value) + } + } + return nil +} + +// Ensuring interfaces in compile-time for IntVector. +var ( + _ bin.Encoder = &IntVector{} + _ bin.Decoder = &IntVector{} +) diff --git a/internal/gen/example/tl_registry_gen.go b/internal/gen/example/tl_registry_gen.go index ae0e676a5e..3c83c66820 100644 --- a/internal/gen/example/tl_registry_gen.go +++ b/internal/gen/example/tl_registry_gen.go @@ -77,5 +77,6 @@ func TypesMap() map[uint32]string { 0xf74488a: "send#f74488a", 0xdf18e5ca: "sendMultipleSMS#df18e5ca", 0xfd2f6687: "doAuth#fd2f6687", + 0xd4785939: "echoVector#d4785939", } } diff --git a/internal/gen/generic.go b/internal/gen/generic.go new file mode 100644 index 0000000000..35a9aef026 --- /dev/null +++ b/internal/gen/generic.go @@ -0,0 +1,56 @@ +package gen + +import ( + "strings" + + "github.com/gotd/tl" +) + +func (g *Generator) instantiateVector(className string) (class classBinding, err error) { + class, ok := g.classes[className] + if ok { + return class, nil + } + + elementName := strings.TrimPrefix(className[:len(className)-1], "Vector<") + goElementName := g.classes[elementName].Name + if goElementName == "" { + goElementName = elementName + } + + f, err := g.makeField(tl.Parameter{ + Name: "Elems", + Type: tl.Type{ + Name: "Vector", + GenericArg: &tl.Type{ + Name: elementName, + }, + }, + }, nil) + if err != nil { + return + } + f.Comment = "Elements of " + className + + goName := strings.Title(goElementName) + "Vector" + class = classBinding{ + Name: goName, + Func: f.Type, + Singular: true, + Vector: true, + } + g.classes[className] = class + + g.structs = append(g.structs, structDef{ + Name: goName, + Receiver: "vec", + BufArg: "b", + RawType: className, + Vector: true, + Fields: []fieldDef{f}, + BaseName: goName, + Comment: goName + " is a box for " + className, + }) + + return class, nil +} diff --git a/internal/gen/internal/bindata.go b/internal/gen/internal/bindata.go index cff01ee20a..3b6713c936 100644 --- a/internal/gen/internal/bindata.go +++ b/internal/gen/internal/bindata.go @@ -80,7 +80,7 @@ func (fi bindataFileInfo) Sys() interface{} { return nil } -var __templateClientTmpl = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x3c\x90\xc1\x6a\xc3\x30\x10\x44\xef\xfe\x8a\xc1\x84\x92\x94\xe0\xdc\x03\x3d\xa5\x3d\x14\xda\x12\x4a\x7e\x40\x95\xd7\x89\x88\xbd\x12\xeb\x75\x92\x22\xf2\xef\x45\xb2\xd2\x93\x96\xa7\xd1\x68\x66\x63\x44\x4b\x9d\x63\x42\x6d\x7b\x47\xac\x35\xee\xf7\x2a\x46\x2c\xc2\xf9\x88\xed\x0b\x16\xcd\xde\xd8\xb3\x39\x52\xe1\x4a\x43\xe8\x8d\x12\xea\x13\x99\x96\xa4\xc6\x22\xdd\x54\x9b\x0d\xde\xf9\xe2\xcf\x24\xb0\x86\xe1\xf2\x0c\x31\x57\x7c\x1e\xf6\xe2\xd5\x43\x82\x85\x35\x7d\x3f\x36\x95\xfe\x06\xfa\x97\x3b\x56\x92\xce\x58\x42\xac\x50\xe8\xb7\xb9\x2e\xad\xde\x60\x3d\x2b\xdd\xb4\xd9\xcd\xe7\x1a\x8e\xc3\xa4\xf8\x71\xdc\xbc\xb1\xf5\x2d\xc9\x1a\x7e\xd2\x07\x7b\xa5\xcc\x56\x20\x11\x2f\xd5\x1c\x6b\x97\x7b\xc1\x0d\xa1\xa7\x21\x4d\x03\xe9\xc9\xb7\x23\x3a\x2f\x39\x90\xe3\x23\xba\x89\xad\x3a\xcf\x23\x3a\xf1\x03\x0e\x1f\x18\xed\x89\x06\x83\x8b\x33\x8f\xa4\x25\x77\xf1\x1b\x55\x26\xab\x39\x73\x6a\x56\x34\xe9\xcf\xe4\x85\x2f\xba\xce\xc2\xa5\x2b\x3d\x8b\x62\x85\xe7\xe2\x90\x9f\x92\x4e\xc2\x78\x9a\x51\x22\xd9\x6e\x5b\x16\x28\xeb\x0a\xb8\x27\xd3\x18\x41\xdc\xa6\x55\xff\x05\x00\x00\xff\xff\x88\xcc\x3e\xfd\xb3\x01\x00\x00") +var __templateClientTmpl = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x3c\x90\x41\x6b\x83\x40\x10\x85\xef\x82\xff\xe1\x21\xa1\x24\x25\x98\x7b\xa0\xa7\xb4\x87\x42\x5b\x42\xc9\x1f\xd8\xae\x63\xb2\x44\x67\x65\x1c\x93\x94\xc5\xff\x5e\x5c\xd7\x9e\x1c\xbe\x79\xbe\x7d\x6f\x42\x40\x45\xb5\x63\x42\x61\x1b\x47\xac\x05\xc6\x31\xcf\x42\xc0\xaa\xbb\x9e\xb1\x7f\xc1\xaa\x3c\x1a\x7b\x35\x67\x5a\x16\x4a\x6d\xd7\x18\x25\x14\x17\x32\x15\x49\x81\x55\x5c\xe5\xd9\x6e\x87\x77\xbe\xf9\x2b\x09\xac\x61\xb8\x38\x43\xcc\x1d\x9f\xa7\xa3\x78\xf5\x90\xce\xc2\x9a\xa6\xe9\xcb\x3c\xd3\xdf\x8e\xfe\xf5\x8e\x95\xa4\x36\x96\x10\xf2\x0c\x09\x7f\x9b\xfb\xda\xea\x03\xd6\xb3\xd2\x43\xcb\xc3\xfc\xdd\xc2\x71\x37\x28\x7e\x1c\x97\x6f\x6c\x7d\x45\xb2\x85\x1f\x74\x61\xaf\x14\xd9\x06\x24\xe2\x25\xcf\x96\x6c\x87\x58\x10\xae\xed\x1a\x6a\xa7\xa9\x25\xbd\xf8\xaa\x47\xed\x25\xa6\x72\x7c\x46\x3d\xb0\x55\xe7\xb9\x47\x2d\xbe\xc5\xe9\x03\xbd\xbd\x50\x6b\x70\x73\x66\x49\xbb\x84\x4f\x86\xbd\xca\x60\x75\x0e\x3e\x15\x4c\xaa\xf4\xf0\x64\x88\x2f\xba\xcf\xe2\xb5\x4b\x85\x93\x68\x83\xe7\xe4\x32\xff\x4e\x3a\x08\xe3\x69\x66\x11\x45\xcf\x7d\x3a\xa6\x6c\x27\x34\x26\xeb\x10\x40\x5c\xc5\xe3\xff\x05\x00\x00\xff\xff\x6e\x86\x44\xb6\xc8\x01\x00\x00") func _templateClientTmplBytes() ([]byte, error) { return bindataRead( @@ -95,12 +95,12 @@ func _templateClientTmpl() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "_template/client.tmpl", size: 435, mode: os.FileMode(420), modTime: time.Unix(1, 0)} + info := bindataFileInfo{name: "_template/client.tmpl", size: 456, mode: os.FileMode(420), modTime: time.Unix(1, 0)} a := &asset{bytes: bytes, info: info} return a, nil } -var __templateHeaderTmpl = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x3c\x8e\x41\x6a\xc3\x30\x10\x45\xf7\x73\x8a\x8f\xe8\x22\x86\x56\x3e\x41\x37\x69\xba\xe8\x26\x29\x34\xfb\x22\x5b\x23\x45\xb8\x1e\x19\x75\x5c\x5a\x84\xee\x5e\x4c\x42\x96\x33\x1f\xde\x7b\xb5\xc2\x73\x48\xc2\x30\x17\x76\x9e\x8b\x41\x6b\xd4\xf7\x78\xc9\x9e\x11\x59\xb8\x38\x65\x8f\xe1\x0f\x31\xab\x8f\x2c\x8f\x38\x9c\x70\x3c\x9d\xf1\x7a\x78\x3b\x5b\xa2\xc5\x8d\x93\x8b\x8c\x5a\xf1\x60\xdf\x6f\x47\x6b\x44\x69\x5e\x72\x51\xec\xc8\x8c\x59\x94\x7f\xd5\x90\x09\xb3\x1a\x22\x13\x93\x5e\xd6\xc1\x8e\x79\xee\x37\x6a\xaf\xbe\x1f\x92\x18\xea\x68\x53\x1f\xf3\x53\x5e\xae\x59\x49\x53\x16\x84\x5c\x30\x31\x2f\x49\x22\xae\xd4\x6f\x4b\x3f\xae\xe0\x13\xcf\x18\x92\xd8\xfd\x1a\x02\x97\xda\xee\xcf\x9b\xd1\xee\xdd\x38\xc5\x92\x57\xf1\xbb\xee\x3e\x86\x59\xed\x87\x96\x24\x91\xcb\x4e\xd2\x57\x47\x54\x2b\x58\xfc\x96\xfd\x1f\x00\x00\xff\xff\xd8\x6f\x86\x9d\x11\x01\x00\x00") +var __templateHeaderTmpl = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x44\x8f\xc1\x4a\x03\x31\x10\x86\xef\x81\xbc\xc3\x4f\xf0\xd0\x82\x26\x4f\xe0\xa5\xd6\x83\x97\x56\xb0\x77\xc9\x6e\x26\x69\x58\x77\xb2\xc4\x59\x51\xc2\xbe\xbb\x6c\x5b\xe8\x69\x98\xf9\xe1\xfb\xe6\x6f\x0d\x81\x62\x66\x82\x39\x93\x0f\x54\x0d\x96\x45\x2b\xe7\xf0\x52\x02\x21\x11\x53\xf5\x42\x01\xdd\x1f\x52\x91\x90\x88\x1f\xb1\x3f\xe2\x70\x3c\xe1\x75\xff\x76\xb2\x5a\x69\x35\xf9\x7e\xf0\x89\xd0\x1a\x1e\xec\xfb\x6d\x59\x31\x5a\xe5\x71\x2a\x55\xb0\xd1\xca\xf4\x85\x85\x7e\xc5\x68\x65\xe2\xb8\x0e\xad\x4c\xca\x72\x9e\x3b\xdb\x97\xd1\xad\x74\x27\xc1\x75\x99\x8d\x56\xdb\x35\x76\x0e\x87\xf2\x54\xa6\xeb\x8b\x59\x72\x61\xc4\x52\x31\x10\x4d\x99\x13\xae\xf0\x6f\xab\xd5\x8f\xaf\xf8\xc4\x33\xba\xcc\x76\x37\xc7\x48\xb5\x2d\xf7\xeb\xcd\x6c\x77\xbe\x1f\x52\x2d\x33\x87\xcd\xf6\x9e\xc6\x51\xec\x87\xd4\xcc\x89\xea\x86\xf3\xd7\x45\xdd\x1a\x88\xc3\xa5\xc4\x7f\x00\x00\x00\xff\xff\x3b\x4a\xba\xaf\x23\x01\x00\x00") func _templateHeaderTmplBytes() ([]byte, error) { return bindataRead( @@ -115,12 +115,12 @@ func _templateHeaderTmpl() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "_template/header.tmpl", size: 273, mode: os.FileMode(420), modTime: time.Unix(1, 0)} + info := bindataFileInfo{name: "_template/header.tmpl", size: 291, mode: os.FileMode(420), modTime: time.Unix(1, 0)} a := &asset{bytes: bytes, info: info} return a, nil } -var __templateMainTmpl = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xdc\x5a\xdd\x73\xdb\x36\x12\x7f\xd7\x5f\xb1\xf5\xb8\x39\x32\x55\xe8\x3e\x3b\xf5\xc3\x39\x4e\x2f\x9a\xc9\xf5\x32\x76\x73\x2f\x9d\x4e\x86\x22\x97\x32\xc6\x14\xa0\x03\x41\x49\x39\x56\xff\xfb\x0d\xbe\x48\x90\x04\x45\x5a\xa3\xba\xed\xe9\xc5\x34\x3e\x16\xbb\xbf\x5d\xec\x07\x80\xaa\x82\x14\x33\x42\x11\x2e\xd6\x31\xa1\x17\x70\x38\xcc\xaa\x0a\x2e\x37\x4f\x2b\xb8\xbe\x81\xcb\xe8\x53\x9c\x3c\xc5\x2b\x34\xed\x02\xd7\x9b\x3c\x16\x08\x17\x8f\x18\xa7\xc8\x2f\xe0\x52\xf6\xc8\x2e\x1e\xd3\x15\xc2\x65\xa1\x66\x3d\x08\x5e\x26\xa2\x90\x7d\x57\x57\x20\x09\x16\xd1\x3b\xb6\x5e\x23\x15\x9a\xd2\x1b\x20\x99\x6c\xbc\x63\x49\x61\x5b\x0c\x85\x54\x52\x68\x7a\xf4\x7c\xc1\xc9\x1a\x2e\x53\x3b\x14\xa9\xef\x53\x93\xfc\x7c\xff\x51\xcf\x93\x53\x1f\x10\xcd\xf2\xba\x19\x32\xc6\x81\x63\x86\x1c\x69\x82\x91\x4b\x41\x7c\xdd\xd8\xb1\x3f\xc5\x6b\x29\x31\x14\x4a\x0c\xa8\x5c\xf6\x32\xd0\xfc\xfd\x48\x30\x4f\x15\x87\x00\x00\x46\xca\xcc\x23\x65\x4c\x53\x08\x54\x0f\x4d\x89\x20\x8c\xc6\x79\x08\x01\x65\x02\xda\x8d\xb7\x8c\xe5\x61\xc3\xf9\xe7\x02\xe1\x01\x85\xa6\x6a\x19\x92\xb4\xfe\xd1\x6d\x7c\xc4\x7c\x83\xbc\x68\x09\x23\x79\xb2\x90\x64\xd1\x1d\x2b\x97\x39\x3e\xe4\x24\xc1\xa6\xd3\x25\xf1\xcb\xaf\xbf\xfc\xaa\x5b\x7e\x96\x28\x38\x04\x30\x2f\xd0\x50\x39\x3a\xff\xc8\x6c\xef\x8c\x81\xf1\x3d\xbd\x1e\x66\x8d\x05\x99\xb9\x72\xd2\xe2\x0e\x48\x01\x3f\x7f\x04\xa5\x35\x92\x02\xcb\xda\x83\xa2\x59\xc2\x68\x21\xbc\x33\x6f\xe0\xfb\xbd\x6e\xff\x80\xfb\xc5\x1d\x1c\x0e\x6f\xd5\x2a\xef\x69\xc2\x52\x04\xb2\xde\xe4\x28\x95\x58\xc0\x92\xd0\x48\xb7\xf2\x68\x96\x95\x34\x81\x40\x4f\xbc\xc7\x04\xc9\x16\xb9\x14\xe5\x75\x6b\x8d\xd0\x90\x31\x03\x6f\xcb\xec\xef\x7c\xa5\x86\x49\x62\xb7\x65\x96\x21\x0f\x01\x39\x67\x1c\x2a\x25\x38\xb1\xac\xbb\x44\x6f\x6e\x80\x92\xdc\x8c\x90\x3f\x8e\xa2\xe4\x14\xb2\xb5\x88\xde\xcb\xc9\x59\x70\x91\xc4\xf4\x6f\x02\x50\x73\x6d\x48\xc4\x3b\x83\x29\xc4\x85\xa4\x70\x11\x2a\x0a\x7a\x57\x3b\xec\x44\x9f\x4a\xb1\xb8\x0b\x3c\xf0\x84\xe3\xd6\x6e\x2c\xcb\x6f\xc3\x7d\xf3\x73\x06\xd8\x4e\x9f\xcc\x91\xdd\x41\xf5\x68\xb5\xaa\xec\xf9\x10\x17\x41\xaf\x77\x41\x53\xdc\x2b\xc4\xab\xae\x01\xb5\xd7\xff\x37\x26\x82\x71\xd7\x0e\x3b\x40\xe8\x01\x1f\x94\x4b\x0b\x72\xa4\x7d\x25\x47\x2d\xeb\x0d\x35\xa8\xd2\x97\x54\x95\x59\xc4\x98\x09\x1c\x0e\x24\x95\xd6\x65\x4c\xff\x8b\xfc\x54\x4c\xcd\x7b\x1b\xb2\xe6\x8b\xb3\x5d\x55\xc9\x09\x87\xc3\xb6\xaa\x90\xa6\x87\x83\xc4\x5d\xeb\x60\x84\x17\x47\x78\x2f\xed\xda\x80\xa6\xc8\xcd\xd9\xce\xc8\x66\xe5\xfb\x32\x87\x6d\xc3\x0b\x67\xbb\x31\xb0\x1b\x1c\x9c\x95\x6d\xe7\x82\x0a\xe4\x59\xdc\xb8\x11\xfb\x23\x19\x6c\xfb\x36\x3f\x60\xf7\x25\x8d\x97\x39\x82\x60\x43\xb6\x7f\x0d\x99\xb2\x1c\x0d\xd4\x7d\xbc\xb3\x58\xa1\xde\xd8\xb0\x23\xe2\x11\x88\xb2\x9f\x6f\x53\xe9\x49\xe4\x4e\x99\x03\x49\xf7\x61\x6b\xf1\xb6\x0c\x4a\x31\x33\x87\x65\xe4\x5c\x62\xb3\x8d\xfc\x5b\x3e\x7c\xab\x46\x7c\xf3\xc7\x88\x75\x0d\xdf\xee\xb4\x4c\x73\xc9\x46\x23\x98\xdf\x3d\x0f\x98\x88\x5e\xeb\x47\xe9\xfa\x0e\x87\x60\x1b\x1e\x57\xfe\x90\xed\xf5\x3c\xfc\x30\x1f\x83\x96\x74\xc4\x8a\x8e\x78\x13\x0b\xd1\x14\x7f\x7a\xba\x02\x48\xdb\xd7\xf6\x0d\xa6\x31\x96\x11\x46\x9f\x69\x4a\xe7\x94\xc2\x18\x4c\x6d\x2b\xc3\x61\xfc\xa8\x8d\x8c\xf9\xce\x21\x0b\xf2\x1a\x94\x27\x74\x0c\xce\xe8\x27\x0f\x0e\x42\x94\xe4\x33\x95\xa8\x1e\x09\x6d\xb5\x2f\xef\xac\xaa\xf2\xc8\x4e\xd2\x55\xa0\x28\x60\x1b\xe7\x25\xda\xd4\xa3\xe9\x4b\x9c\xe9\x0a\xea\xe9\xb9\x43\x77\x9d\x40\x2f\x51\x73\xd6\xce\xe4\x4c\xda\xe6\xc9\xd1\x74\xbb\x42\xa1\x9d\x6a\x85\x26\x9b\xed\x09\xea\x86\x6e\xe9\x8d\xf5\xba\x1d\xd7\x30\x2d\x5a\x3f\xa0\x38\x12\xad\xb5\x12\x35\xd3\xa7\xd1\xff\x4c\x8b\x09\x2b\xcc\xfc\x96\x7b\x36\x11\x46\x3d\x8e\xc6\xb0\x93\xcc\x8e\xa6\x4e\x57\x57\xfd\x0c\x5f\xdb\xf0\x74\x7b\x93\x75\x82\x24\xb4\x64\x2c\xc7\x98\xc2\xee\x91\x24\x8f\xd2\x49\x09\x5e\x2a\x4b\xd1\xa3\x76\x71\x21\xed\x78\xba\x75\x76\x19\x0b\x42\x38\x83\x81\xb6\xec\x73\x0e\xec\x49\xf1\x1d\x36\xd9\xf1\x37\x67\x4f\x15\x1d\xc7\xa0\xf8\x9f\x43\x16\xe7\x05\x3a\xfe\xc5\xf4\x8e\x28\x79\xae\x10\xb5\x7a\x35\x5a\x1e\xa8\x50\xa5\x42\xee\xd0\x57\x61\xe8\xd6\x67\x54\x18\x7a\xc2\x8b\x55\x18\x29\xfa\x2b\x0c\xc1\x7a\x51\xaf\x1b\xe7\x9a\x38\xf1\x8e\xd1\xa2\x5c\xe3\x40\xcd\x71\x4a\x78\x1b\x60\xab\x1f\xc6\xa6\xd6\x33\xc3\x0e\x71\xda\x7e\x3f\x9f\x99\x1e\xc9\xd0\x3c\x9c\xf6\x73\xe9\xdf\x65\xc3\x58\x7e\x3a\xcb\x55\xdd\x1c\xd9\xcf\x6f\x3f\x29\x94\x3f\x7d\x8c\xf4\x11\xe9\x7c\xc8\x6e\x5a\x35\x4a\xd8\x15\x74\x30\xbf\x3e\xdd\x7a\xa6\x25\x47\xf6\xd7\x16\x47\x56\x4c\x24\xdd\x4b\x39\xbe\x7f\xab\xbe\x7e\x68\x44\x54\x0d\xdf\x7d\x07\xd5\xac\x8d\xdf\x68\xf6\x5c\xcb\x4b\xe9\xc9\x58\x4d\xc1\xeb\xa5\x30\xeb\xe3\x26\x7f\xdb\x98\xab\xfa\xd2\x77\x96\xd4\xc3\x58\x22\xa1\x6d\xd4\x40\xdd\x34\xfc\x50\xe3\xf4\xb6\xfe\x52\xa8\x77\x41\xef\x98\x2a\x4c\xab\x54\x35\xab\x2a\x66\x18\x2d\x68\x6f\xac\x99\xae\xa7\xb5\xb3\xe1\x26\x8f\xff\x0b\x29\xa5\x73\xfc\xe7\x29\xec\x5d\xd5\xd5\x79\xc0\x11\xd5\x39\x25\xb3\x1c\x1d\xf9\xe3\xd8\xb1\xb2\xf9\xcf\x81\xc8\xa8\x49\x74\x37\x66\xbb\x42\xfa\xcb\x19\x41\x7f\xa3\xc0\xb3\x1c\x97\x62\x9f\xed\xe0\x06\xe2\xcd\x06\x69\x1a\x70\xb6\x9b\x6b\xc8\xa6\x78\x86\xf1\xc8\x6b\xc8\x8e\x66\x6b\x9c\xed\xfa\x0b\xfa\xe2\xec\xf9\x97\x1e\x90\x76\x00\xdf\x43\x2f\xea\x3e\xf3\x40\xed\x5c\x2e\xea\xcf\x17\x63\xa7\xd6\x5d\x3d\x00\x8f\xba\xb1\xe9\x07\x34\xa7\x39\xad\x97\xc5\x69\xc8\xa4\x4f\xf7\x52\xff\x27\x76\xd0\xcf\x4e\xfd\x07\x92\x93\x8e\x92\xcc\x85\x63\x6b\x0f\x5e\x5d\x81\xba\x78\x52\x17\x87\x4e\x9d\x57\x37\x32\xde\xdc\x55\xb9\x33\x87\xab\xbf\x4e\xf1\x57\x53\x0a\x42\x0f\x19\xa8\x2c\x9b\xaf\xfa\x94\xd4\x11\x97\x53\x8e\xbe\xa7\x45\xc9\x09\x5d\x01\xb1\x14\x0a\x20\x14\x12\xb6\xde\x90\x1c\xdf\x08\xb2\x46\x7b\xc9\xe1\xde\xac\xc9\x70\x1f\xcc\xbe\xb8\xb7\x63\x70\x63\xd7\x33\xa3\xaa\x83\x19\x60\x8a\x5b\xdf\x00\x3f\x82\x5f\x7c\x52\xf9\x67\x1b\x51\xc2\x99\x73\xfd\xfb\x4f\x14\x8f\x2c\x6d\xdd\x3c\xd7\x4d\x40\xe8\x96\x3d\x61\x01\x6b\xdd\xd2\xab\x68\x35\x74\x12\x11\x5d\x3e\xab\xeb\xdb\xaf\xd1\xc8\x85\x35\xfc\x41\x37\xd6\x0d\x85\x7b\x2c\xca\x5c\xf8\xda\x1e\x08\x5d\x95\x79\xac\xfc\x9d\x36\xb0\x04\x5e\xbf\xcb\x09\x52\x11\x76\xe1\x09\x12\xb1\x97\xe6\x25\x70\x2f\x64\x31\x28\xff\xce\x81\xe3\x7f\x4a\x2c\x44\xef\x10\x22\x78\x6d\x0d\xcc\xac\x3d\xd7\xa0\xd9\x92\x51\xe5\xf3\xba\xaf\x33\xb0\x73\x52\x90\x44\x7c\x93\x44\x0b\xa5\x9a\xfb\x78\x27\xb9\xa8\x57\x9d\xc3\x2b\x4d\x63\xe4\x84\x80\x92\x5c\x2d\xdf\x3f\xc1\x31\xf3\xe7\x66\xdb\xba\x9e\xf1\xcc\x78\x9c\x04\x87\xf1\xb6\xb7\x6c\xff\xa2\xa8\xe8\xe9\x91\xcb\xc9\x6d\x5c\x60\x9d\xad\x38\x60\x39\x86\xfb\xbb\xe0\xe6\x1e\x54\x49\x90\xd8\x13\xfc\xeb\xe9\x79\x60\xb0\xa7\x11\x20\xbc\x18\xf8\x65\xb4\x9f\xce\x69\x5e\x7d\x78\xa4\xde\xb6\x2c\x1a\x5f\xd9\x38\x19\xf7\xac\x76\xc3\xb1\x50\x3e\xbf\x8e\x6b\xd6\xbd\xac\x90\x22\x27\x89\x7a\xb4\x10\xc9\xfd\xde\x24\x72\xb5\x0f\xa8\x1d\x40\x36\xe0\x00\xcc\x34\xc3\x9e\xf4\xe2\xfb\x58\xc6\x99\x6b\xf9\x0d\x2b\x6f\xce\x67\x63\xfa\xb2\xcc\x42\x35\xac\x1b\xce\x65\x9b\xfc\x6d\x62\x4a\x92\x40\x45\x5e\xd9\xa4\xe8\x43\xb1\x23\x22\x79\xd4\xf7\xc0\xab\x28\x90\xdc\xeb\x6b\x04\x0b\x4c\xa2\x3c\xa0\x3a\x40\xb2\x41\xae\x80\x37\x9a\x3b\x48\xe2\x02\xb5\xd2\x93\xa8\x0e\xf0\x06\xb6\xc4\x41\xc7\x62\x6e\xe7\xa5\x98\xc5\x65\x2e\xae\x0d\x4f\x5b\xcb\x51\xfd\x4e\xa7\xc1\xbc\x0e\x5f\x46\xf3\x4e\x60\xaa\xff\x37\x71\x48\xfd\xdf\x0d\xa1\x35\xa5\x99\x7b\x4c\xdb\x82\xae\x73\x66\x1b\xf3\xaf\x90\xe2\x9b\x02\x39\x89\x73\xf2\xdf\x58\x10\x46\xeb\x50\xd9\xe4\x8a\x7a\xab\xf8\xc8\x49\x55\xb4\x0f\x6c\x83\x4e\xc1\xd0\xf2\x1e\x24\xad\xf5\xba\x2c\xb3\xe8\x13\xe2\xd3\xe2\xce\xa4\x68\x43\xa9\xd9\xb0\x13\x30\x0a\x25\xa9\x73\x99\x7f\x4c\x95\xc6\x65\x2b\x4d\xb6\x14\xa9\x4f\x6f\xaf\xeb\x25\x2d\x76\x32\x82\x76\xf5\x1b\xd5\xa3\xb6\x36\xf9\x4c\x9c\x70\xde\x49\x34\xd5\xb5\xba\x49\xb5\xa5\xd5\x8e\x5f\xa5\x2b\x39\x47\xf3\xcf\x2c\x3a\x92\x64\x1e\xba\xd8\xbd\xda\x6a\x57\xe8\x49\x16\xad\x79\x7a\xe1\x7e\x36\x1b\xd2\x10\x7e\xc2\xdd\x67\x8a\xfb\x0d\x26\x02\xd3\xc5\x5d\x40\xd2\xd0\x9e\x60\x37\xaf\xa0\x1a\x0b\x5a\xb2\x3d\x16\x20\x1e\xbb\x9b\x61\xc3\xd9\x96\x28\x0d\xc4\xe6\x69\x58\xe4\xee\x99\x26\xe0\x34\xcf\xdb\xa0\x7e\x9e\xe5\x04\x81\x23\x3b\x63\xe0\x02\xc3\xd9\x00\xcd\x2a\x36\xaf\x5d\x6a\x1f\xe0\x76\xd5\x17\x19\xbd\xbd\xd0\xb9\xbc\x58\x3e\xf3\xfa\xbe\x05\xb4\x23\xb0\xe7\xc2\x62\x3b\xee\x2f\x27\xec\xb1\xa3\x6c\x48\x45\xa5\xba\x18\xf1\x5f\xb1\x2f\xa3\x3e\xf8\x37\xb0\xf5\xd4\x1c\x23\x8f\xd4\x9e\xaf\x00\xf3\xda\x60\xb2\x02\x7e\xfb\xcd\xcf\xed\xa9\xef\x12\x9c\xa7\x8d\xfd\x27\x14\x86\x88\x67\xc1\xa8\xe1\x3b\x9c\x75\xa3\xb5\xf9\xfc\x5f\x00\x00\x00\xff\xff\x7b\xfd\xf1\xcb\xdb\x2a\x00\x00") +var __templateMainTmpl = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xdc\x5a\xdd\x73\xdb\x36\x12\x7f\xd7\x5f\xb1\xf5\xa4\x39\x32\x55\xe8\x3e\x3b\xf5\xc3\x39\x4e\x2f\x9a\xc9\xf5\x32\x76\x73\x2f\x9d\x4e\x86\x22\x97\x32\xc6\x14\xa0\x03\x41\x49\x39\x55\xff\xfb\x0d\xbe\x48\x10\x04\x45\x5a\xe3\xa6\xed\xe9\xc5\x34\x3e\x16\xbb\xbf\x5d\xec\x07\x80\xc3\x01\x72\x2c\x08\x45\xb8\x58\xa7\x84\x5e\xc0\xf1\x38\x3b\x1c\xe0\xc5\xe6\x71\x05\x57\xd7\xf0\x22\xf9\x98\x66\x8f\xe9\x0a\x4d\xbb\xc0\xf5\xa6\x4c\x05\xc2\xc5\x03\xa6\x39\xf2\x0b\x78\x21\x7b\x64\x17\x4f\xe9\x0a\xe1\x45\xa5\x66\xdd\x0b\x5e\x67\xa2\x92\x7d\x97\x97\x20\x09\x56\xc9\x5b\xb6\x5e\x23\x15\x9a\xd2\x6b\x20\x85\x6c\xbc\x65\x59\x65\x5b\x0c\x85\x5c\x52\x68\x7b\xf4\x7c\xc1\xc9\x1a\x5e\xe4\x76\x28\xd2\xd0\xa7\x26\xf9\xe9\xee\x83\x9e\x27\xa7\xde\x23\x9a\xe5\x75\x33\x14\x8c\x03\xc7\x02\x39\xd2\x0c\x13\x97\x82\xf8\xb2\xb1\x63\x7f\x4a\xd7\x52\x62\xa8\x94\x18\x70\x70\xd9\x2b\x40\xf3\xf7\x23\xc1\x32\x57\x1c\x02\x00\x18\x29\x8b\x80\x94\x29\xcd\x21\x52\x3d\x34\x27\x82\x30\x9a\x96\x31\x44\x94\x09\xe8\x36\xde\x30\x56\xc6\x2d\xe7\x9f\x2a\x84\x7b\x14\x9a\xaa\x65\x48\xd2\xfa\x87\xdf\xf8\x80\xe5\x06\x79\xd5\x11\x46\xf2\x64\x21\x29\x92\x5b\x56\x2f\x4b\xbc\x2f\x49\x86\x6d\xa7\x4b\xe2\x97\x5f\x7f\xf9\x55\xb7\xfc\x2c\x51\x70\x08\x60\x59\xa1\xa1\x72\x72\xfe\x89\xd9\xc1\x19\x03\xe3\x7b\x7a\x55\xc6\xa5\xe4\x50\x88\x55\xc9\xbf\x31\x13\x8c\x77\x2c\xcb\xd0\x94\xc4\x16\xb7\x40\x2a\xf8\xf9\x03\x28\x6d\x92\x1c\x58\xd1\x1d\x94\xcc\x32\x46\x2b\x11\x9c\x79\x0d\xdf\xef\x75\xfb\x7b\xdc\x2f\x6e\xe1\x78\x7c\xe3\xb2\x22\x17\x7c\x47\x33\x96\x23\x90\xf5\xa6\x44\xa9\xe7\x0a\x96\x84\x26\xba\x95\x27\xb3\xa2\xa6\x19\x44\x9a\xc6\x1d\x66\x48\xb6\x28\x59\x85\x57\x9d\xe5\x62\x43\xc6\x0c\xbc\xa9\x8b\xbf\xf3\x95\x1a\x26\x89\xdd\xd4\x45\x81\x3c\x06\xe4\x9c\x71\x38\x28\x6c\x88\x95\xc2\x25\x7a\x7d\x0d\x94\x94\x66\x84\xfc\x71\x14\x35\xa7\x50\xac\x45\xf2\x4e\x4e\x2e\xa2\x8b\x2c\xa5\x7f\x13\x80\x9a\x6b\x43\x22\xdd\x19\xd8\x21\xad\x24\x85\x8b\x58\x51\x38\x0e\x02\xed\xb1\x99\x7c\xac\xc5\xe2\x36\x0a\x20\x18\xfb\x3b\xf2\xe4\x9e\x71\x97\xeb\xed\x84\xbe\x11\x3b\x03\x6c\x67\x08\x96\xc4\xee\xc3\x66\xb4\x5a\x55\xf6\xbc\x4f\xab\xa8\xd7\xbb\xa0\x39\xee\x95\x52\x0e\xbe\x19\x76\xd7\x6f\xf1\xb0\xd6\xec\x61\xa2\x07\xbc\x57\x8e\x31\x2a\x91\xf6\xed\x20\xe9\xec\x81\x58\xe3\x2e\x3d\xd2\xe1\x60\x16\x31\x96\x04\xc7\x23\xc9\xa5\x2d\x9a\x0d\xf4\x59\x7e\x2a\xa6\xe6\xbd\x6d\xdd\xf0\xc5\xd9\xee\x70\x90\x13\x8e\xc7\xed\xe1\x80\x34\x3f\x1e\x25\xee\x5a\x07\x23\xbc\x38\xc2\x07\x69\x37\x36\x36\x45\x6e\xce\x76\x46\x36\x2b\xdf\xe7\x39\x6c\x5b\x5e\x38\xdb\x8d\x81\xdd\xe2\xe0\xac\x6c\x3b\x17\x54\x20\x2f\xd2\xd6\x19\xd9\x1f\x29\x60\xdb\xdf\x16\x03\x5b\xa3\xa6\xe9\xb2\x44\x10\x6c\x68\x7b\x5c\x41\xa1\x2c\x47\x03\x75\x97\xee\x2c\x56\xa8\xf7\x3e\xec\x88\x78\x00\xa2\xec\xe7\xdb\x5c\xfa\x1d\xb9\x99\xe6\x40\xf2\x7d\xdc\x59\xbc\x2b\x83\x52\xcc\xcc\x61\x19\x39\x97\xd8\x6c\x93\xb0\x57\x88\xdf\xa8\x11\xdf\xfc\x31\x62\x5d\xc1\xb7\x3b\x2d\xd3\x5c\xb2\xd1\x0a\x16\x76\xf2\x03\x26\xa2\xd7\xfa\x51\x7a\xc7\xe3\x31\xda\xc6\xa7\x95\x3f\x64\x7b\xbd\x38\x31\xcc\xc7\xa0\x25\x9d\xb0\xa2\x13\xde\xc4\x42\x34\xc5\xe5\x9e\xaf\x00\xd2\x75\xc7\x7d\x83\x69\x8d\x65\x84\xd1\x27\x9a\xd2\x73\x4a\x61\x0c\xa6\xb1\x95\xe1\x64\xe0\xa4\x8d\x8c\xf9\xce\x21\x0b\x0a\x1a\x54\x20\x74\x0c\xce\xe8\xa7\x20\x0e\x42\x94\x94\x36\x23\x19\x0c\x6d\x8d\x2f\xf7\x56\x55\xd9\xa8\x97\xba\x55\x28\x2a\xd8\xa6\x65\x8d\x36\x51\x69\xfb\x32\x67\xba\x82\x7a\x7a\x7a\xe1\xaf\x13\xe9\x25\x1a\xce\xba\xf9\xa0\x49\xfe\x02\x99\x9e\x6e\x57\x28\x74\x13\xb6\xd8\xe4\xc4\x3d\x41\xdd\xd0\x2d\xbd\xb1\x5e\xd7\x73\x0d\xd3\xa2\xf5\x3d\x8a\x13\xd1\x5a\x2b\x51\x33\x7d\x1e\xfd\x4f\xb4\x9a\xb0\xc2\x2c\x6c\xb9\xcf\x26\xc2\xa8\xc7\xd1\x18\x9e\x48\x89\x83\xf8\x5f\x5e\xf6\xeb\x04\x6d\xc3\xd3\xed\x4d\x56\x1b\x92\xd0\x92\xb1\x12\x53\x0a\xbb\x07\x92\x3d\x48\x27\x25\x78\xad\x2c\x45\x8f\xda\xa5\x95\xb4\xe3\xe9\xd6\xe9\x33\x16\xc5\xf0\x0c\x06\xda\xb1\xcf\x39\xb0\x47\xc5\x77\xdc\x26\xd0\xdf\x3c\x7b\xaa\xe8\x38\x06\xc5\xff\x1c\x8a\xb4\xac\xd0\xf1\x2f\xa6\x77\x44\xc9\x73\x85\xa8\xd5\xab\xad\x36\xc2\xce\x48\x2a\xe4\x16\x43\x45\x88\x6e\x7d\x42\x11\xa2\x27\x7c\xb5\x22\x24\xc7\x70\x11\x22\xd8\xa4\x22\x24\x14\xff\xda\xf8\xf1\x96\xd1\xaa\x5e\xe3\x40\x59\x72\x4e\xd8\x1b\x60\xb7\x1f\xde\xce\x28\x79\x86\x7d\xe6\x34\x97\xf0\x7c\x96\x7c\x22\x89\x0b\x70\xda\x4f\xb7\x7f\x97\x3d\x65\xf9\xf1\x96\x3b\xf8\x69\x74\x98\xdf\x7e\xde\x28\x7f\xfa\xbc\xea\x03\xd2\xf9\x90\x09\x75\xca\x98\xd8\x17\x74\x30\x05\x3f\xdf\x90\xa6\xe5\x4f\xf6\xd7\x15\x47\x16\x55\x24\xdf\x4b\x39\xbe\x7f\xa3\xbe\x7e\x68\x45\x54\x0d\xdf\x7d\x07\x87\x59\x17\xbf\xd1\x04\xbb\x91\x97\xd2\xb3\xb1\x9a\x82\xd7\xd7\xc2\xac\x8f\x9b\xfc\x6d\x53\xae\x4a\xd0\xd0\xa1\x55\x0f\x63\x89\x84\xb6\x51\x03\x75\xdb\xf0\x43\x83\xd3\x9b\xe6\x4b\xa1\xee\x83\xee\x99\x2a\x4c\x2b\x66\x35\xab\x2a\xac\x18\x2d\x68\x87\xad\x99\x6e\xa6\x75\x13\xe6\x36\xd5\xff\x0b\x29\xc5\x3b\x67\x0c\xd4\xfe\xae\xea\x9a\x54\xe1\x84\xea\x9c\xaa\x5a\x8e\x4e\xc2\xa1\xee\x54\x65\xfd\xe7\x40\x64\xd4\x24\xfc\x8d\xd9\x2d\xa2\xfe\x72\x46\xd0\xdf\x28\xf0\x24\xc7\xa5\xd8\x67\x3b\xb8\x86\x74\xb3\x41\x9a\x47\x9c\xed\xe6\x1a\xb2\x29\x9e\x61\x3c\xf2\x1a\xb2\xa3\x09\x1d\x67\xbb\xfe\x82\xa1\x38\xfb\xfc\x4b\x0f\x48\x3b\x80\xef\xb1\x17\x75\x9f\x78\xe6\xf6\x5c\x2e\xea\xcf\x17\x63\xa7\x96\x66\x3d\x00\x4f\xba\xb1\xe9\x67\x38\xe7\x39\xad\xaf\x8b\xd3\x90\x49\x9f\xef\xa5\xfe\x4f\xec\xa0\x9f\x9d\x86\xcf\x2c\x27\x9d\x36\x99\x9b\xcd\xce\x1e\xbc\xbc\x04\x75\x93\xa5\x6e\x28\x9d\x52\xb0\x69\x64\xbc\xbd\xfc\x72\x67\x0e\x17\x88\x5e\x7d\xd8\x50\x8a\xe2\x00\x19\x38\x58\x36\x5f\xf6\x29\xa9\x53\xb0\xce\xb5\x59\x55\x73\x42\x57\x40\x2c\x85\x0a\x08\x85\x8c\xad\x37\xa4\xc4\xd7\x82\xac\xd1\xde\x83\xb8\x57\x75\x32\xdc\x47\xb3\xcf\xee\x1d\x1b\x5c\xdb\xf5\xcc\xa8\xc3\xd1\x0c\x30\xf5\x6f\x68\x40\x18\xc1\xcf\x21\xa9\xc2\xb3\x8d\x28\xf1\xcc\xb9\x67\xfe\x27\x8a\x07\x96\x77\x2e\x22\x9b\x26\x20\x74\xcb\x1e\xb1\x82\xb5\x6e\xe9\x15\xbd\x1a\x3a\x89\x88\xae\xb0\xd5\x3d\xf1\x97\x64\xe4\x66\x1c\xfe\xa0\xab\xf1\x96\xc2\x1d\x56\x75\x29\x42\x6d\xf7\x84\xae\xea\x32\x55\xfe\x4e\x1b\x58\x06\xaf\xde\x96\x04\xa9\x88\x7d\x78\xa2\x4c\xec\xa5\x79\x09\xdc\x0b\x59\x0c\xca\xbf\x73\xe0\xf8\x9f\x1a\x2b\xd1\x3b\xa7\x88\xb4\xfa\xcc\x89\x80\x5e\xad\x49\x01\x5e\x59\xe3\x33\x7c\xb5\x77\x66\x3a\xbd\xb7\x5d\xc6\xd9\x38\xf7\x68\x0a\x78\x5b\x76\xaa\x9a\x40\xd3\xf0\x08\x7a\x07\x0f\x59\xc2\x37\x59\xb2\x50\xea\xbd\x4b\x77\x52\x92\x86\xf3\x39\xbc\xd4\x34\x46\x0e\x1c\x28\x29\xd5\xf2\x9e\x2f\x70\xd1\xec\xa6\x38\x66\x9e\x26\x9e\xbc\x2b\x71\x5d\xcd\x95\x77\x08\xb9\x60\xbb\x2b\xf5\x68\x6f\x9c\x3d\x41\x74\x27\x3d\xbf\xb6\x5c\xfc\xa6\x01\x6d\xd4\x73\xc3\xf6\x5f\x07\xef\x2e\xa2\x2e\x27\x37\x69\x85\x4d\x2e\xa5\x3d\xb0\xbf\xad\x7e\x17\xdc\xdc\x93\x36\x09\x12\x7b\x84\x7f\x3d\x3e\x0d\x0c\xf6\x38\x02\x44\x10\x83\xb0\x8c\xf6\xd3\x39\x8e\x6c\x8e\xb6\xd4\x13\x9f\x45\xeb\xc9\x5b\x17\xe8\x1e\x36\x6f\x38\x56\x2a\x22\x35\x51\xd7\x3a\xbf\x15\x52\xe4\x24\x53\x6f\x34\x12\xe9\x8d\xda\x34\xb3\xf1\x50\x8d\x7b\x2a\x06\xdc\x93\x99\x66\xd8\x93\x31\x66\x9f\xca\x28\x78\x25\xbf\x61\x15\xcc\x48\x6d\xc6\xb1\xac\x8b\x58\x0d\xf3\x93\x0d\xd9\x26\x7f\x9b\x94\x92\x2c\x52\x79\x81\x6c\x52\xf4\xa1\xda\x11\x91\x3d\xe8\x8b\xec\x55\x12\x49\xee\xf5\x3d\x88\x05\x26\x53\xfe\x59\x1d\x6f\xd9\x10\x5c\xc1\x6b\xcd\x1d\x64\x69\x85\x5a\xe9\x59\xd2\xa4\x1f\x06\xb6\xcc\x41\xc7\x62\x6e\xe7\xe5\x58\xa4\x75\x29\xae\x0c\x4f\x5b\xcb\x51\xf3\x5c\xa9\xc5\xbc\x09\xae\x46\xf3\x4e\xd8\x6c\xfe\x37\x51\x52\xfd\xef\x07\xf8\x86\xd2\xcc\x3d\x67\xee\x40\xe7\x1d\x3a\xa7\xfc\x0b\xe4\xf8\xba\x42\x4e\xd2\x92\xfc\x37\x15\x84\xd1\x26\x90\xb7\x99\xac\xde\x2a\x21\x72\x52\x15\xdd\x13\xe7\xc8\x2b\x67\x3a\xde\x83\xe4\x8d\x5e\x97\x75\x91\x7c\x44\x7c\x5c\xdc\x9a\x04\x72\x28\x71\x1c\x76\x02\x46\xa1\x24\x77\x5e\x23\x9c\x52\xa5\x71\xb0\x4a\x93\x1d\x45\xea\x63\xe6\xab\x66\x49\x8b\x9d\x8c\xef\xbe\x7e\x93\x66\xd4\xd6\xa6\xc6\x99\x93\x6c\x78\x69\xb0\x7a\x17\x60\x0a\x01\x69\xb5\xe3\x6f\x01\x94\x9c\xa3\xd9\x71\x91\x9c\x48\x81\x8f\x3e\x76\x2f\xb7\xc1\x30\x22\xff\xb5\xe6\x19\x84\xfb\xc9\x6c\x48\x43\xf8\x09\x77\x9f\x28\xee\x37\x98\x09\xcc\x17\xb7\x11\xc9\x63\x7b\xd4\xae\xcd\xb2\x6b\x41\x4b\xb6\xc7\x0a\xc4\x83\xbf\x19\x36\x9c\x6d\x89\xd2\x40\x6a\x5e\xc8\x25\xee\x9e\x69\x03\x4e\xfb\xca\x0f\x9a\x57\x6a\x4e\x10\x38\xb1\x33\x06\x6e\x60\x9c\x0d\xd0\xae\x62\xb3\xee\xa5\xf6\x01\x6e\x57\x73\x13\xd3\xdb\x0b\xde\xed\xcb\xf2\x89\xef\x0f\x3a\x40\x3b\x02\x7b\x37\x2e\xca\x16\xc7\xfd\xe5\x84\x3d\x76\x92\x0d\xa9\xa8\x5c\x97\x4a\xe1\x37\x02\xcb\xa4\x0f\xfe\x35\x6c\x03\x15\xd1\xc8\x43\xbc\xa7\x2b\xc0\x3c\x97\x98\xac\x80\xdf\x7e\x0b\x73\x7b\xee\xc3\x0a\xe7\x85\x67\xff\x0d\x88\x21\x12\x58\x30\x69\xf9\x8e\x67\x7e\xb4\x36\x9f\xff\x0b\x00\x00\xff\xff\x9c\x5a\x4c\xa0\xe2\x2b\x00\x00") func _templateMainTmplBytes() ([]byte, error) { return bindataRead( @@ -135,12 +135,12 @@ func _templateMainTmpl() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "_template/main.tmpl", size: 10971, mode: os.FileMode(420), modTime: time.Unix(1, 0)} + info := bindataFileInfo{name: "_template/main.tmpl", size: 11234, mode: os.FileMode(420), modTime: time.Unix(1, 0)} a := &asset{bytes: bytes, info: info} return a, nil } -var __templateRegistryTmpl = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x8f\x31\x4b\x04\x31\x14\x84\xfb\xfc\x8a\x21\x6c\xa1\xa0\x7b\xa2\xdd\x81\x9d\x85\x82\x82\x1c\xd7\x89\xc5\xe3\x76\x36\x86\xbb\xe4\x42\x92\xc5\x5b\x42\xfe\xbb\xc4\x5d\xac\x2c\xdf\x0c\xf3\xf1\xbe\x52\x30\x70\xb4\x9e\xd0\x91\xc6\xa6\x1c\x67\x8d\x5a\x55\x29\xe8\xc2\xd1\x60\xfb\x88\xae\x7f\x97\xc3\x51\x0c\xd7\x3c\xd3\x85\x93\x64\x42\x7f\x51\x06\x46\x8d\xae\x35\x6a\xb3\xc1\x7e\x0e\x4c\x88\xcc\x53\xf4\x09\x4e\x42\xb0\xde\x60\x8c\x67\x87\x3c\x07\xc2\x0e\x09\xf9\x8c\xfd\xeb\x72\x7a\x71\x4c\xbd\x1a\x27\x7f\x58\xa6\x6f\x12\xae\xae\xdb\xee\x63\xb2\x3e\x3f\xdc\x7f\xa6\x1c\x1b\xa1\x28\xac\xd4\x7f\xcb\x52\x6e\x11\xc5\x1b\xa2\xe3\x89\x6e\x79\x7a\xb7\xea\xb4\xdf\x00\xe0\xee\xd2\x9c\x5a\xdf\x3f\xf3\xf2\xf2\x84\x5a\xb7\xd0\x7f\xd9\x4e\xbe\x51\xab\xbe\xf9\x85\xd1\x0f\xcb\xac\xaa\xaa\x9a\xf3\x1a\xfc\x04\x00\x00\xff\xff\x97\x1b\x2c\x20\x2e\x01\x00\x00") +var __templateRegistryTmpl = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x8f\xcf\x4a\x34\x31\x10\xc4\xef\x81\xbc\x43\x11\xe6\xf0\x7d\xa0\xb3\xa2\xb7\x05\x6f\x1e\x14\x14\x64\xd9\x9b\x78\x68\x76\x7a\x62\xd8\x4d\x36\x24\x19\xdc\xa1\xc9\xbb\xcb\xfc\x71\x4f\x1e\xbb\xaa\xab\xa8\x9f\x08\x3a\xee\x5d\x60\x98\xc4\xd6\xe5\x92\x46\x83\x5a\xb5\x12\x41\x13\x8f\x16\xdb\x47\x34\xed\x3b\x1d\x8e\x64\xf9\xd7\x28\xec\xe3\x89\x0a\xc3\x7c\x31\x75\x9c\x0c\x9a\xd9\xd2\x6a\xb3\xc1\x7e\x8c\x9c\x91\xb8\x0c\x29\x64\x78\x8a\xd1\x05\x8b\x3e\x9d\x3d\xca\x18\x19\xae\xcb\x28\x67\xec\x5f\x97\x33\x90\xe7\xdc\x6a\xd5\x0f\xe1\xb0\x64\xdf\x28\xfe\xfb\x3f\x05\x3f\x06\x17\xca\xc3\xfd\x67\x2e\x69\xaa\x10\xad\xb0\xf6\xfe\xed\x8a\xdc\x22\x51\xb0\x8c\x86\x4f\xec\x97\xe9\xbb\x95\x6a\x1e\x08\x00\x77\x97\x09\x6d\x7a\x68\x9f\xf9\xf2\xf2\x84\x5a\xb7\x30\x57\x6d\x47\xdf\xa8\xd5\xdc\x2c\x75\x1c\xba\x35\x58\xb5\x9a\x09\x45\xae\xe2\x4f\x00\x00\x00\xff\xff\xfa\x22\x40\xae\x3c\x01\x00\x00") func _templateRegistryTmplBytes() ([]byte, error) { return bindataRead( @@ -155,7 +155,7 @@ func _templateRegistryTmpl() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "_template/registry.tmpl", size: 302, mode: os.FileMode(420), modTime: time.Unix(1, 0)} + info := bindataFileInfo{name: "_template/registry.tmpl", size: 316, mode: os.FileMode(420), modTime: time.Unix(1, 0)} a := &asset{bytes: bytes, info: info} return a, nil } diff --git a/internal/gen/make_bindings.go b/internal/gen/make_bindings.go index 9d87035658..2a7d2b2692 100644 --- a/internal/gen/make_bindings.go +++ b/internal/gen/make_bindings.go @@ -27,6 +27,7 @@ type classBinding struct { // Singular is special case for class where single constructor replaces // class. Singular bool + Vector bool Constructors []string // BaseName is "Auth" for user.Auth interface. diff --git a/internal/gen/make_structures.go b/internal/gen/make_structures.go index 67401e5b1e..dc046f1eca 100644 --- a/internal/gen/make_structures.go +++ b/internal/gen/make_structures.go @@ -41,7 +41,9 @@ type structDef struct { // ResultBaseName is BaseName of result interface. ResultBaseName string ResultFunc string + ResultVector bool + Vector bool // Fields of structure. Fields []fieldDef @@ -59,6 +61,14 @@ type structDef struct { Docs []string } +func (s *structDef) fillFromClass(class classBinding) { + s.Result = class.Name + s.ResultSingular = class.Singular + s.ResultBaseName = class.BaseName + s.ResultFunc = class.Func + s.ResultVector = class.Vector +} + type bindingDef struct { HexID string // id in hex Raw string // raw tl type @@ -151,13 +161,19 @@ func (g *Generator) makeStructures() error { if s.Method != "" && t.Class != "Ok" { // RPC call. class, ok := g.classes[t.Class] - if ok { - s.Result = class.Name - s.ResultSingular = class.Singular - s.ResultBaseName = class.BaseName - s.ResultFunc = class.Func + + switch { + case !ok && strings.HasPrefix(t.Class, "Vector<"): + var err error + class, err = g.instantiateVector(t.Class) + if err != nil { + return err + } + fallthrough + case ok: + s.fillFromClass(class) s.URL = g.docURL("method", typeKey) - } else { + default: // Not implemented. s.Method = "" } diff --git a/internal/gen/write_source.go b/internal/gen/write_source.go index adf49e6f93..b2bd922d34 100644 --- a/internal/gen/write_source.go +++ b/internal/gen/write_source.go @@ -2,6 +2,9 @@ package gen import ( "bytes" + "fmt" + "io" + "os" "strings" "text/template" ) @@ -37,6 +40,20 @@ func outFileName(baseName string, namespace []string) string { // WriteSource writes generated definitions to fs. func (g *Generator) WriteSource(fs FileSystem, pkgName string, t *template.Template) error { + buf := new(bytes.Buffer) + generate := func(templateName, name string, cfg config) error { + buf.Reset() + if err := t.ExecuteTemplate(buf, templateName, cfg); err != nil { + return fmt.Errorf("failed to execute template '%s' for %s: %w", templateName, name, err) + } + if err := fs.WriteFile(name, buf.Bytes()); err != nil { + _, _ = io.Copy(os.Stderr, buf) + return fmt.Errorf("failed to write file %s: %w", name, err) + } + + return nil + } + wroteConstructors := make(map[string]struct{}) for _, class := range g.interfaces { cfg := config{ @@ -49,11 +66,7 @@ func (g *Generator) WriteSource(fs FileSystem, pkgName string, t *template.Templ } name := outFileName(class.BaseName, class.Namespace) - buf := new(bytes.Buffer) - if err := t.ExecuteTemplate(buf, "main", cfg); err != nil { - return err - } - if err := fs.WriteFile(name, buf.Bytes()); err != nil { + if err := generate("main", name, cfg); err != nil { return err } } @@ -66,11 +79,7 @@ func (g *Generator) WriteSource(fs FileSystem, pkgName string, t *template.Templ Structs: []structDef{s}, } name := outFileName(s.BaseName, s.Namespace) - buf := new(bytes.Buffer) - if err := t.ExecuteTemplate(buf, "main", cfg); err != nil { - return err - } - if err := fs.WriteFile(name, buf.Bytes()); err != nil { + if err := generate("main", name, cfg); err != nil { return err } } @@ -79,21 +88,11 @@ func (g *Generator) WriteSource(fs FileSystem, pkgName string, t *template.Templ Package: pkgName, Registry: g.registry, } - buf := new(bytes.Buffer) - if err := t.ExecuteTemplate(buf, "registry", cfg); err != nil { - return err - } - if err := fs.WriteFile("tl_registry_gen.go", buf.Bytes()); err != nil { + if err := generate("registry", "tl_registry_gen.go", cfg); err != nil { return err } - - buf.Reset() - if err := t.ExecuteTemplate(buf, "client", cfg); err != nil { + if err := generate("client", "tl_client_gen.go", cfg); err != nil { return err } - if err := fs.WriteFile("tl_client_gen.go", buf.Bytes()); err != nil { - return err - } - return nil } diff --git a/tg/tl_account_get_all_secure_values_gen.go b/tg/tl_account_get_all_secure_values_gen.go index 60ff9a007c..feb6340b62 100644 --- a/tg/tl_account_get_all_secure_values_gen.go +++ b/tg/tl_account_get_all_secure_values_gen.go @@ -17,7 +17,7 @@ var _ = fmt.Stringer(nil) // AccountGetAllSecureValuesRequest represents TL type `account.getAllSecureValues#b288bc7d`. // Get all saved Telegram Passport documents, for more info see the passport docs » // -// See https://core.telegram.org/constructor/account.getAllSecureValues for reference. +// See https://core.telegram.org/method/account.getAllSecureValues for reference. type AccountGetAllSecureValuesRequest struct { } @@ -49,3 +49,15 @@ var ( _ bin.Encoder = &AccountGetAllSecureValuesRequest{} _ bin.Decoder = &AccountGetAllSecureValuesRequest{} ) + +// AccountGetAllSecureValues invokes method account.getAllSecureValues#b288bc7d returning error if any. +// Get all saved Telegram Passport documents, for more info see the passport docs » +// +// See https://core.telegram.org/method/account.getAllSecureValues for reference. +func (c *Client) AccountGetAllSecureValues(ctx context.Context, request *AccountGetAllSecureValuesRequest) ([]SecureValue, error) { + var result SecureValueVector + if err := c.rpc.InvokeRaw(ctx, request, &result); err != nil { + return nil, err + } + return result.Elems, nil +} diff --git a/tg/tl_account_get_multi_wall_papers_gen.go b/tg/tl_account_get_multi_wall_papers_gen.go index dab1e76a18..5bd35be0f9 100644 --- a/tg/tl_account_get_multi_wall_papers_gen.go +++ b/tg/tl_account_get_multi_wall_papers_gen.go @@ -17,7 +17,7 @@ var _ = fmt.Stringer(nil) // AccountGetMultiWallPapersRequest represents TL type `account.getMultiWallPapers#65ad71dc`. // Get info about multiple wallpapers // -// See https://core.telegram.org/constructor/account.getMultiWallPapers for reference. +// See https://core.telegram.org/method/account.getMultiWallPapers for reference. type AccountGetMultiWallPapersRequest struct { // Wallpapers to fetch info about Wallpapers []InputWallPaperClass @@ -73,3 +73,15 @@ var ( _ bin.Encoder = &AccountGetMultiWallPapersRequest{} _ bin.Decoder = &AccountGetMultiWallPapersRequest{} ) + +// AccountGetMultiWallPapers invokes method account.getMultiWallPapers#65ad71dc returning error if any. +// Get info about multiple wallpapers +// +// See https://core.telegram.org/method/account.getMultiWallPapers for reference. +func (c *Client) AccountGetMultiWallPapers(ctx context.Context, request *AccountGetMultiWallPapersRequest) ([]WallPaperClass, error) { + var result WallPaperClassVector + if err := c.rpc.InvokeRaw(ctx, request, &result); err != nil { + return nil, err + } + return result.Elems, nil +} diff --git a/tg/tl_account_get_secure_value_gen.go b/tg/tl_account_get_secure_value_gen.go index a6ce02b2fc..195b0f2d97 100644 --- a/tg/tl_account_get_secure_value_gen.go +++ b/tg/tl_account_get_secure_value_gen.go @@ -17,7 +17,7 @@ var _ = fmt.Stringer(nil) // AccountGetSecureValueRequest represents TL type `account.getSecureValue#73665bc2`. // Get saved Telegram Passport document, for more info see the passport docs » // -// See https://core.telegram.org/constructor/account.getSecureValue for reference. +// See https://core.telegram.org/method/account.getSecureValue for reference. type AccountGetSecureValueRequest struct { // Requested value types Types []SecureValueTypeClass @@ -73,3 +73,15 @@ var ( _ bin.Encoder = &AccountGetSecureValueRequest{} _ bin.Decoder = &AccountGetSecureValueRequest{} ) + +// AccountGetSecureValue invokes method account.getSecureValue#73665bc2 returning error if any. +// Get saved Telegram Passport document, for more info see the passport docs » +// +// See https://core.telegram.org/method/account.getSecureValue for reference. +func (c *Client) AccountGetSecureValue(ctx context.Context, request *AccountGetSecureValueRequest) ([]SecureValue, error) { + var result SecureValueVector + if err := c.rpc.InvokeRaw(ctx, request, &result); err != nil { + return nil, err + } + return result.Elems, nil +} diff --git a/tg/tl_contact_status_vector_gen.go b/tg/tl_contact_status_vector_gen.go new file mode 100644 index 0000000000..32db2e83f7 --- /dev/null +++ b/tg/tl_contact_status_vector_gen.go @@ -0,0 +1,62 @@ +// Code generated by gotdgen, DO NOT EDIT. + +package tg + +import ( + "context" + "fmt" + + "github.com/gotd/td/bin" +) + +// No-op definition for keeping imports. +var _ = bin.Buffer{} +var _ = context.Background() +var _ = fmt.Stringer(nil) + +// ContactStatusVector is a box for Vector +type ContactStatusVector struct { + // Elements of Vector + Elems []ContactStatus +} + +// Encode implements bin.Encoder. +func (vec *ContactStatusVector) Encode(b *bin.Buffer) error { + if vec == nil { + return fmt.Errorf("can't encode Vector as nil") + } + b.PutVectorHeader(len(vec.Elems)) + for idx, v := range vec.Elems { + if err := v.Encode(b); err != nil { + return fmt.Errorf("unable to encode Vector: field Elems element with index %d: %w", idx, err) + } + } + return nil +} + +// Decode implements bin.Decoder. +func (vec *ContactStatusVector) Decode(b *bin.Buffer) error { + if vec == nil { + return fmt.Errorf("can't decode Vector to nil") + } + { + headerLen, err := b.VectorHeader() + if err != nil { + return fmt.Errorf("unable to decode Vector: field Elems: %w", err) + } + for idx := 0; idx < headerLen; idx++ { + var value ContactStatus + if err := value.Decode(b); err != nil { + return fmt.Errorf("unable to decode Vector: field Elems: %w", err) + } + vec.Elems = append(vec.Elems, value) + } + } + return nil +} + +// Ensuring interfaces in compile-time for ContactStatusVector. +var ( + _ bin.Encoder = &ContactStatusVector{} + _ bin.Decoder = &ContactStatusVector{} +) diff --git a/tg/tl_contacts_get_contact_ids_gen.go b/tg/tl_contacts_get_contact_ids_gen.go index 2d047b2fd5..157c6c340a 100644 --- a/tg/tl_contacts_get_contact_ids_gen.go +++ b/tg/tl_contacts_get_contact_ids_gen.go @@ -17,7 +17,7 @@ var _ = fmt.Stringer(nil) // ContactsGetContactIDsRequest represents TL type `contacts.getContactIDs#2caa4a42`. // Get contact by telegram IDs // -// See https://core.telegram.org/constructor/contacts.getContactIDs for reference. +// See https://core.telegram.org/method/contacts.getContactIDs for reference. type ContactsGetContactIDsRequest struct { // Hash for pagination, for more info click here Hash int @@ -59,3 +59,15 @@ var ( _ bin.Encoder = &ContactsGetContactIDsRequest{} _ bin.Decoder = &ContactsGetContactIDsRequest{} ) + +// ContactsGetContactIDs invokes method contacts.getContactIDs#2caa4a42 returning error if any. +// Get contact by telegram IDs +// +// See https://core.telegram.org/method/contacts.getContactIDs for reference. +func (c *Client) ContactsGetContactIDs(ctx context.Context, request *ContactsGetContactIDsRequest) ([]int, error) { + var result IntVector + if err := c.rpc.InvokeRaw(ctx, request, &result); err != nil { + return nil, err + } + return result.Elems, nil +} diff --git a/tg/tl_contacts_get_saved_gen.go b/tg/tl_contacts_get_saved_gen.go index 102c8fe270..642dc136e4 100644 --- a/tg/tl_contacts_get_saved_gen.go +++ b/tg/tl_contacts_get_saved_gen.go @@ -17,7 +17,7 @@ var _ = fmt.Stringer(nil) // ContactsGetSavedRequest represents TL type `contacts.getSaved#82f1e39f`. // Get all contacts // -// See https://core.telegram.org/constructor/contacts.getSaved for reference. +// See https://core.telegram.org/method/contacts.getSaved for reference. type ContactsGetSavedRequest struct { } @@ -49,3 +49,15 @@ var ( _ bin.Encoder = &ContactsGetSavedRequest{} _ bin.Decoder = &ContactsGetSavedRequest{} ) + +// ContactsGetSaved invokes method contacts.getSaved#82f1e39f returning error if any. +// Get all contacts +// +// See https://core.telegram.org/method/contacts.getSaved for reference. +func (c *Client) ContactsGetSaved(ctx context.Context, request *ContactsGetSavedRequest) ([]SavedPhoneContact, error) { + var result SavedPhoneContactVector + if err := c.rpc.InvokeRaw(ctx, request, &result); err != nil { + return nil, err + } + return result.Elems, nil +} diff --git a/tg/tl_contacts_get_statuses_gen.go b/tg/tl_contacts_get_statuses_gen.go index 5e2379a3d4..d3d7b8a16b 100644 --- a/tg/tl_contacts_get_statuses_gen.go +++ b/tg/tl_contacts_get_statuses_gen.go @@ -17,7 +17,7 @@ var _ = fmt.Stringer(nil) // ContactsGetStatusesRequest represents TL type `contacts.getStatuses#c4a353ee`. // Returns the list of contact statuses. // -// See https://core.telegram.org/constructor/contacts.getStatuses for reference. +// See https://core.telegram.org/method/contacts.getStatuses for reference. type ContactsGetStatusesRequest struct { } @@ -49,3 +49,15 @@ var ( _ bin.Encoder = &ContactsGetStatusesRequest{} _ bin.Decoder = &ContactsGetStatusesRequest{} ) + +// ContactsGetStatuses invokes method contacts.getStatuses#c4a353ee returning error if any. +// Returns the list of contact statuses. +// +// See https://core.telegram.org/method/contacts.getStatuses for reference. +func (c *Client) ContactsGetStatuses(ctx context.Context, request *ContactsGetStatusesRequest) ([]ContactStatus, error) { + var result ContactStatusVector + if err := c.rpc.InvokeRaw(ctx, request, &result); err != nil { + return nil, err + } + return result.Elems, nil +} diff --git a/tg/tl_dialog_filter_suggested_vector_gen.go b/tg/tl_dialog_filter_suggested_vector_gen.go new file mode 100644 index 0000000000..23d9fdc17d --- /dev/null +++ b/tg/tl_dialog_filter_suggested_vector_gen.go @@ -0,0 +1,62 @@ +// Code generated by gotdgen, DO NOT EDIT. + +package tg + +import ( + "context" + "fmt" + + "github.com/gotd/td/bin" +) + +// No-op definition for keeping imports. +var _ = bin.Buffer{} +var _ = context.Background() +var _ = fmt.Stringer(nil) + +// DialogFilterSuggestedVector is a box for Vector +type DialogFilterSuggestedVector struct { + // Elements of Vector + Elems []DialogFilterSuggested +} + +// Encode implements bin.Encoder. +func (vec *DialogFilterSuggestedVector) Encode(b *bin.Buffer) error { + if vec == nil { + return fmt.Errorf("can't encode Vector as nil") + } + b.PutVectorHeader(len(vec.Elems)) + for idx, v := range vec.Elems { + if err := v.Encode(b); err != nil { + return fmt.Errorf("unable to encode Vector: field Elems element with index %d: %w", idx, err) + } + } + return nil +} + +// Decode implements bin.Decoder. +func (vec *DialogFilterSuggestedVector) Decode(b *bin.Buffer) error { + if vec == nil { + return fmt.Errorf("can't decode Vector to nil") + } + { + headerLen, err := b.VectorHeader() + if err != nil { + return fmt.Errorf("unable to decode Vector: field Elems: %w", err) + } + for idx := 0; idx < headerLen; idx++ { + var value DialogFilterSuggested + if err := value.Decode(b); err != nil { + return fmt.Errorf("unable to decode Vector: field Elems: %w", err) + } + vec.Elems = append(vec.Elems, value) + } + } + return nil +} + +// Ensuring interfaces in compile-time for DialogFilterSuggestedVector. +var ( + _ bin.Encoder = &DialogFilterSuggestedVector{} + _ bin.Decoder = &DialogFilterSuggestedVector{} +) diff --git a/tg/tl_dialog_filter_vector_gen.go b/tg/tl_dialog_filter_vector_gen.go new file mode 100644 index 0000000000..2fbaca104a --- /dev/null +++ b/tg/tl_dialog_filter_vector_gen.go @@ -0,0 +1,62 @@ +// Code generated by gotdgen, DO NOT EDIT. + +package tg + +import ( + "context" + "fmt" + + "github.com/gotd/td/bin" +) + +// No-op definition for keeping imports. +var _ = bin.Buffer{} +var _ = context.Background() +var _ = fmt.Stringer(nil) + +// DialogFilterVector is a box for Vector +type DialogFilterVector struct { + // Elements of Vector + Elems []DialogFilter +} + +// Encode implements bin.Encoder. +func (vec *DialogFilterVector) Encode(b *bin.Buffer) error { + if vec == nil { + return fmt.Errorf("can't encode Vector as nil") + } + b.PutVectorHeader(len(vec.Elems)) + for idx, v := range vec.Elems { + if err := v.Encode(b); err != nil { + return fmt.Errorf("unable to encode Vector: field Elems element with index %d: %w", idx, err) + } + } + return nil +} + +// Decode implements bin.Decoder. +func (vec *DialogFilterVector) Decode(b *bin.Buffer) error { + if vec == nil { + return fmt.Errorf("can't decode Vector to nil") + } + { + headerLen, err := b.VectorHeader() + if err != nil { + return fmt.Errorf("unable to decode Vector: field Elems: %w", err) + } + for idx := 0; idx < headerLen; idx++ { + var value DialogFilter + if err := value.Decode(b); err != nil { + return fmt.Errorf("unable to decode Vector: field Elems: %w", err) + } + vec.Elems = append(vec.Elems, value) + } + } + return nil +} + +// Ensuring interfaces in compile-time for DialogFilterVector. +var ( + _ bin.Encoder = &DialogFilterVector{} + _ bin.Decoder = &DialogFilterVector{} +) diff --git a/tg/tl_dialog_peer_class_vector_gen.go b/tg/tl_dialog_peer_class_vector_gen.go new file mode 100644 index 0000000000..ed3a96e28c --- /dev/null +++ b/tg/tl_dialog_peer_class_vector_gen.go @@ -0,0 +1,65 @@ +// Code generated by gotdgen, DO NOT EDIT. + +package tg + +import ( + "context" + "fmt" + + "github.com/gotd/td/bin" +) + +// No-op definition for keeping imports. +var _ = bin.Buffer{} +var _ = context.Background() +var _ = fmt.Stringer(nil) + +// DialogPeerClassVector is a box for Vector +type DialogPeerClassVector struct { + // Elements of Vector + Elems []DialogPeerClass +} + +// Encode implements bin.Encoder. +func (vec *DialogPeerClassVector) Encode(b *bin.Buffer) error { + if vec == nil { + return fmt.Errorf("can't encode Vector as nil") + } + b.PutVectorHeader(len(vec.Elems)) + for idx, v := range vec.Elems { + if v == nil { + return fmt.Errorf("unable to encode Vector: field Elems element with index %d is nil", idx) + } + if err := v.Encode(b); err != nil { + return fmt.Errorf("unable to encode Vector: field Elems element with index %d: %w", idx, err) + } + } + return nil +} + +// Decode implements bin.Decoder. +func (vec *DialogPeerClassVector) Decode(b *bin.Buffer) error { + if vec == nil { + return fmt.Errorf("can't decode Vector to nil") + } + { + headerLen, err := b.VectorHeader() + if err != nil { + return fmt.Errorf("unable to decode Vector: field Elems: %w", err) + } + for idx := 0; idx < headerLen; idx++ { + value, err := DecodeDialogPeer(b) + if err != nil { + return fmt.Errorf("unable to decode Vector: field Elems: %w", err) + } + vec.Elems = append(vec.Elems, value) + } + } + return nil +} + +// Ensuring interfaces in compile-time for DialogPeerClassVector. +var ( + _ bin.Encoder = &DialogPeerClassVector{} + _ bin.Decoder = &DialogPeerClassVector{} +) diff --git a/tg/tl_emoji_language_vector_gen.go b/tg/tl_emoji_language_vector_gen.go new file mode 100644 index 0000000000..c96496c21f --- /dev/null +++ b/tg/tl_emoji_language_vector_gen.go @@ -0,0 +1,62 @@ +// Code generated by gotdgen, DO NOT EDIT. + +package tg + +import ( + "context" + "fmt" + + "github.com/gotd/td/bin" +) + +// No-op definition for keeping imports. +var _ = bin.Buffer{} +var _ = context.Background() +var _ = fmt.Stringer(nil) + +// EmojiLanguageVector is a box for Vector +type EmojiLanguageVector struct { + // Elements of Vector + Elems []EmojiLanguage +} + +// Encode implements bin.Encoder. +func (vec *EmojiLanguageVector) Encode(b *bin.Buffer) error { + if vec == nil { + return fmt.Errorf("can't encode Vector as nil") + } + b.PutVectorHeader(len(vec.Elems)) + for idx, v := range vec.Elems { + if err := v.Encode(b); err != nil { + return fmt.Errorf("unable to encode Vector: field Elems element with index %d: %w", idx, err) + } + } + return nil +} + +// Decode implements bin.Decoder. +func (vec *EmojiLanguageVector) Decode(b *bin.Buffer) error { + if vec == nil { + return fmt.Errorf("can't decode Vector to nil") + } + { + headerLen, err := b.VectorHeader() + if err != nil { + return fmt.Errorf("unable to decode Vector: field Elems: %w", err) + } + for idx := 0; idx < headerLen; idx++ { + var value EmojiLanguage + if err := value.Decode(b); err != nil { + return fmt.Errorf("unable to decode Vector: field Elems: %w", err) + } + vec.Elems = append(vec.Elems, value) + } + } + return nil +} + +// Ensuring interfaces in compile-time for EmojiLanguageVector. +var ( + _ bin.Encoder = &EmojiLanguageVector{} + _ bin.Decoder = &EmojiLanguageVector{} +) diff --git a/tg/tl_file_hash_vector_gen.go b/tg/tl_file_hash_vector_gen.go new file mode 100644 index 0000000000..adf47f532d --- /dev/null +++ b/tg/tl_file_hash_vector_gen.go @@ -0,0 +1,62 @@ +// Code generated by gotdgen, DO NOT EDIT. + +package tg + +import ( + "context" + "fmt" + + "github.com/gotd/td/bin" +) + +// No-op definition for keeping imports. +var _ = bin.Buffer{} +var _ = context.Background() +var _ = fmt.Stringer(nil) + +// FileHashVector is a box for Vector +type FileHashVector struct { + // Elements of Vector + Elems []FileHash +} + +// Encode implements bin.Encoder. +func (vec *FileHashVector) Encode(b *bin.Buffer) error { + if vec == nil { + return fmt.Errorf("can't encode Vector as nil") + } + b.PutVectorHeader(len(vec.Elems)) + for idx, v := range vec.Elems { + if err := v.Encode(b); err != nil { + return fmt.Errorf("unable to encode Vector: field Elems element with index %d: %w", idx, err) + } + } + return nil +} + +// Decode implements bin.Decoder. +func (vec *FileHashVector) Decode(b *bin.Buffer) error { + if vec == nil { + return fmt.Errorf("can't decode Vector to nil") + } + { + headerLen, err := b.VectorHeader() + if err != nil { + return fmt.Errorf("unable to decode Vector: field Elems: %w", err) + } + for idx := 0; idx < headerLen; idx++ { + var value FileHash + if err := value.Decode(b); err != nil { + return fmt.Errorf("unable to decode Vector: field Elems: %w", err) + } + vec.Elems = append(vec.Elems, value) + } + } + return nil +} + +// Ensuring interfaces in compile-time for FileHashVector. +var ( + _ bin.Encoder = &FileHashVector{} + _ bin.Decoder = &FileHashVector{} +) diff --git a/tg/tl_int_vector_gen.go b/tg/tl_int_vector_gen.go new file mode 100644 index 0000000000..2de0004636 --- /dev/null +++ b/tg/tl_int_vector_gen.go @@ -0,0 +1,60 @@ +// Code generated by gotdgen, DO NOT EDIT. + +package tg + +import ( + "context" + "fmt" + + "github.com/gotd/td/bin" +) + +// No-op definition for keeping imports. +var _ = bin.Buffer{} +var _ = context.Background() +var _ = fmt.Stringer(nil) + +// IntVector is a box for Vector +type IntVector struct { + // Elements of Vector + Elems []int +} + +// Encode implements bin.Encoder. +func (vec *IntVector) Encode(b *bin.Buffer) error { + if vec == nil { + return fmt.Errorf("can't encode Vector as nil") + } + b.PutVectorHeader(len(vec.Elems)) + for _, v := range vec.Elems { + b.PutInt(v) + } + return nil +} + +// Decode implements bin.Decoder. +func (vec *IntVector) Decode(b *bin.Buffer) error { + if vec == nil { + return fmt.Errorf("can't decode Vector to nil") + } + { + headerLen, err := b.VectorHeader() + if err != nil { + return fmt.Errorf("unable to decode Vector: field Elems: %w", err) + } + for idx := 0; idx < headerLen; idx++ { + value, err := b.Int() + if err != nil { + return fmt.Errorf("unable to decode Vector: field Elems: %w", err) + } + vec.Elems = append(vec.Elems, value) + } + } + return nil +} + +// Ensuring interfaces in compile-time for IntVector. +var ( + _ bin.Encoder = &IntVector{} + _ bin.Decoder = &IntVector{} +) diff --git a/tg/tl_lang_pack_language_vector_gen.go b/tg/tl_lang_pack_language_vector_gen.go new file mode 100644 index 0000000000..95f1a81855 --- /dev/null +++ b/tg/tl_lang_pack_language_vector_gen.go @@ -0,0 +1,62 @@ +// Code generated by gotdgen, DO NOT EDIT. + +package tg + +import ( + "context" + "fmt" + + "github.com/gotd/td/bin" +) + +// No-op definition for keeping imports. +var _ = bin.Buffer{} +var _ = context.Background() +var _ = fmt.Stringer(nil) + +// LangPackLanguageVector is a box for Vector +type LangPackLanguageVector struct { + // Elements of Vector + Elems []LangPackLanguage +} + +// Encode implements bin.Encoder. +func (vec *LangPackLanguageVector) Encode(b *bin.Buffer) error { + if vec == nil { + return fmt.Errorf("can't encode Vector as nil") + } + b.PutVectorHeader(len(vec.Elems)) + for idx, v := range vec.Elems { + if err := v.Encode(b); err != nil { + return fmt.Errorf("unable to encode Vector: field Elems element with index %d: %w", idx, err) + } + } + return nil +} + +// Decode implements bin.Decoder. +func (vec *LangPackLanguageVector) Decode(b *bin.Buffer) error { + if vec == nil { + return fmt.Errorf("can't decode Vector to nil") + } + { + headerLen, err := b.VectorHeader() + if err != nil { + return fmt.Errorf("unable to decode Vector: field Elems: %w", err) + } + for idx := 0; idx < headerLen; idx++ { + var value LangPackLanguage + if err := value.Decode(b); err != nil { + return fmt.Errorf("unable to decode Vector: field Elems: %w", err) + } + vec.Elems = append(vec.Elems, value) + } + } + return nil +} + +// Ensuring interfaces in compile-time for LangPackLanguageVector. +var ( + _ bin.Encoder = &LangPackLanguageVector{} + _ bin.Decoder = &LangPackLanguageVector{} +) diff --git a/tg/tl_lang_pack_string_class_vector_gen.go b/tg/tl_lang_pack_string_class_vector_gen.go new file mode 100644 index 0000000000..d4e2f528fa --- /dev/null +++ b/tg/tl_lang_pack_string_class_vector_gen.go @@ -0,0 +1,65 @@ +// Code generated by gotdgen, DO NOT EDIT. + +package tg + +import ( + "context" + "fmt" + + "github.com/gotd/td/bin" +) + +// No-op definition for keeping imports. +var _ = bin.Buffer{} +var _ = context.Background() +var _ = fmt.Stringer(nil) + +// LangPackStringClassVector is a box for Vector +type LangPackStringClassVector struct { + // Elements of Vector + Elems []LangPackStringClass +} + +// Encode implements bin.Encoder. +func (vec *LangPackStringClassVector) Encode(b *bin.Buffer) error { + if vec == nil { + return fmt.Errorf("can't encode Vector as nil") + } + b.PutVectorHeader(len(vec.Elems)) + for idx, v := range vec.Elems { + if v == nil { + return fmt.Errorf("unable to encode Vector: field Elems element with index %d is nil", idx) + } + if err := v.Encode(b); err != nil { + return fmt.Errorf("unable to encode Vector: field Elems element with index %d: %w", idx, err) + } + } + return nil +} + +// Decode implements bin.Decoder. +func (vec *LangPackStringClassVector) Decode(b *bin.Buffer) error { + if vec == nil { + return fmt.Errorf("can't decode Vector to nil") + } + { + headerLen, err := b.VectorHeader() + if err != nil { + return fmt.Errorf("unable to decode Vector: field Elems: %w", err) + } + for idx := 0; idx < headerLen; idx++ { + value, err := DecodeLangPackString(b) + if err != nil { + return fmt.Errorf("unable to decode Vector: field Elems: %w", err) + } + vec.Elems = append(vec.Elems, value) + } + } + return nil +} + +// Ensuring interfaces in compile-time for LangPackStringClassVector. +var ( + _ bin.Encoder = &LangPackStringClassVector{} + _ bin.Decoder = &LangPackStringClassVector{} +) diff --git a/tg/tl_langpack_get_languages_gen.go b/tg/tl_langpack_get_languages_gen.go index 23b167f25d..484d809c64 100644 --- a/tg/tl_langpack_get_languages_gen.go +++ b/tg/tl_langpack_get_languages_gen.go @@ -17,7 +17,7 @@ var _ = fmt.Stringer(nil) // LangpackGetLanguagesRequest represents TL type `langpack.getLanguages#42c6978f`. // Get information about all languages in a localization pack // -// See https://core.telegram.org/constructor/langpack.getLanguages for reference. +// See https://core.telegram.org/method/langpack.getLanguages for reference. type LangpackGetLanguagesRequest struct { // Language pack LangPack string @@ -59,3 +59,15 @@ var ( _ bin.Encoder = &LangpackGetLanguagesRequest{} _ bin.Decoder = &LangpackGetLanguagesRequest{} ) + +// LangpackGetLanguages invokes method langpack.getLanguages#42c6978f returning error if any. +// Get information about all languages in a localization pack +// +// See https://core.telegram.org/method/langpack.getLanguages for reference. +func (c *Client) LangpackGetLanguages(ctx context.Context, request *LangpackGetLanguagesRequest) ([]LangPackLanguage, error) { + var result LangPackLanguageVector + if err := c.rpc.InvokeRaw(ctx, request, &result); err != nil { + return nil, err + } + return result.Elems, nil +} diff --git a/tg/tl_langpack_get_strings_gen.go b/tg/tl_langpack_get_strings_gen.go index aba25c0848..7aa98c17f6 100644 --- a/tg/tl_langpack_get_strings_gen.go +++ b/tg/tl_langpack_get_strings_gen.go @@ -17,7 +17,7 @@ var _ = fmt.Stringer(nil) // LangpackGetStringsRequest represents TL type `langpack.getStrings#efea3803`. // Get strings from a language pack // -// See https://core.telegram.org/constructor/langpack.getStrings for reference. +// See https://core.telegram.org/method/langpack.getStrings for reference. type LangpackGetStringsRequest struct { // Language pack name LangPack string @@ -88,3 +88,15 @@ var ( _ bin.Encoder = &LangpackGetStringsRequest{} _ bin.Decoder = &LangpackGetStringsRequest{} ) + +// LangpackGetStrings invokes method langpack.getStrings#efea3803 returning error if any. +// Get strings from a language pack +// +// See https://core.telegram.org/method/langpack.getStrings for reference. +func (c *Client) LangpackGetStrings(ctx context.Context, request *LangpackGetStringsRequest) ([]LangPackStringClass, error) { + var result LangPackStringClassVector + if err := c.rpc.InvokeRaw(ctx, request, &result); err != nil { + return nil, err + } + return result.Elems, nil +} diff --git a/tg/tl_long_vector_gen.go b/tg/tl_long_vector_gen.go new file mode 100644 index 0000000000..3695046b07 --- /dev/null +++ b/tg/tl_long_vector_gen.go @@ -0,0 +1,60 @@ +// Code generated by gotdgen, DO NOT EDIT. + +package tg + +import ( + "context" + "fmt" + + "github.com/gotd/td/bin" +) + +// No-op definition for keeping imports. +var _ = bin.Buffer{} +var _ = context.Background() +var _ = fmt.Stringer(nil) + +// LongVector is a box for Vector +type LongVector struct { + // Elements of Vector + Elems []int64 +} + +// Encode implements bin.Encoder. +func (vec *LongVector) Encode(b *bin.Buffer) error { + if vec == nil { + return fmt.Errorf("can't encode Vector as nil") + } + b.PutVectorHeader(len(vec.Elems)) + for _, v := range vec.Elems { + b.PutLong(v) + } + return nil +} + +// Decode implements bin.Decoder. +func (vec *LongVector) Decode(b *bin.Buffer) error { + if vec == nil { + return fmt.Errorf("can't decode Vector to nil") + } + { + headerLen, err := b.VectorHeader() + if err != nil { + return fmt.Errorf("unable to decode Vector: field Elems: %w", err) + } + for idx := 0; idx < headerLen; idx++ { + value, err := b.Long() + if err != nil { + return fmt.Errorf("unable to decode Vector: field Elems: %w", err) + } + vec.Elems = append(vec.Elems, value) + } + } + return nil +} + +// Ensuring interfaces in compile-time for LongVector. +var ( + _ bin.Encoder = &LongVector{} + _ bin.Decoder = &LongVector{} +) diff --git a/tg/tl_message_range_vector_gen.go b/tg/tl_message_range_vector_gen.go new file mode 100644 index 0000000000..00a6488d43 --- /dev/null +++ b/tg/tl_message_range_vector_gen.go @@ -0,0 +1,62 @@ +// Code generated by gotdgen, DO NOT EDIT. + +package tg + +import ( + "context" + "fmt" + + "github.com/gotd/td/bin" +) + +// No-op definition for keeping imports. +var _ = bin.Buffer{} +var _ = context.Background() +var _ = fmt.Stringer(nil) + +// MessageRangeVector is a box for Vector +type MessageRangeVector struct { + // Elements of Vector + Elems []MessageRange +} + +// Encode implements bin.Encoder. +func (vec *MessageRangeVector) Encode(b *bin.Buffer) error { + if vec == nil { + return fmt.Errorf("can't encode Vector as nil") + } + b.PutVectorHeader(len(vec.Elems)) + for idx, v := range vec.Elems { + if err := v.Encode(b); err != nil { + return fmt.Errorf("unable to encode Vector: field Elems element with index %d: %w", idx, err) + } + } + return nil +} + +// Decode implements bin.Decoder. +func (vec *MessageRangeVector) Decode(b *bin.Buffer) error { + if vec == nil { + return fmt.Errorf("can't decode Vector to nil") + } + { + headerLen, err := b.VectorHeader() + if err != nil { + return fmt.Errorf("unable to decode Vector: field Elems: %w", err) + } + for idx := 0; idx < headerLen; idx++ { + var value MessageRange + if err := value.Decode(b); err != nil { + return fmt.Errorf("unable to decode Vector: field Elems: %w", err) + } + vec.Elems = append(vec.Elems, value) + } + } + return nil +} + +// Ensuring interfaces in compile-time for MessageRangeVector. +var ( + _ bin.Encoder = &MessageRangeVector{} + _ bin.Decoder = &MessageRangeVector{} +) diff --git a/tg/tl_messages_get_attached_stickers_gen.go b/tg/tl_messages_get_attached_stickers_gen.go index 4128139b35..6a55efe245 100644 --- a/tg/tl_messages_get_attached_stickers_gen.go +++ b/tg/tl_messages_get_attached_stickers_gen.go @@ -17,7 +17,7 @@ var _ = fmt.Stringer(nil) // MessagesGetAttachedStickersRequest represents TL type `messages.getAttachedStickers#cc5b67cc`. // Get stickers attached to a photo or video // -// See https://core.telegram.org/constructor/messages.getAttachedStickers for reference. +// See https://core.telegram.org/method/messages.getAttachedStickers for reference. type MessagesGetAttachedStickersRequest struct { // Stickered media Media InputStickeredMediaClass @@ -64,3 +64,15 @@ var ( _ bin.Encoder = &MessagesGetAttachedStickersRequest{} _ bin.Decoder = &MessagesGetAttachedStickersRequest{} ) + +// MessagesGetAttachedStickers invokes method messages.getAttachedStickers#cc5b67cc returning error if any. +// Get stickers attached to a photo or video +// +// See https://core.telegram.org/method/messages.getAttachedStickers for reference. +func (c *Client) MessagesGetAttachedStickers(ctx context.Context, request *MessagesGetAttachedStickersRequest) ([]StickerSetCoveredClass, error) { + var result StickerSetCoveredClassVector + if err := c.rpc.InvokeRaw(ctx, request, &result); err != nil { + return nil, err + } + return result.Elems, nil +} diff --git a/tg/tl_messages_get_dialog_filters_gen.go b/tg/tl_messages_get_dialog_filters_gen.go index 5e7c2118f2..00bbfe1757 100644 --- a/tg/tl_messages_get_dialog_filters_gen.go +++ b/tg/tl_messages_get_dialog_filters_gen.go @@ -17,7 +17,7 @@ var _ = fmt.Stringer(nil) // MessagesGetDialogFiltersRequest represents TL type `messages.getDialogFilters#f19ed96d`. // Get folders // -// See https://core.telegram.org/constructor/messages.getDialogFilters for reference. +// See https://core.telegram.org/method/messages.getDialogFilters for reference. type MessagesGetDialogFiltersRequest struct { } @@ -49,3 +49,15 @@ var ( _ bin.Encoder = &MessagesGetDialogFiltersRequest{} _ bin.Decoder = &MessagesGetDialogFiltersRequest{} ) + +// MessagesGetDialogFilters invokes method messages.getDialogFilters#f19ed96d returning error if any. +// Get folders +// +// See https://core.telegram.org/method/messages.getDialogFilters for reference. +func (c *Client) MessagesGetDialogFilters(ctx context.Context, request *MessagesGetDialogFiltersRequest) ([]DialogFilter, error) { + var result DialogFilterVector + if err := c.rpc.InvokeRaw(ctx, request, &result); err != nil { + return nil, err + } + return result.Elems, nil +} diff --git a/tg/tl_messages_get_dialog_unread_marks_gen.go b/tg/tl_messages_get_dialog_unread_marks_gen.go index 86e0fc7066..8700057300 100644 --- a/tg/tl_messages_get_dialog_unread_marks_gen.go +++ b/tg/tl_messages_get_dialog_unread_marks_gen.go @@ -17,7 +17,7 @@ var _ = fmt.Stringer(nil) // MessagesGetDialogUnreadMarksRequest represents TL type `messages.getDialogUnreadMarks#22e24e22`. // Get dialogs manually marked as unread // -// See https://core.telegram.org/constructor/messages.getDialogUnreadMarks for reference. +// See https://core.telegram.org/method/messages.getDialogUnreadMarks for reference. type MessagesGetDialogUnreadMarksRequest struct { } @@ -49,3 +49,15 @@ var ( _ bin.Encoder = &MessagesGetDialogUnreadMarksRequest{} _ bin.Decoder = &MessagesGetDialogUnreadMarksRequest{} ) + +// MessagesGetDialogUnreadMarks invokes method messages.getDialogUnreadMarks#22e24e22 returning error if any. +// Get dialogs manually marked as unread +// +// See https://core.telegram.org/method/messages.getDialogUnreadMarks for reference. +func (c *Client) MessagesGetDialogUnreadMarks(ctx context.Context, request *MessagesGetDialogUnreadMarksRequest) ([]DialogPeerClass, error) { + var result DialogPeerClassVector + if err := c.rpc.InvokeRaw(ctx, request, &result); err != nil { + return nil, err + } + return result.Elems, nil +} diff --git a/tg/tl_messages_get_emoji_keywords_languages_gen.go b/tg/tl_messages_get_emoji_keywords_languages_gen.go index 889f24663c..ed3d39cae0 100644 --- a/tg/tl_messages_get_emoji_keywords_languages_gen.go +++ b/tg/tl_messages_get_emoji_keywords_languages_gen.go @@ -17,7 +17,7 @@ var _ = fmt.Stringer(nil) // MessagesGetEmojiKeywordsLanguagesRequest represents TL type `messages.getEmojiKeywordsLanguages#4e9963b2`. // Get info about an emoji keyword localization // -// See https://core.telegram.org/constructor/messages.getEmojiKeywordsLanguages for reference. +// See https://core.telegram.org/method/messages.getEmojiKeywordsLanguages for reference. type MessagesGetEmojiKeywordsLanguagesRequest struct { // Language codes LangCodes []string @@ -68,3 +68,15 @@ var ( _ bin.Encoder = &MessagesGetEmojiKeywordsLanguagesRequest{} _ bin.Decoder = &MessagesGetEmojiKeywordsLanguagesRequest{} ) + +// MessagesGetEmojiKeywordsLanguages invokes method messages.getEmojiKeywordsLanguages#4e9963b2 returning error if any. +// Get info about an emoji keyword localization +// +// See https://core.telegram.org/method/messages.getEmojiKeywordsLanguages for reference. +func (c *Client) MessagesGetEmojiKeywordsLanguages(ctx context.Context, request *MessagesGetEmojiKeywordsLanguagesRequest) ([]EmojiLanguage, error) { + var result EmojiLanguageVector + if err := c.rpc.InvokeRaw(ctx, request, &result); err != nil { + return nil, err + } + return result.Elems, nil +} diff --git a/tg/tl_messages_get_search_counters_gen.go b/tg/tl_messages_get_search_counters_gen.go index 9e29668b10..ee38ee10d2 100644 --- a/tg/tl_messages_get_search_counters_gen.go +++ b/tg/tl_messages_get_search_counters_gen.go @@ -17,7 +17,7 @@ var _ = fmt.Stringer(nil) // MessagesGetSearchCountersRequest represents TL type `messages.getSearchCounters#732eef00`. // Get the number of results that would be found by a messages.search call with the same parameters // -// See https://core.telegram.org/constructor/messages.getSearchCounters for reference. +// See https://core.telegram.org/method/messages.getSearchCounters for reference. type MessagesGetSearchCountersRequest struct { // Peer where to search Peer InputPeerClass @@ -88,3 +88,15 @@ var ( _ bin.Encoder = &MessagesGetSearchCountersRequest{} _ bin.Decoder = &MessagesGetSearchCountersRequest{} ) + +// MessagesGetSearchCounters invokes method messages.getSearchCounters#732eef00 returning error if any. +// Get the number of results that would be found by a messages.search call with the same parameters +// +// See https://core.telegram.org/method/messages.getSearchCounters for reference. +func (c *Client) MessagesGetSearchCounters(ctx context.Context, request *MessagesGetSearchCountersRequest) ([]MessagesSearchCounter, error) { + var result MessagesSearchCounterVector + if err := c.rpc.InvokeRaw(ctx, request, &result); err != nil { + return nil, err + } + return result.Elems, nil +} diff --git a/tg/tl_messages_get_split_ranges_gen.go b/tg/tl_messages_get_split_ranges_gen.go index 58a9232927..6b2193e457 100644 --- a/tg/tl_messages_get_split_ranges_gen.go +++ b/tg/tl_messages_get_split_ranges_gen.go @@ -17,7 +17,7 @@ var _ = fmt.Stringer(nil) // MessagesGetSplitRangesRequest represents TL type `messages.getSplitRanges#1cff7e08`. // Get message ranges for saving the user's chat history // -// See https://core.telegram.org/constructor/messages.getSplitRanges for reference. +// See https://core.telegram.org/method/messages.getSplitRanges for reference. type MessagesGetSplitRangesRequest struct { } @@ -49,3 +49,15 @@ var ( _ bin.Encoder = &MessagesGetSplitRangesRequest{} _ bin.Decoder = &MessagesGetSplitRangesRequest{} ) + +// MessagesGetSplitRanges invokes method messages.getSplitRanges#1cff7e08 returning error if any. +// Get message ranges for saving the user's chat history +// +// See https://core.telegram.org/method/messages.getSplitRanges for reference. +func (c *Client) MessagesGetSplitRanges(ctx context.Context, request *MessagesGetSplitRangesRequest) ([]MessageRange, error) { + var result MessageRangeVector + if err := c.rpc.InvokeRaw(ctx, request, &result); err != nil { + return nil, err + } + return result.Elems, nil +} diff --git a/tg/tl_messages_get_suggested_dialog_filters_gen.go b/tg/tl_messages_get_suggested_dialog_filters_gen.go index cff8aa8ea0..83df41e2de 100644 --- a/tg/tl_messages_get_suggested_dialog_filters_gen.go +++ b/tg/tl_messages_get_suggested_dialog_filters_gen.go @@ -17,7 +17,7 @@ var _ = fmt.Stringer(nil) // MessagesGetSuggestedDialogFiltersRequest represents TL type `messages.getSuggestedDialogFilters#a29cd42c`. // Get suggested folders // -// See https://core.telegram.org/constructor/messages.getSuggestedDialogFilters for reference. +// See https://core.telegram.org/method/messages.getSuggestedDialogFilters for reference. type MessagesGetSuggestedDialogFiltersRequest struct { } @@ -49,3 +49,15 @@ var ( _ bin.Encoder = &MessagesGetSuggestedDialogFiltersRequest{} _ bin.Decoder = &MessagesGetSuggestedDialogFiltersRequest{} ) + +// MessagesGetSuggestedDialogFilters invokes method messages.getSuggestedDialogFilters#a29cd42c returning error if any. +// Get suggested folders +// +// See https://core.telegram.org/method/messages.getSuggestedDialogFilters for reference. +func (c *Client) MessagesGetSuggestedDialogFilters(ctx context.Context, request *MessagesGetSuggestedDialogFiltersRequest) ([]DialogFilterSuggested, error) { + var result DialogFilterSuggestedVector + if err := c.rpc.InvokeRaw(ctx, request, &result); err != nil { + return nil, err + } + return result.Elems, nil +} diff --git a/tg/tl_messages_received_messages_gen.go b/tg/tl_messages_received_messages_gen.go index b9d7f47df1..3e3ab6e937 100644 --- a/tg/tl_messages_received_messages_gen.go +++ b/tg/tl_messages_received_messages_gen.go @@ -17,7 +17,7 @@ var _ = fmt.Stringer(nil) // MessagesReceivedMessagesRequest represents TL type `messages.receivedMessages#5a954c0`. // Confirms receipt of messages by a client, cancels PUSH-notification sending. // -// See https://core.telegram.org/constructor/messages.receivedMessages for reference. +// See https://core.telegram.org/method/messages.receivedMessages for reference. type MessagesReceivedMessagesRequest struct { // Maximum message ID available in a client. MaxID int @@ -59,3 +59,15 @@ var ( _ bin.Encoder = &MessagesReceivedMessagesRequest{} _ bin.Decoder = &MessagesReceivedMessagesRequest{} ) + +// MessagesReceivedMessages invokes method messages.receivedMessages#5a954c0 returning error if any. +// Confirms receipt of messages by a client, cancels PUSH-notification sending. +// +// See https://core.telegram.org/method/messages.receivedMessages for reference. +func (c *Client) MessagesReceivedMessages(ctx context.Context, request *MessagesReceivedMessagesRequest) ([]ReceivedNotifyMessage, error) { + var result ReceivedNotifyMessageVector + if err := c.rpc.InvokeRaw(ctx, request, &result); err != nil { + return nil, err + } + return result.Elems, nil +} diff --git a/tg/tl_messages_received_queue_gen.go b/tg/tl_messages_received_queue_gen.go index f9e0c31231..697e30bdf1 100644 --- a/tg/tl_messages_received_queue_gen.go +++ b/tg/tl_messages_received_queue_gen.go @@ -17,7 +17,7 @@ var _ = fmt.Stringer(nil) // MessagesReceivedQueueRequest represents TL type `messages.receivedQueue#55a5bb66`. // Confirms receipt of messages in a secret chat by client, cancels push notifications. // -// See https://core.telegram.org/constructor/messages.receivedQueue for reference. +// See https://core.telegram.org/method/messages.receivedQueue for reference. type MessagesReceivedQueueRequest struct { // Maximum qts value available at the client MaxQts int @@ -59,3 +59,15 @@ var ( _ bin.Encoder = &MessagesReceivedQueueRequest{} _ bin.Decoder = &MessagesReceivedQueueRequest{} ) + +// MessagesReceivedQueue invokes method messages.receivedQueue#55a5bb66 returning error if any. +// Confirms receipt of messages in a secret chat by client, cancels push notifications. +// +// See https://core.telegram.org/method/messages.receivedQueue for reference. +func (c *Client) MessagesReceivedQueue(ctx context.Context, request *MessagesReceivedQueueRequest) ([]int64, error) { + var result LongVector + if err := c.rpc.InvokeRaw(ctx, request, &result); err != nil { + return nil, err + } + return result.Elems, nil +} diff --git a/tg/tl_messages_search_counter_vector_gen.go b/tg/tl_messages_search_counter_vector_gen.go new file mode 100644 index 0000000000..2b0f24b7e1 --- /dev/null +++ b/tg/tl_messages_search_counter_vector_gen.go @@ -0,0 +1,62 @@ +// Code generated by gotdgen, DO NOT EDIT. + +package tg + +import ( + "context" + "fmt" + + "github.com/gotd/td/bin" +) + +// No-op definition for keeping imports. +var _ = bin.Buffer{} +var _ = context.Background() +var _ = fmt.Stringer(nil) + +// MessagesSearchCounterVector is a box for Vector +type MessagesSearchCounterVector struct { + // Elements of Vector + Elems []MessagesSearchCounter +} + +// Encode implements bin.Encoder. +func (vec *MessagesSearchCounterVector) Encode(b *bin.Buffer) error { + if vec == nil { + return fmt.Errorf("can't encode Vector as nil") + } + b.PutVectorHeader(len(vec.Elems)) + for idx, v := range vec.Elems { + if err := v.Encode(b); err != nil { + return fmt.Errorf("unable to encode Vector: field Elems element with index %d: %w", idx, err) + } + } + return nil +} + +// Decode implements bin.Decoder. +func (vec *MessagesSearchCounterVector) Decode(b *bin.Buffer) error { + if vec == nil { + return fmt.Errorf("can't decode Vector to nil") + } + { + headerLen, err := b.VectorHeader() + if err != nil { + return fmt.Errorf("unable to decode Vector: field Elems: %w", err) + } + for idx := 0; idx < headerLen; idx++ { + var value MessagesSearchCounter + if err := value.Decode(b); err != nil { + return fmt.Errorf("unable to decode Vector: field Elems: %w", err) + } + vec.Elems = append(vec.Elems, value) + } + } + return nil +} + +// Ensuring interfaces in compile-time for MessagesSearchCounterVector. +var ( + _ bin.Encoder = &MessagesSearchCounterVector{} + _ bin.Decoder = &MessagesSearchCounterVector{} +) diff --git a/tg/tl_photos_delete_photos_gen.go b/tg/tl_photos_delete_photos_gen.go index 2941ba4ba2..2f2792236f 100644 --- a/tg/tl_photos_delete_photos_gen.go +++ b/tg/tl_photos_delete_photos_gen.go @@ -17,7 +17,7 @@ var _ = fmt.Stringer(nil) // PhotosDeletePhotosRequest represents TL type `photos.deletePhotos#87cf7f2f`. // Deletes profile photos. // -// See https://core.telegram.org/constructor/photos.deletePhotos for reference. +// See https://core.telegram.org/method/photos.deletePhotos for reference. type PhotosDeletePhotosRequest struct { // Input photos to delete ID []InputPhotoClass @@ -73,3 +73,15 @@ var ( _ bin.Encoder = &PhotosDeletePhotosRequest{} _ bin.Decoder = &PhotosDeletePhotosRequest{} ) + +// PhotosDeletePhotos invokes method photos.deletePhotos#87cf7f2f returning error if any. +// Deletes profile photos. +// +// See https://core.telegram.org/method/photos.deletePhotos for reference. +func (c *Client) PhotosDeletePhotos(ctx context.Context, request *PhotosDeletePhotosRequest) ([]int64, error) { + var result LongVector + if err := c.rpc.InvokeRaw(ctx, request, &result); err != nil { + return nil, err + } + return result.Elems, nil +} diff --git a/tg/tl_received_notify_message_vector_gen.go b/tg/tl_received_notify_message_vector_gen.go new file mode 100644 index 0000000000..fe9013d19d --- /dev/null +++ b/tg/tl_received_notify_message_vector_gen.go @@ -0,0 +1,62 @@ +// Code generated by gotdgen, DO NOT EDIT. + +package tg + +import ( + "context" + "fmt" + + "github.com/gotd/td/bin" +) + +// No-op definition for keeping imports. +var _ = bin.Buffer{} +var _ = context.Background() +var _ = fmt.Stringer(nil) + +// ReceivedNotifyMessageVector is a box for Vector +type ReceivedNotifyMessageVector struct { + // Elements of Vector + Elems []ReceivedNotifyMessage +} + +// Encode implements bin.Encoder. +func (vec *ReceivedNotifyMessageVector) Encode(b *bin.Buffer) error { + if vec == nil { + return fmt.Errorf("can't encode Vector as nil") + } + b.PutVectorHeader(len(vec.Elems)) + for idx, v := range vec.Elems { + if err := v.Encode(b); err != nil { + return fmt.Errorf("unable to encode Vector: field Elems element with index %d: %w", idx, err) + } + } + return nil +} + +// Decode implements bin.Decoder. +func (vec *ReceivedNotifyMessageVector) Decode(b *bin.Buffer) error { + if vec == nil { + return fmt.Errorf("can't decode Vector to nil") + } + { + headerLen, err := b.VectorHeader() + if err != nil { + return fmt.Errorf("unable to decode Vector: field Elems: %w", err) + } + for idx := 0; idx < headerLen; idx++ { + var value ReceivedNotifyMessage + if err := value.Decode(b); err != nil { + return fmt.Errorf("unable to decode Vector: field Elems: %w", err) + } + vec.Elems = append(vec.Elems, value) + } + } + return nil +} + +// Ensuring interfaces in compile-time for ReceivedNotifyMessageVector. +var ( + _ bin.Encoder = &ReceivedNotifyMessageVector{} + _ bin.Decoder = &ReceivedNotifyMessageVector{} +) diff --git a/tg/tl_saved_phone_contact_vector_gen.go b/tg/tl_saved_phone_contact_vector_gen.go new file mode 100644 index 0000000000..a8f201d295 --- /dev/null +++ b/tg/tl_saved_phone_contact_vector_gen.go @@ -0,0 +1,62 @@ +// Code generated by gotdgen, DO NOT EDIT. + +package tg + +import ( + "context" + "fmt" + + "github.com/gotd/td/bin" +) + +// No-op definition for keeping imports. +var _ = bin.Buffer{} +var _ = context.Background() +var _ = fmt.Stringer(nil) + +// SavedPhoneContactVector is a box for Vector +type SavedPhoneContactVector struct { + // Elements of Vector + Elems []SavedPhoneContact +} + +// Encode implements bin.Encoder. +func (vec *SavedPhoneContactVector) Encode(b *bin.Buffer) error { + if vec == nil { + return fmt.Errorf("can't encode Vector as nil") + } + b.PutVectorHeader(len(vec.Elems)) + for idx, v := range vec.Elems { + if err := v.Encode(b); err != nil { + return fmt.Errorf("unable to encode Vector: field Elems element with index %d: %w", idx, err) + } + } + return nil +} + +// Decode implements bin.Decoder. +func (vec *SavedPhoneContactVector) Decode(b *bin.Buffer) error { + if vec == nil { + return fmt.Errorf("can't decode Vector to nil") + } + { + headerLen, err := b.VectorHeader() + if err != nil { + return fmt.Errorf("unable to decode Vector: field Elems: %w", err) + } + for idx := 0; idx < headerLen; idx++ { + var value SavedPhoneContact + if err := value.Decode(b); err != nil { + return fmt.Errorf("unable to decode Vector: field Elems: %w", err) + } + vec.Elems = append(vec.Elems, value) + } + } + return nil +} + +// Ensuring interfaces in compile-time for SavedPhoneContactVector. +var ( + _ bin.Encoder = &SavedPhoneContactVector{} + _ bin.Decoder = &SavedPhoneContactVector{} +) diff --git a/tg/tl_secure_value_vector_gen.go b/tg/tl_secure_value_vector_gen.go new file mode 100644 index 0000000000..b87903785c --- /dev/null +++ b/tg/tl_secure_value_vector_gen.go @@ -0,0 +1,62 @@ +// Code generated by gotdgen, DO NOT EDIT. + +package tg + +import ( + "context" + "fmt" + + "github.com/gotd/td/bin" +) + +// No-op definition for keeping imports. +var _ = bin.Buffer{} +var _ = context.Background() +var _ = fmt.Stringer(nil) + +// SecureValueVector is a box for Vector +type SecureValueVector struct { + // Elements of Vector + Elems []SecureValue +} + +// Encode implements bin.Encoder. +func (vec *SecureValueVector) Encode(b *bin.Buffer) error { + if vec == nil { + return fmt.Errorf("can't encode Vector as nil") + } + b.PutVectorHeader(len(vec.Elems)) + for idx, v := range vec.Elems { + if err := v.Encode(b); err != nil { + return fmt.Errorf("unable to encode Vector: field Elems element with index %d: %w", idx, err) + } + } + return nil +} + +// Decode implements bin.Decoder. +func (vec *SecureValueVector) Decode(b *bin.Buffer) error { + if vec == nil { + return fmt.Errorf("can't decode Vector to nil") + } + { + headerLen, err := b.VectorHeader() + if err != nil { + return fmt.Errorf("unable to decode Vector: field Elems: %w", err) + } + for idx := 0; idx < headerLen; idx++ { + var value SecureValue + if err := value.Decode(b); err != nil { + return fmt.Errorf("unable to decode Vector: field Elems: %w", err) + } + vec.Elems = append(vec.Elems, value) + } + } + return nil +} + +// Ensuring interfaces in compile-time for SecureValueVector. +var ( + _ bin.Encoder = &SecureValueVector{} + _ bin.Decoder = &SecureValueVector{} +) diff --git a/tg/tl_sticker_set_covered_class_vector_gen.go b/tg/tl_sticker_set_covered_class_vector_gen.go new file mode 100644 index 0000000000..d70498951c --- /dev/null +++ b/tg/tl_sticker_set_covered_class_vector_gen.go @@ -0,0 +1,65 @@ +// Code generated by gotdgen, DO NOT EDIT. + +package tg + +import ( + "context" + "fmt" + + "github.com/gotd/td/bin" +) + +// No-op definition for keeping imports. +var _ = bin.Buffer{} +var _ = context.Background() +var _ = fmt.Stringer(nil) + +// StickerSetCoveredClassVector is a box for Vector +type StickerSetCoveredClassVector struct { + // Elements of Vector + Elems []StickerSetCoveredClass +} + +// Encode implements bin.Encoder. +func (vec *StickerSetCoveredClassVector) Encode(b *bin.Buffer) error { + if vec == nil { + return fmt.Errorf("can't encode Vector as nil") + } + b.PutVectorHeader(len(vec.Elems)) + for idx, v := range vec.Elems { + if v == nil { + return fmt.Errorf("unable to encode Vector: field Elems element with index %d is nil", idx) + } + if err := v.Encode(b); err != nil { + return fmt.Errorf("unable to encode Vector: field Elems element with index %d: %w", idx, err) + } + } + return nil +} + +// Decode implements bin.Decoder. +func (vec *StickerSetCoveredClassVector) Decode(b *bin.Buffer) error { + if vec == nil { + return fmt.Errorf("can't decode Vector to nil") + } + { + headerLen, err := b.VectorHeader() + if err != nil { + return fmt.Errorf("unable to decode Vector: field Elems: %w", err) + } + for idx := 0; idx < headerLen; idx++ { + value, err := DecodeStickerSetCovered(b) + if err != nil { + return fmt.Errorf("unable to decode Vector: field Elems: %w", err) + } + vec.Elems = append(vec.Elems, value) + } + } + return nil +} + +// Ensuring interfaces in compile-time for StickerSetCoveredClassVector. +var ( + _ bin.Encoder = &StickerSetCoveredClassVector{} + _ bin.Decoder = &StickerSetCoveredClassVector{} +) diff --git a/tg/tl_upload_get_cdn_file_hashes_gen.go b/tg/tl_upload_get_cdn_file_hashes_gen.go index 492d1c6fc5..6c40adfa86 100644 --- a/tg/tl_upload_get_cdn_file_hashes_gen.go +++ b/tg/tl_upload_get_cdn_file_hashes_gen.go @@ -17,7 +17,7 @@ var _ = fmt.Stringer(nil) // UploadGetCdnFileHashesRequest represents TL type `upload.getCdnFileHashes#4da54231`. // Get SHA256 hashes for verifying downloaded CDN files // -// See https://core.telegram.org/constructor/upload.getCdnFileHashes for reference. +// See https://core.telegram.org/method/upload.getCdnFileHashes for reference. type UploadGetCdnFileHashesRequest struct { // File FileToken []byte @@ -69,3 +69,15 @@ var ( _ bin.Encoder = &UploadGetCdnFileHashesRequest{} _ bin.Decoder = &UploadGetCdnFileHashesRequest{} ) + +// UploadGetCdnFileHashes invokes method upload.getCdnFileHashes#4da54231 returning error if any. +// Get SHA256 hashes for verifying downloaded CDN files +// +// See https://core.telegram.org/method/upload.getCdnFileHashes for reference. +func (c *Client) UploadGetCdnFileHashes(ctx context.Context, request *UploadGetCdnFileHashesRequest) ([]FileHash, error) { + var result FileHashVector + if err := c.rpc.InvokeRaw(ctx, request, &result); err != nil { + return nil, err + } + return result.Elems, nil +} diff --git a/tg/tl_upload_get_file_hashes_gen.go b/tg/tl_upload_get_file_hashes_gen.go index 1df99a62e7..6ee6fbeb25 100644 --- a/tg/tl_upload_get_file_hashes_gen.go +++ b/tg/tl_upload_get_file_hashes_gen.go @@ -17,7 +17,7 @@ var _ = fmt.Stringer(nil) // UploadGetFileHashesRequest represents TL type `upload.getFileHashes#c7025931`. // Get SHA256 hashes for verifying downloaded files // -// See https://core.telegram.org/constructor/upload.getFileHashes for reference. +// See https://core.telegram.org/method/upload.getFileHashes for reference. type UploadGetFileHashesRequest struct { // File Location InputFileLocationClass @@ -74,3 +74,15 @@ var ( _ bin.Encoder = &UploadGetFileHashesRequest{} _ bin.Decoder = &UploadGetFileHashesRequest{} ) + +// UploadGetFileHashes invokes method upload.getFileHashes#c7025931 returning error if any. +// Get SHA256 hashes for verifying downloaded files +// +// See https://core.telegram.org/method/upload.getFileHashes for reference. +func (c *Client) UploadGetFileHashes(ctx context.Context, request *UploadGetFileHashesRequest) ([]FileHash, error) { + var result FileHashVector + if err := c.rpc.InvokeRaw(ctx, request, &result); err != nil { + return nil, err + } + return result.Elems, nil +} diff --git a/tg/tl_upload_reupload_cdn_file_gen.go b/tg/tl_upload_reupload_cdn_file_gen.go index a4daa7dcd1..807e34a813 100644 --- a/tg/tl_upload_reupload_cdn_file_gen.go +++ b/tg/tl_upload_reupload_cdn_file_gen.go @@ -17,7 +17,7 @@ var _ = fmt.Stringer(nil) // UploadReuploadCdnFileRequest represents TL type `upload.reuploadCdnFile#9b2754a8`. // Request a reupload of a certain file to a CDN DC. // -// See https://core.telegram.org/constructor/upload.reuploadCdnFile for reference. +// See https://core.telegram.org/method/upload.reuploadCdnFile for reference. type UploadReuploadCdnFileRequest struct { // File token FileToken []byte @@ -69,3 +69,15 @@ var ( _ bin.Encoder = &UploadReuploadCdnFileRequest{} _ bin.Decoder = &UploadReuploadCdnFileRequest{} ) + +// UploadReuploadCdnFile invokes method upload.reuploadCdnFile#9b2754a8 returning error if any. +// Request a reupload of a certain file to a CDN DC. +// +// See https://core.telegram.org/method/upload.reuploadCdnFile for reference. +func (c *Client) UploadReuploadCdnFile(ctx context.Context, request *UploadReuploadCdnFileRequest) ([]FileHash, error) { + var result FileHashVector + if err := c.rpc.InvokeRaw(ctx, request, &result); err != nil { + return nil, err + } + return result.Elems, nil +} diff --git a/tg/tl_user_class_vector_gen.go b/tg/tl_user_class_vector_gen.go new file mode 100644 index 0000000000..fd3ed59452 --- /dev/null +++ b/tg/tl_user_class_vector_gen.go @@ -0,0 +1,65 @@ +// Code generated by gotdgen, DO NOT EDIT. + +package tg + +import ( + "context" + "fmt" + + "github.com/gotd/td/bin" +) + +// No-op definition for keeping imports. +var _ = bin.Buffer{} +var _ = context.Background() +var _ = fmt.Stringer(nil) + +// UserClassVector is a box for Vector +type UserClassVector struct { + // Elements of Vector + Elems []UserClass +} + +// Encode implements bin.Encoder. +func (vec *UserClassVector) Encode(b *bin.Buffer) error { + if vec == nil { + return fmt.Errorf("can't encode Vector as nil") + } + b.PutVectorHeader(len(vec.Elems)) + for idx, v := range vec.Elems { + if v == nil { + return fmt.Errorf("unable to encode Vector: field Elems element with index %d is nil", idx) + } + if err := v.Encode(b); err != nil { + return fmt.Errorf("unable to encode Vector: field Elems element with index %d: %w", idx, err) + } + } + return nil +} + +// Decode implements bin.Decoder. +func (vec *UserClassVector) Decode(b *bin.Buffer) error { + if vec == nil { + return fmt.Errorf("can't decode Vector to nil") + } + { + headerLen, err := b.VectorHeader() + if err != nil { + return fmt.Errorf("unable to decode Vector: field Elems: %w", err) + } + for idx := 0; idx < headerLen; idx++ { + value, err := DecodeUser(b) + if err != nil { + return fmt.Errorf("unable to decode Vector: field Elems: %w", err) + } + vec.Elems = append(vec.Elems, value) + } + } + return nil +} + +// Ensuring interfaces in compile-time for UserClassVector. +var ( + _ bin.Encoder = &UserClassVector{} + _ bin.Decoder = &UserClassVector{} +) diff --git a/tg/tl_users_get_users_gen.go b/tg/tl_users_get_users_gen.go index 27bc732711..64edb57211 100644 --- a/tg/tl_users_get_users_gen.go +++ b/tg/tl_users_get_users_gen.go @@ -17,7 +17,7 @@ var _ = fmt.Stringer(nil) // UsersGetUsersRequest represents TL type `users.getUsers#d91a548`. // Returns basic user info according to their identifiers. // -// See https://core.telegram.org/constructor/users.getUsers for reference. +// See https://core.telegram.org/method/users.getUsers for reference. type UsersGetUsersRequest struct { // List of user identifiers ID []InputUserClass @@ -73,3 +73,15 @@ var ( _ bin.Encoder = &UsersGetUsersRequest{} _ bin.Decoder = &UsersGetUsersRequest{} ) + +// UsersGetUsers invokes method users.getUsers#d91a548 returning error if any. +// Returns basic user info according to their identifiers. +// +// See https://core.telegram.org/method/users.getUsers for reference. +func (c *Client) UsersGetUsers(ctx context.Context, request *UsersGetUsersRequest) ([]UserClass, error) { + var result UserClassVector + if err := c.rpc.InvokeRaw(ctx, request, &result); err != nil { + return nil, err + } + return result.Elems, nil +} diff --git a/tg/tl_wall_paper_class_vector_gen.go b/tg/tl_wall_paper_class_vector_gen.go new file mode 100644 index 0000000000..3c47fd1267 --- /dev/null +++ b/tg/tl_wall_paper_class_vector_gen.go @@ -0,0 +1,65 @@ +// Code generated by gotdgen, DO NOT EDIT. + +package tg + +import ( + "context" + "fmt" + + "github.com/gotd/td/bin" +) + +// No-op definition for keeping imports. +var _ = bin.Buffer{} +var _ = context.Background() +var _ = fmt.Stringer(nil) + +// WallPaperClassVector is a box for Vector +type WallPaperClassVector struct { + // Elements of Vector + Elems []WallPaperClass +} + +// Encode implements bin.Encoder. +func (vec *WallPaperClassVector) Encode(b *bin.Buffer) error { + if vec == nil { + return fmt.Errorf("can't encode Vector as nil") + } + b.PutVectorHeader(len(vec.Elems)) + for idx, v := range vec.Elems { + if v == nil { + return fmt.Errorf("unable to encode Vector: field Elems element with index %d is nil", idx) + } + if err := v.Encode(b); err != nil { + return fmt.Errorf("unable to encode Vector: field Elems element with index %d: %w", idx, err) + } + } + return nil +} + +// Decode implements bin.Decoder. +func (vec *WallPaperClassVector) Decode(b *bin.Buffer) error { + if vec == nil { + return fmt.Errorf("can't decode Vector to nil") + } + { + headerLen, err := b.VectorHeader() + if err != nil { + return fmt.Errorf("unable to decode Vector: field Elems: %w", err) + } + for idx := 0; idx < headerLen; idx++ { + value, err := DecodeWallPaper(b) + if err != nil { + return fmt.Errorf("unable to decode Vector: field Elems: %w", err) + } + vec.Elems = append(vec.Elems, value) + } + } + return nil +} + +// Ensuring interfaces in compile-time for WallPaperClassVector. +var ( + _ bin.Encoder = &WallPaperClassVector{} + _ bin.Decoder = &WallPaperClassVector{} +)