move gotd fork into repo. (#111)
- update to latest telegram layer - remove some references to fields in tg.Entities that don't exist in the schema - originally added here: https://github.com/beeper/td/commit/820929062a2ba0104397bc01235ab58a9cff780e - referenced here - https://github.com/mautrix/telegramgo/commit/124f0967ed195b5a380c9bd02e170ada9710dde3 - https://github.com/mautrix/telegramgo/commit/4205047aab2e0639217148b5d125bfaab668bd8e
This commit is contained in:
@@ -0,0 +1,90 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"go/types"
|
||||
"sort"
|
||||
"strings"
|
||||
|
||||
"github.com/go-faster/errors"
|
||||
|
||||
"go.mau.fi/mautrix-telegram/pkg/gotd/telegram/query/internal/genutil"
|
||||
)
|
||||
|
||||
func (c *collector) unpackClass(
|
||||
field Param,
|
||||
typeName, trimPrefix string,
|
||||
) ([]SpecialCaseChain, error) {
|
||||
var r []SpecialCaseChain
|
||||
if field.Type == "tg."+typeName {
|
||||
impls, err := c.ifaces.Implementations(typeName)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "find %q constructors", typeName)
|
||||
}
|
||||
for _, impl := range impls {
|
||||
s, ok := impl.Underlying().(*types.Struct)
|
||||
if !ok {
|
||||
continue
|
||||
}
|
||||
|
||||
cse := SpecialCaseChain{
|
||||
ConstructorName: strings.TrimPrefix(impl.Obj().Name(), trimPrefix),
|
||||
ConstructorType: genutil.PrintType(impl),
|
||||
Field: field,
|
||||
}
|
||||
|
||||
if strings.Contains(cse.ConstructorName, "Empty") {
|
||||
continue
|
||||
}
|
||||
|
||||
for i := 0; i < s.NumFields(); i++ {
|
||||
field := s.Field(i)
|
||||
if field.Name() == "Flags" {
|
||||
continue
|
||||
}
|
||||
|
||||
cse.Args = append(cse.Args, varToParam(field))
|
||||
}
|
||||
|
||||
cse.Args = sortParams(cse.Args)
|
||||
r = append(r, cse)
|
||||
}
|
||||
}
|
||||
|
||||
return r, nil
|
||||
}
|
||||
|
||||
func (c *collector) unpackClasses(
|
||||
field Param,
|
||||
classes ...[2]string,
|
||||
) ([]SpecialCaseChain, error) {
|
||||
var r []SpecialCaseChain
|
||||
for _, class := range classes {
|
||||
cases, err := c.unpackClass(field, class[0], class[1])
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "unpack %q", class[0])
|
||||
}
|
||||
r = append(r, cases...)
|
||||
}
|
||||
|
||||
return r, nil
|
||||
}
|
||||
|
||||
func (c *collector) collectSpecial(m Method) ([]SpecialCaseChain, error) {
|
||||
var r []SpecialCaseChain
|
||||
for _, field := range m.AdditionalParams {
|
||||
cases, err := c.unpackClasses(field, [][2]string{
|
||||
{"MessagesFilterClass", "InputMessagesFilter"},
|
||||
{"ChannelParticipantsFilterClass", "ChannelParticipants"},
|
||||
}...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
r = append(r, cases...)
|
||||
}
|
||||
|
||||
sort.SliceStable(r, func(i, j int) bool {
|
||||
return r[i].ConstructorName < r[j].ConstructorName
|
||||
})
|
||||
return r, nil
|
||||
}
|
||||
Reference in New Issue
Block a user