diff --git a/abi/contracts_errors.go b/abi/contracts_errors.go index a866e774..28593fb6 100644 --- a/abi/contracts_errors.go +++ b/abi/contracts_errors.go @@ -1,6 +1,6 @@ -package abi +// Code generated - DO NOT EDIT. -// Code autogenerated. DO NOT EDIT. +package abi import () diff --git a/abi/extensions.go b/abi/extensions.go deleted file mode 100644 index 31e71c3f..00000000 --- a/abi/extensions.go +++ /dev/null @@ -1,3 +0,0 @@ -package abi - -//go:generate go run generator.go diff --git a/abi/get_methods.go b/abi/get_methods.go index f9d0fd56..357e1f41 100644 --- a/abi/get_methods.go +++ b/abi/get_methods.go @@ -1,6 +1,6 @@ -package abi +// Code generated - DO NOT EDIT. -// Code autogenerated. DO NOT EDIT. +package abi import ( "context" diff --git a/abi/interfaces.go b/abi/interfaces.go index 375fdd41..8e09478d 100644 --- a/abi/interfaces.go +++ b/abi/interfaces.go @@ -1,6 +1,6 @@ -package abi +// Code generated - DO NOT EDIT. -// Code autogenerated. DO NOT EDIT. +package abi import ( "github.com/tonkeeper/tongo/ton" diff --git a/abi/jetton_msg_types.go b/abi/jetton_msg_types.go index 37602eef..984d3999 100644 --- a/abi/jetton_msg_types.go +++ b/abi/jetton_msg_types.go @@ -1,6 +1,6 @@ -package abi +// Code generated - DO NOT EDIT. -// Code autogenerated. DO NOT EDIT. +package abi import ( "github.com/tonkeeper/tongo/boc" diff --git a/abi/messages_generated.go b/abi/messages_generated.go index d4f7203b..388ee0e3 100644 --- a/abi/messages_generated.go +++ b/abi/messages_generated.go @@ -1,6 +1,6 @@ -package abi +// Code generated - DO NOT EDIT. -// Code autogenerated. DO NOT EDIT. +package abi import ( "github.com/tonkeeper/tongo/tlb" diff --git a/abi/nfts_msg_types.go b/abi/nfts_msg_types.go index 3ca93cba..b25bcf22 100644 --- a/abi/nfts_msg_types.go +++ b/abi/nfts_msg_types.go @@ -1,6 +1,6 @@ -package abi +// Code generated - DO NOT EDIT. -// Code autogenerated. DO NOT EDIT. +package abi import ( "github.com/tonkeeper/tongo/boc" diff --git a/abi/types.go b/abi/types.go index bda6f213..f36391b0 100644 --- a/abi/types.go +++ b/abi/types.go @@ -1,6 +1,6 @@ -package abi +// Code generated - DO NOT EDIT. -// Code autogenerated. DO NOT EDIT. +package abi import ( "encoding/json" diff --git a/abi/generator.go b/cmd/codegen/abi/main.go similarity index 85% rename from abi/generator.go rename to cmd/codegen/abi/main.go index a00b07f2..28b22cc3 100644 --- a/abi/generator.go +++ b/cmd/codegen/abi/main.go @@ -1,8 +1,7 @@ -//go:build ignore - package main import ( + "flag" "fmt" "go/format" "io/fs" @@ -14,15 +13,15 @@ import ( "github.com/tonkeeper/tongo/abi/parser" ) -const HEADER = `package abi -// Code autogenerated. DO NOT EDIT. +const HEADER = `// Code generated - DO NOT EDIT. + +package abi import ( %v ) ` -const SCHEMAS_PATH = "schemas/" func mergeMethods(methods []parser.GetMethod) ([]parser.GetMethod, error) { methodsMap := map[string]parser.GetMethod{} @@ -51,9 +50,13 @@ func mergeMethods(methods []parser.GetMethod) ([]parser.GetMethod, error) { } func main() { + schemasDir := flag.String("schemas", "abi/schemas", "directory containing XML TLB schemas") + outputDir := flag.String("output", "abi", "directory to write generated files") + flag.Parse() + var abi parser.ABI var methods []parser.GetMethod - filepath.Walk(SCHEMAS_PATH, func(path string, info fs.FileInfo, err error) error { + filepath.Walk(*schemasDir, func(path string, info fs.FileInfo, err error) error { if !strings.HasSuffix(info.Name(), ".xml") { return nil } @@ -127,7 +130,7 @@ func main() { {nfts, "nfts_msg_types.go", `"github.com/tonkeeper/tongo/boc"`, `"github.com/tonkeeper/tongo/tlb"`}, {contractErrors, "contracts_errors.go"}, } { - file, err := os.Create(f[1]) + file, err := os.Create(filepath.Join(*outputDir, f[1])) if err != nil { panic(err) } @@ -145,8 +148,11 @@ func main() { if err != nil { panic(err) } + fmt.Println(filepath.Join(*outputDir, f[1])) } - if err := os.WriteFile("messages.md", []byte(messagesMD), 0644); err != nil { + mdPath := filepath.Join(*outputDir, "messages.md") + if err := os.WriteFile(mdPath, []byte(messagesMD), 0644); err != nil { panic(err) } + fmt.Println(mdPath) } diff --git a/tlb/generator-config.go b/cmd/codegen/config/main.go similarity index 60% rename from tlb/generator-config.go rename to cmd/codegen/config/main.go index 00d63bea..06a89285 100644 --- a/tlb/generator-config.go +++ b/cmd/codegen/config/main.go @@ -1,15 +1,20 @@ -//go:build ignore - package main import ( + "flag" + "fmt" "os" + "path/filepath" "github.com/tonkeeper/tongo/tlb/parser" ) func main() { - content, err := os.ReadFile("config.tlb") + input := flag.String("input", "tlb/config.tlb", "path to config.tlb") + outputDir := flag.String("output", "tlb", "directory to write generated files") + flag.Parse() + + content, err := os.ReadFile(*input) if err != nil { panic(err) } @@ -23,7 +28,7 @@ func main() { panic(err) } file := parser.File{ - Name: "config.go", + Name: filepath.Join(*outputDir, "config.go"), Package: "tlb", Imports: []string{"encoding/json", "fmt"}, Code: s, @@ -31,4 +36,5 @@ func main() { if err := file.Save(); err != nil { panic(err) } + fmt.Println(file.Name) } diff --git a/cmd/codegen/integers/main.go b/cmd/codegen/integers/main.go new file mode 100644 index 00000000..63c9710a --- /dev/null +++ b/cmd/codegen/integers/main.go @@ -0,0 +1,50 @@ +package main + +import ( + "flag" + "fmt" + "go/format" + "os" + "path/filepath" + + "github.com/tonkeeper/tongo/tlb/parser" +) + +var bitsSizes = []int{80, 96, 128, 256, 264, 320, 352, 512} +var intSizes = []int{128, 256, 257} +var uintSizes = []int{128, 160, 220, 256} + +func main() { + outputDir := flag.String("output", "tlb", "directory to write generated files") + flag.Parse() + + src := `// Code generated - DO NOT EDIT. + +package tlb + +import ( + "bytes" + "encoding/hex" + "fmt" + "math/big" + "strconv" + "strings" + + "github.com/tonkeeper/tongo/boc" +) +` + parser.GenerateVarUintTypes(32) + + parser.GenerateConstantInts(64) + + parser.GenerateConstantBigInts(intSizes) + + parser.GenerateConstantBigUints(uintSizes) + + parser.GenerateBitsTypes(bitsSizes) + + formatted, err := format.Source([]byte(src)) + if err != nil { + panic(err) + } + outPath := filepath.Join(*outputDir, "integers.go") + if err := os.WriteFile(outPath, formatted, 0644); err != nil { + panic(err) + } + fmt.Println(outPath) +} diff --git a/liteclient/generator.go b/cmd/codegen/liteclient/main.go similarity index 51% rename from liteclient/generator.go rename to cmd/codegen/liteclient/main.go index 23de6763..841097d7 100644 --- a/liteclient/generator.go +++ b/cmd/codegen/liteclient/main.go @@ -1,16 +1,21 @@ -//go:build ignore - package main import ( + "flag" "fmt" - "github.com/tonkeeper/tongo/tl/parser" - "io/ioutil" + "go/format" "os" + "path/filepath" + + "github.com/tonkeeper/tongo/tl/parser" ) func main() { - scheme, err := ioutil.ReadFile("lite_api.tl") + input := flag.String("input", "liteclient/lite_api.tl", "path to lite_api.tl") + outputDir := flag.String("output", "liteclient", "directory to write generated files") + flag.Parse() + + scheme, err := os.ReadFile(*input) if err != nil { panic(err) } @@ -30,12 +35,9 @@ func main() { panic(err) } - f, err := os.Create("generated.go") - if err != nil { - panic(err) - } - _, err = fmt.Fprint(f, `package liteclient -// Code autogenerated. DO NOT EDIT. + src := `// Code generated - DO NOT EDIT. + +package liteclient import ( "bytes" @@ -45,16 +47,15 @@ import ( "github.com/tonkeeper/tongo/tl" "io" ) -`) - if err != nil { - panic(err) - } - _, err = f.WriteString(types) +` + types + functions + + formatted, err := format.Source([]byte(src)) if err != nil { panic(err) } - _, err = f.WriteString(functions) - if err != nil { + outPath := filepath.Join(*outputDir, "generated.go") + if err := os.WriteFile(outPath, formatted, 0644); err != nil { panic(err) } + fmt.Println(outPath) } diff --git a/generate.go b/generate.go new file mode 100644 index 00000000..7383cf89 --- /dev/null +++ b/generate.go @@ -0,0 +1,6 @@ +package tongo + +//ignore(broken) go:generate go run ../cmd/codegen/config +//go:generate go run ./cmd/codegen/abi -schemas abi/schemas -output abi +//go:generate go run ./cmd/codegen/integers -output tlb +//go:generate go run ./cmd/codegen/liteclient -input liteclient/lite_api.tl -output liteclient diff --git a/liteapi/models.go b/liteapi/models.go index a0f70b79..9c737965 100644 --- a/liteapi/models.go +++ b/liteapi/models.go @@ -1,4 +1,4 @@ -// Code autogenerated. DO NOT EDIT. +// Code generated - DO NOT EDIT. package liteapi diff --git a/liteclient/extensions.go b/liteclient/extensions.go index b66c382d..25955773 100644 --- a/liteclient/extensions.go +++ b/liteclient/extensions.go @@ -1,7 +1,5 @@ package liteclient -//go:generate go run generator.go - import ( "bytes" "fmt" diff --git a/liteclient/generated.go b/liteclient/generated.go index 6ade84c0..cb2c4b28 100644 --- a/liteclient/generated.go +++ b/liteclient/generated.go @@ -1,6 +1,6 @@ -package liteclient +// Code generated - DO NOT EDIT. -// Code autogenerated. DO NOT EDIT. +package liteclient import ( "bytes" diff --git a/tl/parser/generator.go b/tl/parser/generator.go index 1fac181b..2ec1fc2f 100644 --- a/tl/parser/generator.go +++ b/tl/parser/generator.go @@ -6,10 +6,11 @@ import ( "encoding/binary" "encoding/hex" "fmt" - "github.com/tonkeeper/tongo/utils" "go/format" "strings" "text/template" + + "github.com/tonkeeper/tongo/utils" ) type DefaultType struct { @@ -636,6 +637,5 @@ func (g *Generator) generateRequestDecoder() string { panic(err) return "" } - fmt.Printf("%s", buf.String()) return buf.String() } diff --git a/tlb/config.go b/tlb/config.go index ff4065d1..456679c4 100644 --- a/tlb/config.go +++ b/tlb/config.go @@ -1,6 +1,6 @@ -package tlb +// Code generated - DO NOT EDIT. -// Code autogenerated. DO NOT EDIT. +package tlb import ( "encoding/json" diff --git a/tlb/generator.go b/tlb/generator.go deleted file mode 100644 index 5dcd9a9f..00000000 --- a/tlb/generator.go +++ /dev/null @@ -1,63 +0,0 @@ -//go:build ignore - -package main - -import ( - "fmt" - "os" - - "github.com/tonkeeper/tongo/tlb/parser" -) - -var bitsSizes = []int{80, 96, 128, 256, 264, 320, 352, 512} -var intSizes = []int{128, 256, 257} -var uintSizes = []int{128, 160, 220, 256} - -func main() { - s1 := parser.GenerateVarUintTypes(32) - s2 := parser.GenerateConstantInts(64) - s3 := parser.GenerateConstantBigInts(intSizes) - s4 := parser.GenerateConstantBigUints(uintSizes) - s5 := parser.GenerateBitsTypes(bitsSizes) - f, err := os.Create("integers.go") - if err != nil { - panic(err) - } - _, err = fmt.Fprint(f, `package tlb -// Code autogenerated. DO NOT EDIT. - -import ( - "bytes" - "encoding/hex" - "fmt" - "math/big" - "strconv" - "strings" - - "github.com/tonkeeper/tongo/boc" -) -`) - if err != nil { - panic(err) - } - _, err = f.WriteString(s1) - if err != nil { - panic(err) - } - _, err = f.WriteString(s2) - if err != nil { - panic(err) - } - _, err = f.WriteString(s3) - if err != nil { - panic(err) - } - _, err = f.WriteString(s4) - if err != nil { - panic(err) - } - _, err = f.WriteString(s5) - if err != nil { - panic(err) - } -} diff --git a/tlb/integers.go b/tlb/integers.go index a3a172c7..6d1b372b 100644 --- a/tlb/integers.go +++ b/tlb/integers.go @@ -1,6 +1,6 @@ -package tlb +// Code generated - DO NOT EDIT. -// Code autogenerated. DO NOT EDIT. +package tlb import ( "bytes" @@ -8116,6 +8116,15 @@ func (u Bits80) Compare(other any) (int, bool) { return bytes.Compare(u[:], otherBits[:]), true } +func (u *Bits80) UnmarshalTLB(c *boc.Cell, decoder *Decoder) error { + if bytes, err := c.ReadBytes(10); err != nil { + return err + } else { + copy(u[:], bytes) + return nil + } +} + type Bits96 [12]byte func (u Bits96) FixedSize() int { @@ -8154,6 +8163,15 @@ func (u Bits96) Compare(other any) (int, bool) { return bytes.Compare(u[:], otherBits[:]), true } +func (u *Bits96) UnmarshalTLB(c *boc.Cell, decoder *Decoder) error { + if bytes, err := c.ReadBytes(12); err != nil { + return err + } else { + copy(u[:], bytes) + return nil + } +} + type Bits128 [16]byte func (u Bits128) FixedSize() int { @@ -8192,6 +8210,15 @@ func (u Bits128) Compare(other any) (int, bool) { return bytes.Compare(u[:], otherBits[:]), true } +func (u *Bits128) UnmarshalTLB(c *boc.Cell, decoder *Decoder) error { + if bytes, err := c.ReadBytes(16); err != nil { + return err + } else { + copy(u[:], bytes) + return nil + } +} + type Bits256 [32]byte func (u Bits256) FixedSize() int { @@ -8230,6 +8257,15 @@ func (u Bits256) Compare(other any) (int, bool) { return bytes.Compare(u[:], otherBits[:]), true } +func (u *Bits256) UnmarshalTLB(c *boc.Cell, decoder *Decoder) error { + if bytes, err := c.ReadBytes(32); err != nil { + return err + } else { + copy(u[:], bytes) + return nil + } +} + type Bits264 [33]byte func (u Bits264) FixedSize() int { @@ -8268,6 +8304,15 @@ func (u Bits264) Compare(other any) (int, bool) { return bytes.Compare(u[:], otherBits[:]), true } +func (u *Bits264) UnmarshalTLB(c *boc.Cell, decoder *Decoder) error { + if bytes, err := c.ReadBytes(33); err != nil { + return err + } else { + copy(u[:], bytes) + return nil + } +} + type Bits320 [40]byte func (u Bits320) FixedSize() int { @@ -8306,6 +8351,15 @@ func (u Bits320) Compare(other any) (int, bool) { return bytes.Compare(u[:], otherBits[:]), true } +func (u *Bits320) UnmarshalTLB(c *boc.Cell, decoder *Decoder) error { + if bytes, err := c.ReadBytes(40); err != nil { + return err + } else { + copy(u[:], bytes) + return nil + } +} + type Bits352 [44]byte func (u Bits352) FixedSize() int { @@ -8344,6 +8398,15 @@ func (u Bits352) Compare(other any) (int, bool) { return bytes.Compare(u[:], otherBits[:]), true } +func (u *Bits352) UnmarshalTLB(c *boc.Cell, decoder *Decoder) error { + if bytes, err := c.ReadBytes(44); err != nil { + return err + } else { + copy(u[:], bytes) + return nil + } +} + type Bits512 [64]byte func (u Bits512) FixedSize() int { @@ -8381,3 +8444,12 @@ func (u Bits512) Compare(other any) (int, bool) { } return bytes.Compare(u[:], otherBits[:]), true } + +func (u *Bits512) UnmarshalTLB(c *boc.Cell, decoder *Decoder) error { + if bytes, err := c.ReadBytes(64); err != nil { + return err + } else { + copy(u[:], bytes) + return nil + } +} diff --git a/tlb/parser/builtin_generator.go b/tlb/parser/builtin_generator.go index 43cf75b7..380bb085 100644 --- a/tlb/parser/builtin_generator.go +++ b/tlb/parser/builtin_generator.go @@ -410,7 +410,16 @@ func (u Bits%v) Compare(other any) (int, bool) { } return bytes.Compare(u[:], otherBits[:]), true } - `, i, i/8, i, i, i, i, i/8, i, i, i, i, i) + +func (u *Bits%d) UnmarshalTLB(c *boc.Cell, decoder *Decoder) error { + if bytes, err := c.ReadBytes(%d); err != nil { + return err + } else { + copy(u[:], bytes) + return nil + } +} + `, i, i/8, i, i, i, i, i/8, i, i, i, i, i, i, i/8) } else { fmt.Fprintf(&b, ` type Bits%v boc.BitString diff --git a/tlb/parser/file.tmpl b/tlb/parser/file.tmpl index e2988bee..0ff446fe 100644 --- a/tlb/parser/file.tmpl +++ b/tlb/parser/file.tmpl @@ -1,5 +1,6 @@ +// Code generated - DO NOT EDIT. + package {{.Package}} -// Code autogenerated. DO NOT EDIT. import ( {{ range $import := .Imports }} diff --git a/tlb/primitives.go b/tlb/primitives.go index 7a5c5db6..ff804f3a 100644 --- a/tlb/primitives.go +++ b/tlb/primitives.go @@ -9,8 +9,6 @@ import ( "github.com/tonkeeper/tongo/boc" ) -//go:generate go run generator.go - type SumType string type Magic uint32