/
method.go
65 lines (57 loc) · 1.49 KB
/
method.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
package main
import (
"go/types"
"sort"
"strings"
"github.com/gotd/td/telegram/query/internal/genutil"
)
// Param represents request parameter.
type Param struct {
// Name to use in function declaration.
Name string
// OriginalName in struct definition.
OriginalName string
// Go type.
Type string
}
func varToParam(field *types.Var) Param {
fieldName := field.Name()
fieldName = strings.ToLower(fieldName[:1]) + fieldName[1:]
return Param{
Name: fieldName,
OriginalName: field.Name(),
Type: genutil.PrintType(field.Type()),
}
}
func sortParams(p []Param) []Param {
sort.SliceStable(p, func(i, j int) bool {
return p[i].Name < p[j].Name
})
return p
}
// CachedQuery is a RPC cacheable query helper.
type CachedQuery struct {
// Name of struct to generate.
Name string
// MethodName is name of method of tg.Client.
MethodName string
// RequestName is name of request struct.
RequestName string
// ManualHash determines whether hash must be computed using
// hand-written function computeHash or not.
// Need to resolve case when Telegram does not return hash with result.
ManualHash bool
// RequestParams contains additional params to send.
RequestParams []Param
// ResultName is name of result type.
ResultName string
// NotModifiedName is name of NotModified result type.
NotModifiedName string
}
// Config is codegeneration config to use.
type Config struct {
// Query helpers to generate.
Queries []CachedQuery
// ResultName package name
Package string
}