Package tl implements TL (Type Language) schema parser and writer. Inspired by grammers parser.
Used by gotd/td in code generation pipeline.
go get github.com/gotd/tlThis program parses schema from stdin and prints all definitions with their names and types.
package main import ( "fmt" "os" "github.com/gotd/tl" ) func main() { schema, err := tl.Parse(os.Stdin) if err != nil { panic(err) } for _, d := range schema.Definitions { fmt.Printf("%s#%x = %s;\n", d.Definition.Name, d.Definition.ID, d.Definition.Type) } }
You can use it like that:
$ curl -s "https://raw.githubusercontent.com/tdlib/td/master/td/generate/scheme/td_api.tl" \ | go run github.com/gotd/tl/cmd/tl-print \ | less
Output:
double#2210c154 = Double; string#b5286e24 = String; int32#5cb934fa = Int32; int53#6781c7ee = Int53; int64#5d9ed744 = Int64; bytes#e937bb82 = Bytes; boolFalse#bc799737 = Bool; boolTrue#997275b5 = Bool; error#9bdd8f1a = Error; ok#d4edbe69 = Ok; tdlibParameters#d29c1d7b = TdlibParameters; //...
You can also generate .tl file from tl.Schema.
Any WriteTo result is valid input for Parse.
package main import ( "os" "github.com/gotd/tl" ) func main() { def := tl.Definition{ Name: "error", Type: tl.Type{Name: "Error"}, // Currently you should always pass explicit ID. ID: 0x9bdd8f1a, Params: []tl.Parameter{ { Name: "code", Type: tl.Type{Name: "int32", Bare: true}, }, { Name: "message", Type: tl.Type{Name: "string", Bare: true}, }, }, } _, _ = tl.Schema{ Definitions: []tl.SchemaDefinition{ { Category: tl.CategoryType, Definition: def, }, }, }.WriteTo(os.Stdout) }
Output
error#9bdd8f1a code:int32 message:string = Error;