parent
e292b9559e
commit
e253c67052
@ -1,52 +1,52 @@
|
||||
package puller
|
||||
|
||||
import (
|
||||
"github.com/zelenin/go-tdlib/client"
|
||||
"github.com/zelenin/go-tdlib/client"
|
||||
)
|
||||
|
||||
func ChatHistory(tdlibClient *client.Client, chatId int64) (chan *client.Message, chan error) {
|
||||
messageChan := make(chan *client.Message, 10)
|
||||
errChan := make(chan error, 1)
|
||||
messageChan := make(chan *client.Message, 10)
|
||||
errChan := make(chan error, 1)
|
||||
|
||||
var fromMessageId int64 = 0
|
||||
var offset int32 = 0
|
||||
var limit int32 = 100
|
||||
var fromMessageId int64 = 0
|
||||
var offset int32 = 0
|
||||
var limit int32 = 100
|
||||
|
||||
go chatHistory(tdlibClient, messageChan, errChan, chatId, fromMessageId, offset, limit, false)
|
||||
go chatHistory(tdlibClient, messageChan, errChan, chatId, fromMessageId, offset, limit, false)
|
||||
|
||||
return messageChan, errChan
|
||||
return messageChan, errChan
|
||||
}
|
||||
|
||||
func chatHistory(tdlibClient *client.Client, messageChan chan *client.Message, errChan chan error, chatId int64, fromMessageId int64, offset int32, limit int32, onlyLocal bool) {
|
||||
defer func() {
|
||||
close(messageChan)
|
||||
close(errChan)
|
||||
}()
|
||||
|
||||
for {
|
||||
messages, err := tdlibClient.GetChatHistory(&client.GetChatHistoryRequest{
|
||||
ChatId: chatId,
|
||||
FromMessageId: fromMessageId,
|
||||
Offset: offset,
|
||||
Limit: limit,
|
||||
OnlyLocal: onlyLocal,
|
||||
})
|
||||
if err != nil {
|
||||
errChan <- err
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
if len(messages.Messages) == 0 {
|
||||
errChan <- EOP
|
||||
|
||||
break
|
||||
}
|
||||
|
||||
for _, message := range messages.Messages {
|
||||
fromMessageId = message.Id
|
||||
|
||||
messageChan <- message
|
||||
}
|
||||
}
|
||||
defer func() {
|
||||
close(messageChan)
|
||||
close(errChan)
|
||||
}()
|
||||
|
||||
for {
|
||||
messages, err := tdlibClient.GetChatHistory(&client.GetChatHistoryRequest{
|
||||
ChatId: chatId,
|
||||
FromMessageId: fromMessageId,
|
||||
Offset: offset,
|
||||
Limit: limit,
|
||||
OnlyLocal: onlyLocal,
|
||||
})
|
||||
if err != nil {
|
||||
errChan <- err
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
if len(messages.Messages) == 0 {
|
||||
errChan <- EOP
|
||||
|
||||
break
|
||||
}
|
||||
|
||||
for _, message := range messages.Messages {
|
||||
fromMessageId = message.Id
|
||||
|
||||
messageChan <- message
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,62 +1,62 @@
|
||||
package puller
|
||||
|
||||
import (
|
||||
"math"
|
||||
"math"
|
||||
|
||||
"github.com/zelenin/go-tdlib/client"
|
||||
"github.com/zelenin/go-tdlib/client"
|
||||
)
|
||||
|
||||
func Chats(tdlibClient *client.Client) (chan *client.Chat, chan error) {
|
||||
chatChan := make(chan *client.Chat, 10)
|
||||
errChan := make(chan error, 1)
|
||||
chatChan := make(chan *client.Chat, 10)
|
||||
errChan := make(chan error, 1)
|
||||
|
||||
var offsetOrder client.JsonInt64 = math.MaxInt64
|
||||
var offsetChatId int64 = 0
|
||||
var limit int32 = 100
|
||||
var offsetOrder client.JsonInt64 = math.MaxInt64
|
||||
var offsetChatId int64 = 0
|
||||
var limit int32 = 100
|
||||
|
||||
go chats(tdlibClient, chatChan, errChan, offsetOrder, offsetChatId, limit)
|
||||
go chats(tdlibClient, chatChan, errChan, offsetOrder, offsetChatId, limit)
|
||||
|
||||
return chatChan, errChan
|
||||
return chatChan, errChan
|
||||
}
|
||||
|
||||
func chats(tdlibClient *client.Client, chatChan chan *client.Chat, errChan chan error, offsetOrder client.JsonInt64, offsetChatId int64, limit int32) {
|
||||
defer func() {
|
||||
close(chatChan)
|
||||
close(errChan)
|
||||
}()
|
||||
|
||||
for {
|
||||
chats, err := tdlibClient.GetChats(&client.GetChatsRequest{
|
||||
OffsetOrder: offsetOrder,
|
||||
OffsetChatId: offsetChatId,
|
||||
Limit: limit,
|
||||
})
|
||||
if err != nil {
|
||||
errChan <- err
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
if len(chats.ChatIds) == 0 {
|
||||
errChan <- EOP
|
||||
|
||||
break
|
||||
}
|
||||
|
||||
for _, chatId := range chats.ChatIds {
|
||||
chat, err := tdlibClient.GetChat(&client.GetChatRequest{
|
||||
ChatId: chatId,
|
||||
})
|
||||
if err != nil {
|
||||
errChan <- err
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
offsetOrder = chat.Order
|
||||
offsetChatId = chat.Id
|
||||
|
||||
chatChan <- chat
|
||||
}
|
||||
}
|
||||
defer func() {
|
||||
close(chatChan)
|
||||
close(errChan)
|
||||
}()
|
||||
|
||||
for {
|
||||
chats, err := tdlibClient.GetChats(&client.GetChatsRequest{
|
||||
OffsetOrder: offsetOrder,
|
||||
OffsetChatId: offsetChatId,
|
||||
Limit: limit,
|
||||
})
|
||||
if err != nil {
|
||||
errChan <- err
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
if len(chats.ChatIds) == 0 {
|
||||
errChan <- EOP
|
||||
|
||||
break
|
||||
}
|
||||
|
||||
for _, chatId := range chats.ChatIds {
|
||||
chat, err := tdlibClient.GetChat(&client.GetChatRequest{
|
||||
ChatId: chatId,
|
||||
})
|
||||
if err != nil {
|
||||
errChan <- err
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
offsetOrder = chat.Order
|
||||
offsetChatId = chat.Id
|
||||
|
||||
chatChan <- chat
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
package puller
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"errors"
|
||||
)
|
||||
|
||||
var EOP = errors.New("end of pull")
|
||||
|
@ -1,53 +1,53 @@
|
||||
package puller
|
||||
|
||||
import (
|
||||
"github.com/zelenin/go-tdlib/client"
|
||||
"github.com/zelenin/go-tdlib/client"
|
||||
)
|
||||
|
||||
func SupergroupMembers(tdlibClient *client.Client, supergroupId int32) (chan *client.ChatMember, chan error) {
|
||||
chatMemberChan := make(chan *client.ChatMember, 10)
|
||||
errChan := make(chan error, 1)
|
||||
chatMemberChan := make(chan *client.ChatMember, 10)
|
||||
errChan := make(chan error, 1)
|
||||
|
||||
var filter client.SupergroupMembersFilter = nil
|
||||
var offset int32 = 0
|
||||
var limit int32 = 200
|
||||
var filter client.SupergroupMembersFilter = nil
|
||||
var offset int32 = 0
|
||||
var limit int32 = 200
|
||||
|
||||
go supergroupMembers(tdlibClient, chatMemberChan, errChan, supergroupId, filter, offset, limit)
|
||||
go supergroupMembers(tdlibClient, chatMemberChan, errChan, supergroupId, filter, offset, limit)
|
||||
|
||||
return chatMemberChan, errChan
|
||||
return chatMemberChan, errChan
|
||||
}
|
||||
|
||||
func supergroupMembers(tdlibClient *client.Client, chatMemberChan chan *client.ChatMember, errChan chan error, supergroupId int32, filter client.SupergroupMembersFilter, offset int32, limit int32) {
|
||||
defer func() {
|
||||
close(chatMemberChan)
|
||||
close(errChan)
|
||||
}()
|
||||
|
||||
var page int32 = 0
|
||||
|
||||
for {
|
||||
chatMembers, err := tdlibClient.GetSupergroupMembers(&client.GetSupergroupMembersRequest{
|
||||
SupergroupId: supergroupId,
|
||||
Filter: filter,
|
||||
Offset: page*limit + offset,
|
||||
Limit: limit,
|
||||
})
|
||||
if err != nil {
|
||||
errChan <- err
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
if len(chatMembers.Members) == 0 {
|
||||
errChan <- EOP
|
||||
|
||||
break
|
||||
}
|
||||
|
||||
for _, member := range chatMembers.Members {
|
||||
chatMemberChan <- member
|
||||
}
|
||||
|
||||
page++
|
||||
}
|
||||
defer func() {
|
||||
close(chatMemberChan)
|
||||
close(errChan)
|
||||
}()
|
||||
|
||||
var page int32 = 0
|
||||
|
||||
for {
|
||||
chatMembers, err := tdlibClient.GetSupergroupMembers(&client.GetSupergroupMembersRequest{
|
||||
SupergroupId: supergroupId,
|
||||
Filter: filter,
|
||||
Offset: page*limit + offset,
|
||||
Limit: limit,
|
||||
})
|
||||
if err != nil {
|
||||
errChan <- err
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
if len(chatMembers.Members) == 0 {
|
||||
errChan <- EOP
|
||||
|
||||
break
|
||||
}
|
||||
|
||||
for _, member := range chatMembers.Members {
|
||||
chatMemberChan <- member
|
||||
}
|
||||
|
||||
page++
|
||||
}
|
||||
}
|
||||
|
@ -1,86 +1,86 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"flag"
|
||||
"log"
|
||||
"net/http"
|
||||
"os"
|
||||
"path/filepath"
|
||||
|
||||
"github.com/zelenin/go-tdlib/tlparser"
|
||||
"github.com/zelenin/go-tdlib/codegen"
|
||||
"bufio"
|
||||
"flag"
|
||||
"log"
|
||||
"net/http"
|
||||
"os"
|
||||
"path/filepath"
|
||||
|
||||
"github.com/zelenin/go-tdlib/codegen"
|
||||
"github.com/zelenin/go-tdlib/tlparser"
|
||||
)
|
||||
|
||||
type config struct {
|
||||
version string
|
||||
outputDirPath string
|
||||
packageName string
|
||||
functionFileName string
|
||||
typeFileName string
|
||||
unmarshalerFileName string
|
||||
version string
|
||||
outputDirPath string
|
||||
packageName string
|
||||
functionFileName string
|
||||
typeFileName string
|
||||
unmarshalerFileName string
|
||||
}
|
||||
|
||||
func main() {
|
||||
var config config
|
||||
|
||||
flag.StringVar(&config.version, "version", "", "TDLib version")
|
||||
flag.StringVar(&config.outputDirPath, "outputDir", "./tdlib", "output directory")
|
||||
flag.StringVar(&config.packageName, "package", "tdlib", "package name")
|
||||
flag.StringVar(&config.functionFileName, "functionFile", "function.go", "functions filename")
|
||||
flag.StringVar(&config.typeFileName, "typeFile", "type.go", "types filename")
|
||||
flag.StringVar(&config.unmarshalerFileName, "unmarshalerFile", "unmarshaler.go", "unmarshalers filename")
|
||||
|
||||
flag.Parse()
|
||||
|
||||
resp, err := http.Get("https://raw.githubusercontent.com/tdlib/td/" + config.version + "/td/generate/scheme/td_api.tl")
|
||||
if err != nil {
|
||||
log.Fatalf("http.Get error: %s", err)
|
||||
return
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
schema, err := tlparser.Parse(resp.Body)
|
||||
if err != nil {
|
||||
log.Fatalf("schema parse error: %s", err)
|
||||
return
|
||||
}
|
||||
|
||||
err = os.MkdirAll(config.outputDirPath, 0755)
|
||||
if err != nil {
|
||||
log.Fatalf("error creating %s: %s", config.outputDirPath, err)
|
||||
}
|
||||
|
||||
functionFilePath := filepath.Join(config.outputDirPath, config.functionFileName)
|
||||
|
||||
os.Remove(functionFilePath)
|
||||
functionFile, err := os.OpenFile(functionFilePath, os.O_CREATE|os.O_RDWR|os.O_TRUNC, os.ModePerm)
|
||||
if err != nil {
|
||||
log.Fatalf("functionFile open error: %s", err)
|
||||
}
|
||||
defer functionFile.Close()
|
||||
|
||||
bufio.NewWriter(functionFile).Write(codegen.GenerateFunctions(schema, config.packageName))
|
||||
|
||||
typeFilePath := filepath.Join(config.outputDirPath, config.typeFileName)
|
||||
|
||||
os.Remove(typeFilePath)
|
||||
typeFile, err := os.OpenFile(typeFilePath, os.O_CREATE|os.O_RDWR|os.O_TRUNC, os.ModePerm)
|
||||
if err != nil {
|
||||
log.Fatalf("typeFile open error: %s", err)
|
||||
}
|
||||
defer typeFile.Close()
|
||||
|
||||
bufio.NewWriter(typeFile).Write(codegen.GenerateTypes(schema, config.packageName))
|
||||
|
||||
unmarshalerFilePath := filepath.Join(config.outputDirPath, config.unmarshalerFileName)
|
||||
|
||||
os.Remove(unmarshalerFilePath)
|
||||
unmarshalerFile, err := os.OpenFile(unmarshalerFilePath, os.O_CREATE|os.O_RDWR|os.O_TRUNC, os.ModePerm)
|
||||
if err != nil {
|
||||
log.Fatalf("unmarshalerFile open error: %s", err)
|
||||
}
|
||||
defer unmarshalerFile.Close()
|
||||
|
||||
bufio.NewWriter(unmarshalerFile).Write(codegen.GenerateUnmarshalers(schema, config.packageName))
|
||||
var config config
|
||||
|
||||
flag.StringVar(&config.version, "version", "", "TDLib version")
|
||||
flag.StringVar(&config.outputDirPath, "outputDir", "./tdlib", "output directory")
|
||||
flag.StringVar(&config.packageName, "package", "tdlib", "package name")
|
||||
flag.StringVar(&config.functionFileName, "functionFile", "function.go", "functions filename")
|
||||
flag.StringVar(&config.typeFileName, "typeFile", "type.go", "types filename")
|
||||
flag.StringVar(&config.unmarshalerFileName, "unmarshalerFile", "unmarshaler.go", "unmarshalers filename")
|
||||
|
||||
flag.Parse()
|
||||
|
||||
resp, err := http.Get("https://raw.githubusercontent.com/tdlib/td/" + config.version + "/td/generate/scheme/td_api.tl")
|
||||
if err != nil {
|
||||
log.Fatalf("http.Get error: %s", err)
|
||||
return
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
schema, err := tlparser.Parse(resp.Body)
|
||||
if err != nil {
|
||||
log.Fatalf("schema parse error: %s", err)
|
||||
return
|
||||
}
|
||||
|
||||
err = os.MkdirAll(config.outputDirPath, 0755)
|
||||
if err != nil {
|
||||
log.Fatalf("error creating %s: %s", config.outputDirPath, err)
|
||||
}
|
||||
|
||||
functionFilePath := filepath.Join(config.outputDirPath, config.functionFileName)
|
||||
|
||||
os.Remove(functionFilePath)
|
||||
functionFile, err := os.OpenFile(functionFilePath, os.O_CREATE|os.O_RDWR|os.O_TRUNC, os.ModePerm)
|
||||
if err != nil {
|
||||
log.Fatalf("functionFile open error: %s", err)
|
||||
}
|
||||
defer functionFile.Close()
|
||||
|
||||
bufio.NewWriter(functionFile).Write(codegen.GenerateFunctions(schema, config.packageName))
|
||||
|
||||
typeFilePath := filepath.Join(config.outputDirPath, config.typeFileName)
|
||||
|
||||
os.Remove(typeFilePath)
|
||||
typeFile, err := os.OpenFile(typeFilePath, os.O_CREATE|os.O_RDWR|os.O_TRUNC, os.ModePerm)
|
||||
if err != nil {
|
||||
log.Fatalf("typeFile open error: %s", err)
|
||||
}
|
||||
defer typeFile.Close()
|
||||
|
||||
bufio.NewWriter(typeFile).Write(codegen.GenerateTypes(schema, config.packageName))
|
||||
|
||||
unmarshalerFilePath := filepath.Join(config.outputDirPath, config.unmarshalerFileName)
|
||||
|
||||
os.Remove(unmarshalerFilePath)
|
||||
unmarshalerFile, err := os.OpenFile(unmarshalerFilePath, os.O_CREATE|os.O_RDWR|os.O_TRUNC, os.ModePerm)
|
||||
if err != nil {
|
||||
log.Fatalf("unmarshalerFile open error: %s", err)
|
||||
}
|
||||
defer unmarshalerFile.Close()
|
||||
|
||||
bufio.NewWriter(unmarshalerFile).Write(codegen.GenerateUnmarshalers(schema, config.packageName))
|
||||
}
|
||||
|
@ -1,67 +1,67 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"encoding/json"
|
||||
"flag"
|
||||
"log"
|
||||
"net/http"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"github.com/zelenin/go-tdlib/tlparser"
|
||||
"bufio"
|
||||
"encoding/json"
|
||||
"flag"
|
||||
"github.com/zelenin/go-tdlib/tlparser"
|
||||
"log"
|
||||
"net/http"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func main() {
|
||||
var version string
|
||||
var outputFilePath string
|
||||
var version string
|
||||
var outputFilePath string
|
||||
|
||||
flag.StringVar(&version, "version", "", "TDLib version")
|
||||
flag.StringVar(&outputFilePath, "output", "./td_api.json", "json schema file")
|
||||
flag.StringVar(&version, "version", "", "TDLib version")
|
||||
flag.StringVar(&outputFilePath, "output", "./td_api.json", "json schema file")
|
||||
|
||||
flag.Parse()
|
||||
flag.Parse()
|
||||
|
||||
resp, err := http.Get("https://raw.githubusercontent.com/tdlib/td/" + version + "/td/generate/scheme/td_api.tl")
|
||||
if err != nil {
|
||||
log.Fatalf("http.Get error: %s", err)
|
||||
return
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
resp, err := http.Get("https://raw.githubusercontent.com/tdlib/td/" + version + "/td/generate/scheme/td_api.tl")
|
||||
if err != nil {
|
||||
log.Fatalf("http.Get error: %s", err)
|
||||
return
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
schema, err := tlparser.Parse(resp.Body)
|
||||
if err != nil {
|
||||
log.Fatalf("schema parse error: %s", err)
|
||||
return
|
||||
}
|
||||
schema, err := tlparser.Parse(resp.Body)
|
||||
if err != nil {
|
||||
log.Fatalf("schema parse error: %s", err)
|
||||
return
|
||||
}
|
||||
|
||||
resp, err = http.Get("https://raw.githubusercontent.com/tdlib/td/" + version + "/td/telegram/Td.cpp")
|
||||
if err != nil {
|
||||
log.Fatalf("http.Get error: %s", err)
|
||||
return
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
resp, err = http.Get("https://raw.githubusercontent.com/tdlib/td/" + version + "/td/telegram/Td.cpp")
|
||||
if err != nil {
|
||||
log.Fatalf("http.Get error: %s", err)
|
||||
return
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
err = tlparser.ParseCode(resp.Body, schema)
|
||||
if err != nil {
|
||||
log.Fatalf("parse code error: %s", err)
|
||||
return
|
||||
}
|
||||
err = tlparser.ParseCode(resp.Body, schema)
|
||||
if err != nil {
|
||||
log.Fatalf("parse code error: %s", err)
|
||||
return
|
||||
}
|
||||
|
||||
err = os.MkdirAll(filepath.Dir(outputFilePath), os.ModePerm)
|
||||
if err != nil {
|
||||
log.Fatalf("make dir error: %s", filepath.Dir(outputFilePath))
|
||||
}
|
||||
err = os.MkdirAll(filepath.Dir(outputFilePath), os.ModePerm)
|
||||
if err != nil {
|
||||
log.Fatalf("make dir error: %s", filepath.Dir(outputFilePath))
|
||||
}
|
||||
|
||||
file, err := os.OpenFile(outputFilePath, os.O_CREATE|os.O_RDWR|os.O_TRUNC, os.ModePerm)
|
||||
if err != nil {
|
||||
log.Fatalf("open file error: %s", err)
|
||||
return
|
||||
}
|
||||
file, err := os.OpenFile(outputFilePath, os.O_CREATE|os.O_RDWR|os.O_TRUNC, os.ModePerm)
|
||||
if err != nil {
|
||||
log.Fatalf("open file error: %s", err)
|
||||
return
|
||||
}
|
||||
|
||||
data, err := json.MarshalIndent(schema, "", strings.Repeat(" ", 4))
|
||||
if err != nil {
|
||||
log.Fatalf("json marshal error: %s", err)
|
||||
return
|
||||
}
|
||||
bufio.NewWriter(file).Write(data)
|
||||
data, err := json.MarshalIndent(schema, "", strings.Repeat(" ", 4))
|
||||
if err != nil {
|
||||
log.Fatalf("json marshal error: %s", err)
|
||||
return
|
||||
}
|
||||
bufio.NewWriter(file).Write(data)
|
||||
}
|
||||
|
@ -1,26 +1,26 @@
|
||||
package codegen
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"unicode"
|
||||
"strings"
|
||||
"unicode"
|
||||
)
|
||||
|
||||
func firstUpper(str string) string {
|
||||
for i, r := range str {
|
||||
return string(unicode.ToUpper(r)) + str[i+1:]
|
||||
}
|
||||
for i, r := range str {
|
||||
return string(unicode.ToUpper(r)) + str[i+1:]
|
||||
}
|
||||
|
||||
return str
|
||||
return str
|
||||
}
|
||||
|
||||
func firstLower(str string) string {
|
||||
for i, r := range str {
|
||||
return string(unicode.ToLower(r)) + str[i+1:]
|
||||
}
|
||||
for i, r := range str {
|
||||
return string(unicode.ToLower(r)) + str[i+1:]
|
||||
}
|
||||
|
||||
return str
|
||||
return str
|
||||
}
|
||||
|
||||
func underscoreToCamelCase(s string) string {
|
||||
return strings.Replace(strings.Title(strings.Replace(strings.ToLower(s), "_", " ", -1)), " ", "", -1)
|
||||
return strings.Replace(strings.Title(strings.Replace(strings.ToLower(s), "_", " ", -1)), " ", "", -1)
|
||||
}
|
||||
|
@ -1,487 +1,487 @@
|
||||
package codegen
|
||||
|
||||
import (
|
||||
"github.com/zelenin/go-tdlib/tlparser"
|
||||
"strings"
|
||||
"log"
|
||||
"github.com/zelenin/go-tdlib/tlparser"
|
||||
"log"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type tdlibFunction struct {
|
||||
name string
|
||||
schema *tlparser.Schema
|
||||
name string
|
||||
schema *tlparser.Schema
|
||||
}
|
||||
|
||||
func TdlibFunction(name string, schema *tlparser.Schema) *tdlibFunction {
|
||||
return &tdlibFunction{
|
||||
name: name,
|
||||
schema: schema,
|
||||
}
|
||||
return &tdlibFunction{
|
||||
name: name,
|
||||
schema: schema,
|
||||
}
|
||||
}
|
||||
|
||||
func (entity *tdlibFunction) ToGoName() string {
|
||||
return firstUpper(entity.name)
|
||||
return firstUpper(entity.name)
|
||||
}
|
||||
|
||||
type tdlibFunctionReturn struct {
|
||||
name string
|
||||
schema *tlparser.Schema
|
||||
name string
|
||||
schema *tlparser.Schema
|
||||
}
|
||||
|
||||
func TdlibFunctionReturn(name string, schema *tlparser.Schema) *tdlibFunctionReturn {
|
||||
return &tdlibFunctionReturn{
|
||||
name: name,
|
||||
schema: schema,
|
||||
}
|
||||
return &tdlibFunctionReturn{
|
||||
name: name,
|
||||
schema: schema,
|
||||
}
|
||||
}
|
||||
|
||||
func (entity *tdlibFunctionReturn) IsType() bool {
|
||||
return isType(entity.name, func(entity *tlparser.Type) string {
|
||||
return entity.Class
|
||||
}, entity.schema)
|
||||
return isType(entity.name, func(entity *tlparser.Type) string {
|
||||
return entity.Class
|
||||
}, entity.schema)
|
||||
}
|
||||
|
||||
func (entity *tdlibFunctionReturn) GetType() *tdlibType {
|
||||
return getType(entity.name, func(entity *tlparser.Type) string {
|
||||
return entity.Class
|
||||
}, entity.schema)
|
||||
return getType(entity.name, func(entity *tlparser.Type) string {
|
||||
return entity.Class
|
||||
}, entity.schema)
|
||||
}
|
||||
|
||||
func (entity *tdlibFunctionReturn) IsClass() bool {
|
||||
return isClass(entity.name, func(entity *tlparser.Class) string {
|
||||
return entity.Name
|
||||
}, entity.schema)
|
||||
return isClass(entity.name, func(entity *tlparser.Class) string {
|
||||
return entity.Name
|
||||
}, entity.schema)
|
||||
}
|
||||
|
||||
func (entity *tdlibFunctionReturn) GetClass() *tdlibClass {
|
||||
return getClass(entity.name, func(entity *tlparser.Class) string {
|
||||
return entity.Name
|
||||
}, entity.schema)
|
||||
return getClass(entity.name, func(entity *tlparser.Class) string {
|
||||
return entity.Name
|
||||
}, entity.schema)
|
||||
}
|
||||
|
||||
func (entity *tdlibFunctionReturn) ToGoReturn() string {
|
||||
if strings.HasPrefix(entity.name, "vector<") {
|
||||
log.Fatal("vectors are not supported")
|
||||
}
|
||||
if strings.HasPrefix(entity.name, "vector<") {
|
||||
log.Fatal("vectors are not supported")
|
||||
}
|
||||
|
||||
if entity.IsClass() {
|
||||
return entity.GetClass().ToGoType()
|
||||
}
|
||||
if entity.IsClass() {
|
||||
return entity.GetClass().ToGoType()
|
||||
}
|
||||
|
||||
if entity.GetType().IsInternal() {
|
||||
return entity.GetType().ToGoType()
|
||||
}
|
||||
if entity.GetType().IsInternal() {
|
||||
return entity.GetType().ToGoType()
|
||||
}
|
||||
|
||||
return "*" + entity.GetType().ToGoType()
|
||||
return "*" + entity.GetType().ToGoType()
|
||||
}
|
||||
|
||||
func (entity *tdlibFunctionReturn) ToGoType() string {
|
||||
if strings.HasPrefix(entity.name, "vector<") {
|
||||
log.Fatal("vectors are not supported")
|
||||
}
|
||||
if strings.HasPrefix(entity.name, "vector<") {
|
||||
log.Fatal("vectors are not supported")
|
||||
}
|
||||
|
||||
if entity.IsClass() {
|
||||
return entity.GetClass().ToGoType()
|
||||
}
|
||||
if entity.IsClass() {
|
||||
return entity.GetClass().ToGoType()
|
||||
}
|
||||
|
||||
return entity.GetType().ToGoType()
|
||||
return entity.GetType().ToGoType()
|
||||
}
|
||||
|
||||
type tdlibFunctionProperty struct {
|
||||
name string
|
||||
propertyType string
|
||||
schema *tlparser.Schema
|
||||
name string
|
||||
propertyType string
|
||||
schema *tlparser.Schema
|
||||
}
|
||||
|
||||
func TdlibFunctionProperty(name string, propertyType string, schema *tlparser.Schema) *tdlibFunctionProperty {
|
||||
return &tdlibFunctionProperty{
|
||||
name: name,
|
||||
propertyType: propertyType,
|
||||
schema: schema,
|
||||
}
|
||||
return &tdlibFunctionProperty{
|
||||
name: name,
|
||||
propertyType: propertyType,
|
||||
schema: schema,
|
||||
}
|
||||
}
|
||||
|
||||
func (entity *tdlibFunctionProperty) GetPrimitive() string {
|
||||
primitive := entity.propertyType
|
||||
primitive := entity.propertyType
|
||||
|
||||
for strings.HasPrefix(primitive, "vector<") {
|
||||
primitive = strings.TrimSuffix(strings.TrimPrefix(primitive, "vector<"), ">")
|
||||
}
|
||||
for strings.HasPrefix(primitive, "vector<") {
|
||||
primitive = strings.TrimSuffix(strings.TrimPrefix(primitive, "vector<"), ">")
|
||||
}
|
||||
|
||||
return primitive
|
||||
return primitive
|
||||
}
|
||||
|
||||
func (entity *tdlibFunctionProperty) IsType() bool {
|
||||
primitive := entity.GetPrimitive()
|
||||
return isType(primitive, func(entity *tlparser.Type) string {
|
||||
return entity.Name
|
||||
}, entity.schema)
|
||||
primitive := entity.GetPrimitive()
|
||||
return isType(primitive, func(entity *tlparser.Type) string {
|
||||
return entity.Name
|
||||
}, entity.schema)
|
||||
}
|
||||
|
||||
func (entity *tdlibFunctionProperty) GetType() *tdlibType {
|
||||
primitive := entity.GetPrimitive()
|
||||
return getType(primitive, func(entity *tlparser.Type) string {
|
||||
return entity.Name
|
||||
}, entity.schema)
|
||||
primitive := entity.GetPrimitive()
|
||||
return getType(primitive, func(entity *tlparser.Type) string {
|
||||
return entity.Name
|
||||
}, entity.schema)
|
||||
}
|
||||
|
||||
func (entity *tdlibFunctionProperty) IsClass() bool {
|
||||
primitive := entity.GetPrimitive()
|
||||
return isClass(primitive, func(entity *tlparser.Class) string {
|
||||
return entity.Name
|
||||
}, entity.schema)
|
||||
primitive := entity.GetPrimitive()
|
||||
return isClass(primitive, func(entity *tlparser.Class) string {
|
||||
return entity.Name
|
||||
}, entity.schema)
|
||||
}
|
||||
|
||||
func (entity *tdlibFunctionProperty) GetClass() *tdlibClass {
|
||||
primitive := entity.GetPrimitive()
|
||||
return getClass(primitive, func(entity *tlparser.Class) string {
|
||||
return entity.Name
|
||||
}, entity.schema)
|
||||
primitive := entity.GetPrimitive()
|
||||
return getClass(primitive, func(entity *tlparser.Class) string {
|
||||
return entity.Name
|
||||
}, entity.schema)
|
||||
}
|
||||
|
||||
func (entity *tdlibFunctionProperty) ToGoName() string {
|
||||
name := firstLower(underscoreToCamelCase(entity.name))
|
||||
if name == "type" {
|
||||
name += "Param"
|
||||
}
|
||||
name := firstLower(underscoreToCamelCase(entity.name))
|
||||
if name == "type" {
|
||||
name += "Param"
|
||||
}
|
||||
|
||||
return name
|
||||
return name
|
||||
}
|
||||
|
||||
func (entity *tdlibFunctionProperty) ToGoType() string {
|
||||
tdlibType := entity.propertyType
|
||||
goType := ""
|
||||
tdlibType := entity.propertyType
|
||||
goType := ""
|
||||
|
||||
for strings.HasPrefix(tdlibType, "vector<") {
|
||||
goType = goType + "[]"
|
||||
tdlibType = strings.TrimSuffix(strings.TrimPrefix(tdlibType, "vector<"), ">")
|
||||
}
|
||||
for strings.HasPrefix(tdlibType, "vector<") {
|
||||
goType = goType + "[]"
|
||||
tdlibType = strings.TrimSuffix(strings.TrimPrefix(tdlibType, "vector<"), ">")
|
||||
}
|
||||
|
||||
if entity.IsClass() {
|
||||
return goType + entity.GetClass().ToGoType()
|
||||
}
|
||||
if entity.IsClass() {
|
||||
return goType + entity.GetClass().ToGoType()
|
||||
}
|
||||
|
||||
if entity.GetType().IsInternal() {
|
||||
return goType + entity.GetType().ToGoType()
|
||||
}
|
||||
if entity.GetType().IsInternal() {
|
||||
return goType + entity.GetType().ToGoType()
|
||||
}
|
||||
|
||||
return goType + "*" + entity.GetType().ToGoType()
|
||||
return goType + "*" + entity.GetType().ToGoType()
|
||||
}
|
||||
|
||||
type tdlibType struct {
|
||||
name string
|
||||
schema *tlparser.Schema
|
||||
name string
|
||||
schema *tlparser.Schema
|
||||
}
|
||||
|
||||
func TdlibType(name string, schema *tlparser.Schema) *tdlibType {
|
||||
return &tdlibType{
|
||||
name: name,
|
||||
schema: schema,
|
||||
}
|
||||
return &tdlibType{
|
||||
name: name,
|
||||
schema: schema,
|
||||
}
|
||||
}
|
||||
|
||||
func (entity *tdlibType) IsInternal() bool {
|
||||
switch entity.name {
|
||||
case "double":
|
||||
return true
|
||||
switch entity.name {
|
||||
case "double":
|
||||
return true
|
||||
|
||||
case "string":
|
||||
return true
|
||||
case "string":
|
||||
return true
|
||||
|
||||
case "int32":
|
||||
return true
|
||||
case "int32":
|
||||
return true
|
||||
|
||||
case "int53":
|
||||
return true
|
||||
case "int53":
|
||||
return true
|
||||
|
||||
case "int64":
|
||||
return true
|
||||
case "int64":
|
||||
return true
|
||||
|
||||
case "bytes":
|
||||
return true
|
||||
case "bytes":
|
||||
return true
|
||||
|
||||
case "boolFalse":
|
||||
return true
|
||||
case "boolFalse":
|
||||
return true
|
||||
|
||||
case "boolTrue":
|
||||
return true
|
||||
case "boolTrue":
|
||||
return true
|
||||
|
||||
case "vector<t>":
|
||||
return true
|
||||
}
|
||||
case "vector<t>":
|
||||
return true
|
||||
}
|
||||
|
||||
return false
|
||||
return false
|
||||
}
|
||||
|
||||
func (entity *tdlibType) GetType() *tlparser.Type {
|
||||
name := normalizeEntityName(entity.name)
|
||||
for _, typ := range entity.schema.Types {
|
||||
if typ.Name == name {
|
||||
return typ
|
||||
}
|
||||
}
|
||||
return nil
|
||||
name := normalizeEntityName(entity.name)
|
||||
for _, typ := range entity.schema.Types {
|
||||
if typ.Name == name {
|
||||
return typ
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (entity *tdlibType) ToGoType() string {
|
||||
if strings.HasPrefix(entity.name, "vector<") {
|
||||
log.Fatal("vectors are not supported")
|
||||
}
|
||||
if strings.HasPrefix(entity.name, "vector<") {
|
||||
log.Fatal("vectors are not supported")
|
||||
}
|
||||
|
||||
switch entity.name {
|
||||
case "double":
|
||||
return "float64"
|
||||
switch entity.name {
|
||||
case "double":
|
||||
return "float64"
|
||||
|
||||
case "string":
|
||||
return "string"
|
||||
case "string":
|
||||
return "string"
|
||||
|
||||
case "int32":
|
||||
return "int32"
|
||||
case "int32":
|
||||
return "int32"
|
||||
|
||||
case "int53":
|
||||
return "int64"
|
||||
case "int53":
|
||||
return "int64"
|
||||
|
||||
case "int64":
|
||||
return "JsonInt64"
|
||||
case "int64":
|
||||
return "JsonInt64"
|
||||
|
||||
case "bytes":
|
||||
return "[]byte"
|
||||
case "bytes":
|
||||
return "[]byte"
|
||||
|
||||
case "boolFalse":
|
||||
return "bool"
|
||||
case "boolFalse":
|
||||
return "bool"
|
||||
|
||||
case "boolTrue":
|
||||
return "bool"
|
||||
}
|
||||
case "boolTrue":
|
||||
return "bool"
|
||||
}
|
||||
|
||||
return firstUpper(entity.name)
|
||||
return firstUpper(entity.name)
|
||||
}
|
||||
|
||||
func (entity *tdlibType) ToType() string {
|
||||
return entity.ToGoType() + "Type"
|
||||
return entity.ToGoType() + "Type"
|
||||
}
|
||||
|
||||
func (entity *tdlibType) HasClass() bool {
|
||||
className := entity.GetType().Class
|
||||
for _, class := range entity.schema.Classes {
|
||||
if class.Name == className {
|
||||
return true
|
||||
}
|
||||
}
|
||||
className := entity.GetType().Class
|
||||
for _, class := range entity.schema.Classes {
|
||||
if class.Name == className {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
return false
|
||||
}
|
||||
|
||||
func (entity *tdlibType) GetClass() *tlparser.Class {
|
||||
className := entity.GetType().Class
|
||||
for _, class := range entity.schema.Classes {
|
||||
if class.Name == className {
|
||||
return class
|
||||
}
|
||||
}
|
||||
className := entity.GetType().Class
|
||||
for _, class := range entity.schema.Classes {
|
||||
if class.Name == className {
|
||||
return class
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
return nil
|
||||
}
|
||||
|
||||
func (entity *tdlibType) HasClassProperties() bool {
|
||||
for _, prop := range entity.GetType().Properties {
|
||||
tdlibTypeProperty := TdlibTypeProperty(prop.Name, prop.Type, entity.schema)
|
||||
if tdlibTypeProperty.IsClass() && !tdlibTypeProperty.IsList() {
|
||||
return true
|
||||
}
|
||||
for _, prop := range entity.GetType().Properties {
|
||||
tdlibTypeProperty := TdlibTypeProperty(prop.Name, prop.Type, entity.schema)
|
||||
if tdlibTypeProperty.IsClass() && !tdlibTypeProperty.IsList() {
|
||||
return true
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
return false
|
||||
}
|
||||
|
||||
func (entity *tdlibType) IsList() bool {
|
||||
return strings.HasPrefix(entity.name, "vector<")
|
||||
return strings.HasPrefix(entity.name, "vector<")
|
||||
}
|
||||
|
||||
func (entity *tdlibType) ToClassConst() string {
|
||||
if entity.HasClass() {
|
||||
return "Class" + TdlibClass(entity.GetType().Class, entity.schema).ToGoType()
|
||||
}
|
||||
return "Class" + entity.ToGoType()
|
||||
if entity.HasClass() {
|
||||
return "Class" + TdlibClass(entity.GetType().Class, entity.schema).ToGoType()
|
||||
}
|
||||
return "Class" + entity.ToGoType()
|
||||
}
|
||||
|
||||
func (entity *tdlibType) ToTypeConst() string {
|
||||
return "Type" + entity.ToGoType()
|
||||
return "Type" + entity.ToGoType()
|
||||
}
|
||||
|
||||
type tdlibClass struct {
|
||||
name string
|
||||
schema *tlparser.Schema
|
||||
name string
|
||||
schema *tlparser.Schema
|
||||
}
|
||||
|
||||
func TdlibClass(name string, schema *tlparser.Schema) *tdlibClass {
|
||||
return &tdlibClass{
|
||||
name: name,
|
||||
schema: schema,
|
||||
}
|
||||
return &tdlibClass{
|
||||
name: name,
|
||||
schema: schema,
|
||||
}
|
||||
}
|
||||
|
||||
func (entity *tdlibClass) ToGoType() string {
|
||||
return firstUpper(entity.name)
|
||||
return firstUpper(entity.name)
|
||||
}
|
||||
|
||||
func (entity *tdlibClass) ToType() string {
|
||||
return entity.ToGoType() + "Type"
|
||||
return entity.ToGoType() + "Type"
|
||||
}
|
||||
|
||||
func (entity *tdlibClass) GetSubTypes() []*tdlibType {
|
||||
types := []*tdlibType{}
|
||||
types := []*tdlibType{}
|
||||
|
||||
for _, t := range entity.schema.Types {
|
||||
if t.Class == entity.name {
|
||||
types = append(types, TdlibType(t.Name, entity.schema))
|
||||
}
|
||||
}
|
||||
for _, t := range entity.schema.Types {
|
||||
if t.Class == entity.name {
|
||||
types = append(types, TdlibType(t.Name, entity.schema))
|
||||
}
|
||||
}
|
||||
|
||||
return types
|
||||
return types
|
||||
}
|
||||
|
||||
func (entity *tdlibClass) ToClassConst() string {
|
||||
return "Class" + entity.ToGoType()
|
||||
return "Class" + entity.ToGoType()
|
||||
}
|
||||
|
||||
type tdlibTypeProperty struct {
|
||||
name string
|
||||
propertyType string
|
||||
schema *tlparser.Schema
|
||||
name string
|
||||
propertyType string
|
||||
schema *tlparser.Schema
|
||||
}
|
||||
|
||||
func TdlibTypeProperty(name string, propertyType string, schema *tlparser.Schema) *tdlibTypeProperty {
|
||||
return &tdlibTypeProperty{
|
||||
name: name,
|
||||
propertyType: propertyType,
|
||||
schema: schema,
|
||||
}
|
||||
return &tdlibTypeProperty{
|
||||
name: name,
|
||||
propertyType: propertyType,
|
||||
schema: schema,
|
||||
}
|
||||
}
|
||||
|
||||
func (entity *tdlibTypeProperty) IsList() bool {
|
||||
return strings.HasPrefix(entity.propertyType, "vector<")
|
||||
return strings.HasPrefix(entity.propertyType, "vector<")
|
||||
}
|
||||
|
||||
func (entity *tdlibTypeProperty) GetPrimitive() string {
|
||||
primitive := entity.propertyType
|
||||
primitive := entity.propertyType
|
||||
|
||||
for strings.HasPrefix(primitive, "vector<") {
|
||||
primitive = strings.TrimSuffix(strings.TrimPrefix(primitive, "vector<"), ">")
|
||||
}
|
||||
for strings.HasPrefix(primitive, "vector<") {
|
||||
primitive = strings.TrimSuffix(strings.TrimPrefix(primitive, "vector<"), ">")
|
||||
}
|
||||
|
||||
return primitive
|
||||
return primitive
|
||||
}
|
||||
|
||||
func (entity *tdlibTypeProperty) IsType() bool {
|
||||
primitive := entity.GetPrimitive()
|
||||
return isType(primitive, func(entity *tlparser.Type) string {
|
||||
return entity.Name
|
||||
}, entity.schema)
|
||||
primitive := entity.GetPrimitive()
|
||||
return isType(primitive, func(entity *tlparser.Type) string {
|
||||
return entity.Name
|
||||
}, entity.schema)
|
||||
}
|
||||
|
||||
func (entity *tdlibTypeProperty) GetType() *tdlibType {
|
||||
primitive := entity.GetPrimitive()
|
||||
return getType(primitive, func(entity *tlparser.Type) string {
|
||||
return entity.Name
|
||||
}, entity.schema)
|
||||
primitive := entity.GetPrimitive()
|
||||
return getType(primitive, func(entity *tlparser.Type) string {
|
||||
return entity.Name
|
||||
}, entity.schema)
|
||||
}
|
||||
|
||||
func (entity *tdlibTypeProperty) IsClass() bool {
|
||||
primitive := entity.GetPrimitive()
|
||||
return isClass(primitive, func(entity *tlparser.Class) string {
|
||||
return entity.Name
|
||||
}, entity.schema)
|
||||
primitive := entity.GetPrimitive()
|
||||
return isClass(primitive, func(entity *tlparser.Class) string {
|
||||
return entity.Name
|
||||
}, entity.schema)
|
||||
}
|
||||
|
||||
func (entity *tdlibTypeProperty) GetClass() *tdlibClass {
|
||||
primitive := entity.GetPrimitive()
|
||||
return getClass(primitive, func(entity *tlparser.Class) string {
|
||||
return entity.Name
|
||||
}, entity.schema)
|
<