initial commit
This commit is contained in:
commit
6358d0754b
34 changed files with 82616 additions and 0 deletions
86
cmd/generate-code.go
Normal file
86
cmd/generate-code.go
Normal file
|
@ -0,0 +1,86 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"flag"
|
||||
"log"
|
||||
"net/http"
|
||||
"os"
|
||||
"path/filepath"
|
||||
|
||||
"github.com/astravexton/go-tdlib/codegen"
|
||||
"github.com/astravexton/go-tdlib/tlparser"
|
||||
)
|
||||
|
||||
type config struct {
|
||||
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))
|
||||
}
|
68
cmd/generate-json.go
Normal file
68
cmd/generate-json.go
Normal file
|
@ -0,0 +1,68 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"encoding/json"
|
||||
"flag"
|
||||
"log"
|
||||
"net/http"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
"github.com/astravexton/go-tdlib/tlparser"
|
||||
)
|
||||
|
||||
func main() {
|
||||
var version string
|
||||
var outputFilePath string
|
||||
|
||||
flag.StringVar(&version, "version", "", "TDLib version")
|
||||
flag.StringVar(&outputFilePath, "output", "./td_api.json", "json schema file")
|
||||
|
||||
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()
|
||||
|
||||
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()
|
||||
|
||||
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))
|
||||
}
|
||||
|
||||
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)
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue