move gotd fork into repo. (#111)
- update to latest telegram layer - remove some references to fields in tg.Entities that don't exist in the schema - originally added here: https://github.com/beeper/td/commit/820929062a2ba0104397bc01235ab58a9cff780e - referenced here - https://github.com/mautrix/telegramgo/commit/124f0967ed195b5a380c9bd02e170ada9710dde3 - https://github.com/mautrix/telegramgo/commit/4205047aab2e0639217148b5d125bfaab668bd8e
This commit is contained in:
@@ -0,0 +1,109 @@
|
||||
package tdjson
|
||||
|
||||
import (
|
||||
"encoding/base64"
|
||||
"encoding/hex"
|
||||
"strconv"
|
||||
|
||||
"github.com/go-faster/jx"
|
||||
|
||||
"go.mau.fi/mautrix-telegram/pkg/gotd/bin"
|
||||
)
|
||||
|
||||
// Encoder is a simple wrapper around jx.Encoder to conform TL type system.
|
||||
type Encoder struct {
|
||||
*jx.Writer
|
||||
}
|
||||
|
||||
// PutID serializes given typeID.
|
||||
func (b Encoder) PutID(typeID string) {
|
||||
b.Writer.FieldStart(TypeField)
|
||||
b.Writer.Str(typeID)
|
||||
}
|
||||
|
||||
// PutInt serializes v as signed 32-bit integer.
|
||||
func (b Encoder) PutInt(v int) {
|
||||
b.Writer.Int(v)
|
||||
}
|
||||
|
||||
// PutBool serializes boolean.
|
||||
func (b Encoder) PutBool(v bool) {
|
||||
b.Writer.Bool(v)
|
||||
}
|
||||
|
||||
// PutUint16 serializes unsigned 16-bit integer.
|
||||
func (b Encoder) PutUint16(v uint16) {
|
||||
b.Writer.UInt32(uint32(v))
|
||||
}
|
||||
|
||||
// PutInt32 serializes signed 32-bit integer.
|
||||
func (b Encoder) PutInt32(v int32) {
|
||||
b.Writer.Int32(v)
|
||||
}
|
||||
|
||||
// PutUint32 serializes unsigned 32-bit integer.
|
||||
func (b Encoder) PutUint32(v uint32) {
|
||||
b.Writer.UInt32(v)
|
||||
}
|
||||
|
||||
// PutInt53 serializes v as int53.
|
||||
func (b Encoder) PutInt53(v int64) {
|
||||
b.Writer.Int64(v)
|
||||
}
|
||||
|
||||
// PutLong serializes v as int64.
|
||||
func (b Encoder) PutLong(v int64) {
|
||||
var buf [32]byte
|
||||
r := append(buf[:0], '"')
|
||||
r = strconv.AppendInt(r, v, 10)
|
||||
r = append(r, '"')
|
||||
b.Writer.Raw(r)
|
||||
}
|
||||
|
||||
// PutUint64 serializes v as unsigned 64-bit integer.
|
||||
func (b Encoder) PutUint64(v uint64) {
|
||||
// FIXME(tdakkota): TDLib API has no uint64 fields
|
||||
// so this encoding may incorrect.
|
||||
b.Writer.UInt64(v)
|
||||
}
|
||||
|
||||
// PutDouble serializes v as 64-bit floating point.
|
||||
func (b Encoder) PutDouble(v float64) {
|
||||
b.Writer.Float64(v)
|
||||
}
|
||||
|
||||
// PutInt128 serializes v as 128-bit signed integer.
|
||||
func (b Encoder) PutInt128(v bin.Int128) {
|
||||
// FIXME(tdakkota): neither TDLib API nor Telegram API has no Int128/Int256 fields
|
||||
// so this encoding may incorrect.
|
||||
b.Writer.Str(hex.EncodeToString(v[:]))
|
||||
}
|
||||
|
||||
// PutInt256 serializes v as 256-bit signed integer.
|
||||
func (b Encoder) PutInt256(v bin.Int256) {
|
||||
// FIXME(tdakkota): neither TDLib API not Telegram API has no Int128/Int256 fields
|
||||
// so this encoding may incorrect.
|
||||
b.Writer.Str(hex.EncodeToString(v[:]))
|
||||
}
|
||||
|
||||
// PutString serializes bare string.
|
||||
func (b Encoder) PutString(s string) {
|
||||
b.Writer.Str(s)
|
||||
}
|
||||
|
||||
// PutBytes serializes bare byte string.
|
||||
func (b Encoder) PutBytes(v []byte) {
|
||||
// See https://core.telegram.org/tdlib/docs/td__json__client_8h.html
|
||||
//
|
||||
// ... fields of bytes type are base64 encoded and then stored as String ...
|
||||
b.Writer.Str(base64.RawURLEncoding.EncodeToString(v))
|
||||
}
|
||||
|
||||
// StripComma deletes last comma, if any.
|
||||
//
|
||||
// Useful for code generation to avoid last field/element tracking.
|
||||
func (b Encoder) StripComma() {
|
||||
if l := len(b.Buf); l > 0 && b.Buf[l-1] == ',' {
|
||||
b.Buf = b.Buf[:l-1]
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user