You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1534 lines
32 KiB
1534 lines
32 KiB
// Code generated by gotdgen, DO NOT EDIT. |
|
|
|
package tg |
|
|
|
import ( |
|
"context" |
|
"errors" |
|
"fmt" |
|
"sort" |
|
"strings" |
|
|
|
"go.uber.org/multierr" |
|
|
|
"github.com/gotd/td/bin" |
|
"github.com/gotd/td/tdjson" |
|
"github.com/gotd/td/tdp" |
|
"github.com/gotd/td/tgerr" |
|
) |
|
|
|
// No-op definition for keeping imports. |
|
var ( |
|
_ = bin.Buffer{} |
|
_ = context.Background() |
|
_ = fmt.Stringer(nil) |
|
_ = strings.Builder{} |
|
_ = errors.Is |
|
_ = multierr.AppendInto |
|
_ = sort.Ints |
|
_ = tdp.Format |
|
_ = tgerr.Error{} |
|
_ = tdjson.Encoder{} |
|
) |
|
|
|
// UserEmpty represents TL type `userEmpty#d3bc4b7a`. |
|
// Empty constructor, non-existent user. |
|
// |
|
// See https://core.telegram.org/constructor/userEmpty for reference. |
|
type UserEmpty struct { |
|
// User identifier or 0 |
|
ID int64 |
|
} |
|
|
|
// UserEmptyTypeID is TL type id of UserEmpty. |
|
const UserEmptyTypeID = 0xd3bc4b7a |
|
|
|
// construct implements constructor of UserClass. |
|
func (u UserEmpty) construct() UserClass { return &u } |
|
|
|
// Ensuring interfaces in compile-time for UserEmpty. |
|
var ( |
|
_ bin.Encoder = &UserEmpty{} |
|
_ bin.Decoder = &UserEmpty{} |
|
_ bin.BareEncoder = &UserEmpty{} |
|
_ bin.BareDecoder = &UserEmpty{} |
|
|
|
_ UserClass = &UserEmpty{} |
|
) |
|
|
|
func (u *UserEmpty) Zero() bool { |
|
if u == nil { |
|
return true |
|
} |
|
if !(u.ID == 0) { |
|
return false |
|
} |
|
|
|
return true |
|
} |
|
|
|
// String implements fmt.Stringer. |
|
func (u *UserEmpty) String() string { |
|
if u == nil { |
|
return "UserEmpty(nil)" |
|
} |
|
type Alias UserEmpty |
|
return fmt.Sprintf("UserEmpty%+v", Alias(*u)) |
|
} |
|
|
|
// FillFrom fills UserEmpty from given interface. |
|
func (u *UserEmpty) FillFrom(from interface { |
|
GetID() (value int64) |
|
}) { |
|
u.ID = from.GetID() |
|
} |
|
|
|
// TypeID returns type id in TL schema. |
|
// |
|
// See https://core.telegram.org/mtproto/TL-tl#remarks. |
|
func (*UserEmpty) TypeID() uint32 { |
|
return UserEmptyTypeID |
|
} |
|
|
|
// TypeName returns name of type in TL schema. |
|
func (*UserEmpty) TypeName() string { |
|
return "userEmpty" |
|
} |
|
|
|
// TypeInfo returns info about TL type. |
|
func (u *UserEmpty) TypeInfo() tdp.Type { |
|
typ := tdp.Type{ |
|
Name: "userEmpty", |
|
ID: UserEmptyTypeID, |
|
} |
|
if u == nil { |
|
typ.Null = true |
|
return typ |
|
} |
|
typ.Fields = []tdp.Field{ |
|
{ |
|
Name: "ID", |
|
SchemaName: "id", |
|
}, |
|
} |
|
return typ |
|
} |
|
|
|
// Encode implements bin.Encoder. |
|
func (u *UserEmpty) Encode(b *bin.Buffer) error { |
|
if u == nil { |
|
return fmt.Errorf("can't encode userEmpty#d3bc4b7a as nil") |
|
} |
|
b.PutID(UserEmptyTypeID) |
|
return u.EncodeBare(b) |
|
} |
|
|
|
// EncodeBare implements bin.BareEncoder. |
|
func (u *UserEmpty) EncodeBare(b *bin.Buffer) error { |
|
if u == nil { |
|
return fmt.Errorf("can't encode userEmpty#d3bc4b7a as nil") |
|
} |
|
b.PutLong(u.ID) |
|
return nil |
|
} |
|
|
|
// Decode implements bin.Decoder. |
|
func (u *UserEmpty) Decode(b *bin.Buffer) error { |
|
if u == nil { |
|
return fmt.Errorf("can't decode userEmpty#d3bc4b7a to nil") |
|
} |
|
if err := b.ConsumeID(UserEmptyTypeID); err != nil { |
|
return fmt.Errorf("unable to decode userEmpty#d3bc4b7a: %w", err) |
|
} |
|
return u.DecodeBare(b) |
|
} |
|
|
|
// DecodeBare implements bin.BareDecoder. |
|
func (u *UserEmpty) DecodeBare(b *bin.Buffer) error { |
|
if u == nil { |
|
return fmt.Errorf("can't decode userEmpty#d3bc4b7a to nil") |
|
} |
|
{ |
|
value, err := b.Long() |
|
if err != nil { |
|
return fmt.Errorf("unable to decode userEmpty#d3bc4b7a: field id: %w", err) |
|
} |
|
u.ID = value |
|
} |
|
return nil |
|
} |
|
|
|
// GetID returns value of ID field. |
|
func (u *UserEmpty) GetID() (value int64) { |
|
if u == nil { |
|
return |
|
} |
|
return u.ID |
|
} |
|
|
|
// User represents TL type `user#3ff6ecb0`. |
|
// Indicates info about a certain user |
|
// |
|
// See https://core.telegram.org/constructor/user for reference. |
|
type User struct { |
|
// Flags, see TL conditional fields¹ |
|
// |
|
// Links: |
|
// 1) https://core.telegram.org/mtproto/TL-combinators#conditional-fields |
|
Flags bin.Fields |
|
// Whether this user indicates the currently logged in user |
|
Self bool |
|
// Whether this user is a contact |
|
Contact bool |
|
// Whether this user is a mutual contact |
|
MutualContact bool |
|
// Whether the account of this user was deleted |
|
Deleted bool |
|
// Is this user a bot? |
|
Bot bool |
|
// Can the bot see all messages in groups? |
|
BotChatHistory bool |
|
// Can the bot be added to groups? |
|
BotNochats bool |
|
// Whether this user is verified |
|
Verified bool |
|
// Access to this user must be restricted for the reason specified in restriction_reason |
|
Restricted bool |
|
// See min¹ |
|
// |
|
// Links: |
|
// 1) https://core.telegram.org/api/min |
|
Min bool |
|
// Whether the bot can request our geolocation in inline mode |
|
BotInlineGeo bool |
|
// Whether this is an official support user |
|
Support bool |
|
// This may be a scam user |
|
Scam bool |
|
// If set, the profile picture for this user should be refetched |
|
ApplyMinPhoto bool |
|
// If set, this user was reported by many users as a fake or scam user: be careful when |
|
// interacting with them. |
|
Fake bool |
|
// ID of the user |
|
ID int64 |
|
// Access hash of the user |
|
// |
|
// Use SetAccessHash and GetAccessHash helpers. |
|
AccessHash int64 |
|
// First name |
|
// |
|
// Use SetFirstName and GetFirstName helpers. |
|
FirstName string |
|
// Last name |
|
// |
|
// Use SetLastName and GetLastName helpers. |
|
LastName string |
|
// Username |
|
// |
|
// Use SetUsername and GetUsername helpers. |
|
Username string |
|
// Phone number |
|
// |
|
// Use SetPhone and GetPhone helpers. |
|
Phone string |
|
// Profile picture of user |
|
// |
|
// Use SetPhoto and GetPhoto helpers. |
|
Photo UserProfilePhotoClass |
|
// Online status of user |
|
// |
|
// Use SetStatus and GetStatus helpers. |
|
Status UserStatusClass |
|
// Version of the bot_info field in userFull¹, incremented every time it changes |
|
// |
|
// Links: |
|
// 1) https://core.telegram.org/constructor/userFull |
|
// |
|
// Use SetBotInfoVersion and GetBotInfoVersion helpers. |
|
BotInfoVersion int |
|
// Contains the reason why access to this user must be restricted. |
|
// |
|
// Use SetRestrictionReason and GetRestrictionReason helpers. |
|
RestrictionReason []RestrictionReason |
|
// Inline placeholder for this inline bot |
|
// |
|
// Use SetBotInlinePlaceholder and GetBotInlinePlaceholder helpers. |
|
BotInlinePlaceholder string |
|
// Language code of the user |
|
// |
|
// Use SetLangCode and GetLangCode helpers. |
|
LangCode string |
|
} |
|
|
|
// UserTypeID is TL type id of User. |
|
const UserTypeID = 0x3ff6ecb0 |
|
|
|
// construct implements constructor of UserClass. |
|
func (u User) construct() UserClass { return &u } |
|
|
|
// Ensuring interfaces in compile-time for User. |
|
var ( |
|
_ bin.Encoder = &User{} |
|
_ bin.Decoder = &User{} |
|
_ bin.BareEncoder = &User{} |
|
_ bin.BareDecoder = &User{} |
|
|
|
_ UserClass = &User{} |
|
) |
|
|
|
func (u *User) Zero() bool { |
|
if u == nil { |
|
return true |
|
} |
|
if !(u.Flags.Zero()) { |
|
return false |
|
} |
|
if !(u.Self == false) { |
|
return false |
|
} |
|
if !(u.Contact == false) { |
|
return false |
|
} |
|
if !(u.MutualContact == false) { |
|
return false |
|
} |
|
if !(u.Deleted == false) { |
|
return false |
|
} |
|
if !(u.Bot == false) { |
|
return false |
|
} |
|
if !(u.BotChatHistory == false) { |
|
return false |
|
} |
|
if !(u.BotNochats == false) { |
|
return false |
|
} |
|
if !(u.Verified == false) { |
|
return false |
|
} |
|
if !(u.Restricted == false) { |
|
return false |
|
} |
|
if !(u.Min == false) { |
|
return false |
|
} |
|
if !(u.BotInlineGeo == false) { |
|
return false |
|
} |
|
if !(u.Support == false) { |
|
return false |
|
} |
|
if !(u.Scam == false) { |
|
return false |
|
} |
|
if !(u.ApplyMinPhoto == false) { |
|
return false |
|
} |
|
if !(u.Fake == false) { |
|
return false |
|
} |
|
if !(u.ID == 0) { |
|
return false |
|
} |
|
if !(u.AccessHash == 0) { |
|
return false |
|
} |
|
if !(u.FirstName == "") { |
|
return false |
|
} |
|
if !(u.LastName == "") { |
|
return false |
|
} |
|
if !(u.Username == "") { |
|
return false |
|
} |
|
if !(u.Phone == "") { |
|
return false |
|
} |
|
if !(u.Photo == nil) { |
|
return false |
|
} |
|
if !(u.Status == nil) { |
|
return false |
|
} |
|
if !(u.BotInfoVersion == 0) { |
|
return false |
|
} |
|
if !(u.RestrictionReason == nil) { |
|
return false |
|
} |
|
if !(u.BotInlinePlaceholder == "") { |
|
return false |
|
} |
|
if !(u.LangCode == "") { |
|
return false |
|
} |
|
|
|
return true |
|
} |
|
|
|
// String implements fmt.Stringer. |
|
func (u *User) String() string { |
|
if u == nil { |
|
return "User(nil)" |
|
} |
|
type Alias User |
|
return fmt.Sprintf("User%+v", Alias(*u)) |
|
} |
|
|
|
// FillFrom fills User from given interface. |
|
func (u *User) FillFrom(from interface { |
|
GetSelf() (value bool) |
|
GetContact() (value bool) |
|
GetMutualContact() (value bool) |
|
GetDeleted() (value bool) |
|
GetBot() (value bool) |
|
GetBotChatHistory() (value bool) |
|
GetBotNochats() (value bool) |
|
GetVerified() (value bool) |
|
GetRestricted() (value bool) |
|
GetMin() (value bool) |
|
GetBotInlineGeo() (value bool) |
|
GetSupport() (value bool) |
|
GetScam() (value bool) |
|
GetApplyMinPhoto() (value bool) |
|
GetFake() (value bool) |
|
GetID() (value int64) |
|
GetAccessHash() (value int64, ok bool) |
|
GetFirstName() (value string, ok bool) |
|
GetLastName() (value string, ok bool) |
|
GetUsername() (value string, ok bool) |
|
GetPhone() (value string, ok bool) |
|
GetPhoto() (value UserProfilePhotoClass, ok bool) |
|
GetStatus() (value UserStatusClass, ok bool) |
|
GetBotInfoVersion() (value int, ok bool) |
|
GetRestrictionReason() (value []RestrictionReason, ok bool) |
|
GetBotInlinePlaceholder() (value string, ok bool) |
|
GetLangCode() (value string, ok bool) |
|
}) { |
|
u.Self = from.GetSelf() |
|
u.Contact = from.GetContact() |
|
u.MutualContact = from.GetMutualContact() |
|
u.Deleted = from.GetDeleted() |
|
u.Bot = from.GetBot() |
|
u.BotChatHistory = from.GetBotChatHistory() |
|
u.BotNochats = from.GetBotNochats() |
|
u.Verified = from.GetVerified() |
|
u.Restricted = from.GetRestricted() |
|
u.Min = from.GetMin() |
|
u.BotInlineGeo = from.GetBotInlineGeo() |
|
u.Support = from.GetSupport() |
|
u.Scam = from.GetScam() |
|
u.ApplyMinPhoto = from.GetApplyMinPhoto() |
|
u.Fake = from.GetFake() |
|
u.ID = from.GetID() |
|
if val, ok := from.GetAccessHash(); ok { |
|
u.AccessHash = val |
|
} |
|
|
|
if val, ok := from.GetFirstName(); ok { |
|
u.FirstName = val |
|
} |
|
|
|
if val, ok := from.GetLastName(); ok { |
|
u.LastName = val |
|
} |
|
|
|
if val, ok := from.GetUsername(); ok { |
|
u.Username = val |
|
} |
|
|
|
if val, ok := from.GetPhone(); ok { |
|
u.Phone = val |
|
} |
|
|
|
if val, ok := from.GetPhoto(); ok { |
|
u.Photo = val |
|
} |
|
|
|
if val, ok := from.GetStatus(); ok { |
|
u.Status = val |
|
} |
|
|
|
if val, ok := from.GetBotInfoVersion(); ok { |
|
u.BotInfoVersion = val |
|
} |
|
|
|
if val, ok := from.GetRestrictionReason(); ok { |
|
u.RestrictionReason = val |
|
} |
|
|
|
if val, ok := from.GetBotInlinePlaceholder(); ok { |
|
u.BotInlinePlaceholder = val |
|
} |
|
|
|
if val, ok := from.GetLangCode(); ok { |
|
u.LangCode = val |
|
} |
|
|
|
} |
|
|
|
// TypeID returns type id in TL schema. |
|
// |
|
// See https://core.telegram.org/mtproto/TL-tl#remarks. |
|
func (*User) TypeID() uint32 { |
|
return UserTypeID |
|
} |
|
|
|
// TypeName returns name of type in TL schema. |
|
func (*User) TypeName() string { |
|
return "user" |
|
} |
|
|
|
// TypeInfo returns info about TL type. |
|
func (u *User) TypeInfo() tdp.Type { |
|
typ := tdp.Type{ |
|
Name: "user", |
|
ID: UserTypeID, |
|
} |
|
if u == nil { |
|
typ.Null = true |
|
return typ |
|
} |
|
typ.Fields = []tdp.Field{ |
|
{ |
|
Name: "Self", |
|
SchemaName: "self", |
|
Null: !u.Flags.Has(10), |
|
}, |
|
{ |
|
Name: "Contact", |
|
SchemaName: "contact", |
|
Null: !u.Flags.Has(11), |
|
}, |
|
{ |
|
Name: "MutualContact", |
|
SchemaName: "mutual_contact", |
|
Null: !u.Flags.Has(12), |
|
}, |
|
{ |
|
Name: "Deleted", |
|
SchemaName: "deleted", |
|
Null: !u.Flags.Has(13), |
|
}, |
|
{ |
|
Name: "Bot", |
|
SchemaName: "bot", |
|
Null: !u.Flags.Has(14), |
|
}, |
|
{ |
|
Name: "BotChatHistory", |
|
SchemaName: "bot_chat_history", |
|
Null: !u.Flags.Has(15), |
|
}, |
|
{ |
|
Name: "BotNochats", |
|
SchemaName: "bot_nochats", |
|
Null: !u.Flags.Has(16), |
|
}, |
|
{ |
|
Name: "Verified", |
|
SchemaName: "verified", |
|
Null: !u.Flags.Has(17), |
|
}, |
|
{ |
|
Name: "Restricted", |
|
SchemaName: "restricted", |
|
Null: !u.Flags.Has(18), |
|
}, |
|
{ |
|
Name: "Min", |
|
SchemaName: "min", |
|
Null: !u.Flags.Has(20), |
|
}, |
|
{ |
|
Name: "BotInlineGeo", |
|
SchemaName: "bot_inline_geo", |
|
Null: !u.Flags.Has(21), |
|
}, |
|
{ |
|
Name: "Support", |
|
SchemaName: "support", |
|
Null: !u.Flags.Has(23), |
|
}, |
|
{ |
|
Name: "Scam", |
|
SchemaName: "scam", |
|
Null: !u.Flags.Has(24), |
|
}, |
|
{ |
|
Name: "ApplyMinPhoto", |
|
SchemaName: "apply_min_photo", |
|
Null: !u.Flags.Has(25), |
|
}, |
|
{ |
|
Name: "Fake", |
|
SchemaName: "fake", |
|
Null: !u.Flags.Has(26), |
|
}, |
|
{ |
|
Name: "ID", |
|
SchemaName: "id", |
|
}, |
|
{ |
|
Name: "AccessHash", |
|
SchemaName: "access_hash", |
|
Null: !u.Flags.Has(0), |
|
}, |
|
{ |
|
Name: "FirstName", |
|
SchemaName: "first_name", |
|
Null: !u.Flags.Has(1), |
|
}, |
|
{ |
|
Name: "LastName", |
|
SchemaName: "last_name", |
|
Null: !u.Flags.Has(2), |
|
}, |
|
{ |
|
Name: "Username", |
|
SchemaName: "username", |
|
Null: !u.Flags.Has(3), |
|
}, |
|
{ |
|
Name: "Phone", |
|
SchemaName: "phone", |
|
Null: !u.Flags.Has(4), |
|
}, |
|
{ |
|
Name: "Photo", |
|
SchemaName: "photo", |
|
Null: !u.Flags.Has(5), |
|
}, |
|
{ |
|
Name: "Status", |
|
SchemaName: "status", |
|
Null: !u.Flags.Has(6), |
|
}, |
|
{ |
|
Name: "BotInfoVersion", |
|
SchemaName: "bot_info_version", |
|
Null: !u.Flags.Has(14), |
|
}, |
|
{ |
|
Name: "RestrictionReason", |
|
SchemaName: "restriction_reason", |
|
Null: !u.Flags.Has(18), |
|
}, |
|
{ |
|
Name: "BotInlinePlaceholder", |
|
SchemaName: "bot_inline_placeholder", |
|
Null: !u.Flags.Has(19), |
|
}, |
|
{ |
|
Name: "LangCode", |
|
SchemaName: "lang_code", |
|
Null: !u.Flags.Has(22), |
|
}, |
|
} |
|
return typ |
|
} |
|
|
|
// SetFlags sets flags for non-zero fields. |
|
func (u *User) SetFlags() { |
|
if !(u.Self == false) { |
|
u.Flags.Set(10) |
|
} |
|
if !(u.Contact == false) { |
|
u.Flags.Set(11) |
|
} |
|
if !(u.MutualContact == false) { |
|
u.Flags.Set(12) |
|
} |
|
if !(u.Deleted == false) { |
|
u.Flags.Set(13) |
|
} |
|
if !(u.Bot == false) { |
|
u.Flags.Set(14) |
|
} |
|
if !(u.BotChatHistory == false) { |
|
u.Flags.Set(15) |
|
} |
|
if !(u.BotNochats == false) { |
|
u.Flags.Set(16) |
|
} |
|
if !(u.Verified == false) { |
|
u.Flags.Set(17) |
|
} |
|
if !(u.Restricted == false) { |
|
u.Flags.Set(18) |
|
} |
|
if !(u.Min == false) { |
|
u.Flags.Set(20) |
|
} |
|
if !(u.BotInlineGeo == false) { |
|
u.Flags.Set(21) |
|
} |
|
if !(u.Support == false) { |
|
u.Flags.Set(23) |
|
} |
|
if !(u.Scam == false) { |
|
u.Flags.Set(24) |
|
} |
|
if !(u.ApplyMinPhoto == false) { |
|
u.Flags.Set(25) |
|
} |
|
if !(u.Fake == false) { |
|
u.Flags.Set(26) |
|
} |
|
if !(u.AccessHash == 0) { |
|
u.Flags.Set(0) |
|
} |
|
if !(u.FirstName == "") { |
|
u.Flags.Set(1) |
|
} |
|
if !(u.LastName == "") { |
|
u.Flags.Set(2) |
|
} |
|
if !(u.Username == "") { |
|
u.Flags.Set(3) |
|
} |
|
if !(u.Phone == "") { |
|
u.Flags.Set(4) |
|
} |
|
if !(u.Photo == nil) { |
|
u.Flags.Set(5) |
|
} |
|
if !(u.Status == nil) { |
|
u.Flags.Set(6) |
|
} |
|
if !(u.BotInfoVersion == 0) { |
|
u.Flags.Set(14) |
|
} |
|
if !(u.RestrictionReason == nil) { |
|
u.Flags.Set(18) |
|
} |
|
if !(u.BotInlinePlaceholder == "") { |
|
u.Flags.Set(19) |
|
} |
|
if !(u.LangCode == "") { |
|
u.Flags.Set(22) |
|
} |
|
} |
|
|
|
// Encode implements bin.Encoder. |
|
func (u *User) Encode(b *bin.Buffer) error { |
|
if u == nil { |
|
return fmt.Errorf("can't encode user#3ff6ecb0 as nil") |
|
} |
|
b.PutID(UserTypeID) |
|
return u.EncodeBare(b) |
|
} |
|
|
|
// EncodeBare implements bin.BareEncoder. |
|
func (u *User) EncodeBare(b *bin.Buffer) error { |
|
if u == nil { |
|
return fmt.Errorf("can't encode user#3ff6ecb0 as nil") |
|
} |
|
u.SetFlags() |
|
if err := u.Flags.Encode(b); err != nil { |
|
return fmt.Errorf("unable to encode user#3ff6ecb0: field flags: %w", err) |
|
} |
|
b.PutLong(u.ID) |
|
if u.Flags.Has(0) { |
|
b.PutLong(u.AccessHash) |
|
} |
|
if u.Flags.Has(1) { |
|
b.PutString(u.FirstName) |
|
} |
|
if u.Flags.Has(2) { |
|
b.PutString(u.LastName) |
|
} |
|
if u.Flags.Has(3) { |
|
b.PutString(u.Username) |
|
} |
|
if u.Flags.Has(4) { |
|
b.PutString(u.Phone) |
|
} |
|
if u.Flags.Has(5) { |
|
if u.Photo == nil { |
|
return fmt.Errorf("unable to encode user#3ff6ecb0: field photo is nil") |
|
} |
|
if err := u.Photo.Encode(b); err != nil { |
|
return fmt.Errorf("unable to encode user#3ff6ecb0: field photo: %w", err) |
|
} |
|
} |
|
if u.Flags.Has(6) { |
|
if u.Status == nil { |
|
return fmt.Errorf("unable to encode user#3ff6ecb0: field status is nil") |
|
} |
|
if err := u.Status.Encode(b); err != nil { |
|
return fmt.Errorf("unable to encode user#3ff6ecb0: field status: %w", err) |
|
} |
|
} |
|
if u.Flags.Has(14) { |
|
b.PutInt(u.BotInfoVersion) |
|
} |
|
if u.Flags.Has(18) { |
|
b.PutVectorHeader(len(u.RestrictionReason)) |
|
for idx, v := range u.RestrictionReason { |
|
if err := v.Encode(b); err != nil { |
|
return fmt.Errorf("unable to encode user#3ff6ecb0: field restriction_reason element with index %d: %w", idx, err) |
|
} |
|
} |
|
} |
|
if u.Flags.Has(19) { |
|
b.PutString(u.BotInlinePlaceholder) |
|
} |
|
if u.Flags.Has(22) { |
|
b.PutString(u.LangCode) |
|
} |
|
return nil |
|
} |
|
|
|
// Decode implements bin.Decoder. |
|
func (u *User) Decode(b *bin.Buffer) error { |
|
if u == nil { |
|
return fmt.Errorf("can't decode user#3ff6ecb0 to nil") |
|
} |
|
if err := b.ConsumeID(UserTypeID); err != nil { |
|
return fmt.Errorf("unable to decode user#3ff6ecb0: %w", err) |
|
} |
|
return u.DecodeBare(b) |
|
} |
|
|
|
// DecodeBare implements bin.BareDecoder. |
|
func (u *User) DecodeBare(b *bin.Buffer) error { |
|
if u == nil { |
|
return fmt.Errorf("can't decode user#3ff6ecb0 to nil") |
|
} |
|
{ |
|
if err := u.Flags.Decode(b); err != nil { |
|
return fmt.Errorf("unable to decode user#3ff6ecb0: field flags: %w", err) |
|
} |
|
} |
|
u.Self = u.Flags.Has(10) |
|
u.Contact = u.Flags.Has(11) |
|
u.MutualContact = u.Flags.Has(12) |
|
u.Deleted = u.Flags.Has(13) |
|
u.Bot = u.Flags.Has(14) |
|
u.BotChatHistory = u.Flags.Has(15) |
|
u.BotNochats = u.Flags.Has(16) |
|
u.Verified = u.Flags.Has(17) |
|
u.Restricted = u.Flags.Has(18) |
|
u.Min = u.Flags.Has(20) |
|
u.BotInlineGeo = u.Flags.Has(21) |
|
u.Support = u.Flags.Has(23) |
|
u.Scam = u.Flags.Has(24) |
|
u.ApplyMinPhoto = u.Flags.Has(25) |
|
u.Fake = u.Flags.Has(26) |
|
{ |
|
value, err := b.Long() |
|
if err != nil { |
|
return fmt.Errorf("unable to decode user#3ff6ecb0: field id: %w", err) |
|
} |
|
u.ID = value |
|
} |
|
if u.Flags.Has(0) { |
|
value, err := b.Long() |
|
if err != nil { |
|
return fmt.Errorf("unable to decode user#3ff6ecb0: field access_hash: %w", err) |
|
} |
|
u.AccessHash = value |
|
} |
|
if u.Flags.Has(1) { |
|
value, err := b.String() |
|
if err != nil { |
|
return fmt.Errorf("unable to decode user#3ff6ecb0: field first_name: %w", err) |
|
} |
|
u.FirstName = value |
|
} |
|
if u.Flags.Has(2) { |
|
value, err := b.String() |
|
if err != nil { |
|
return fmt.Errorf("unable to decode user#3ff6ecb0: field last_name: %w", err) |
|
} |
|
u.LastName = value |
|
} |
|
if u.Flags.Has(3) { |
|
value, err := b.String() |
|
if err != nil { |
|
return fmt.Errorf("unable to decode user#3ff6ecb0: field username: %w", err) |
|
} |
|
u.Username = value |
|
} |
|
if u.Flags.Has(4) { |
|
value, err := b.String() |
|
if err != nil { |
|
return fmt.Errorf("unable to decode user#3ff6ecb0: field phone: %w", err) |
|
} |
|
u.Phone = value |
|
} |
|
if u.Flags.Has(5) { |
|
value, err := DecodeUserProfilePhoto(b) |
|
if err != nil { |
|
return fmt.Errorf("unable to decode user#3ff6ecb0: field photo: %w", err) |
|
} |
|
u.Photo = value |
|
} |
|
if u.Flags.Has(6) { |
|
value, err := DecodeUserStatus(b) |
|
if err != nil { |
|
return fmt.Errorf("unable to decode user#3ff6ecb0: field status: %w", err) |
|
} |
|
u.Status = value |
|
} |
|
if u.Flags.Has(14) { |
|
value, err := b.Int() |
|
if err != nil { |
|
return fmt.Errorf("unable to decode user#3ff6ecb0: field bot_info_version: %w", err) |
|
} |
|
u.BotInfoVersion = value |
|
} |
|
if u.Flags.Has(18) { |
|
headerLen, err := b.VectorHeader() |
|
if err != nil { |
|
return fmt.Errorf("unable to decode user#3ff6ecb0: field restriction_reason: %w", err) |
|
} |
|
|
|
if headerLen > 0 { |
|
u.RestrictionReason = make([]RestrictionReason, 0, headerLen%bin.PreallocateLimit) |
|
} |
|
for idx := 0; idx < headerLen; idx++ { |
|
var value RestrictionReason |
|
if err := value.Decode(b); err != nil { |
|
return fmt.Errorf("unable to decode user#3ff6ecb0: field restriction_reason: %w", err) |
|
} |
|
u.RestrictionReason = append(u.RestrictionReason, value) |
|
} |
|
} |
|
if u.Flags.Has(19) { |
|
value, err := b.String() |
|
if err != nil { |
|
return fmt.Errorf("unable to decode user#3ff6ecb0: field bot_inline_placeholder: %w", err) |
|
} |
|
u.BotInlinePlaceholder = value |
|
} |
|
if u.Flags.Has(22) { |
|
value, err := b.String() |
|
if err != nil { |
|
return fmt.Errorf("unable to decode user#3ff6ecb0: field lang_code: %w", err) |
|
} |
|
u.LangCode = value |
|
} |
|
return nil |
|
} |
|
|
|
// SetSelf sets value of Self conditional field. |
|
func (u *User) SetSelf(value bool) { |
|
if value { |
|
u.Flags.Set(10) |
|
u.Self = true |
|
} else { |
|
u.Flags.Unset(10) |
|
u.Self = false |
|
} |
|
} |
|
|
|
// GetSelf returns value of Self conditional field. |
|
func (u *User) GetSelf() (value bool) { |
|
if u == nil { |
|
return |
|
} |
|
return u.Flags.Has(10) |
|
} |
|
|
|
// SetContact sets value of Contact conditional field. |
|
func (u *User) SetContact(value bool) { |
|
if value { |
|
u.Flags.Set(11) |
|
u.Contact = true |
|
} else { |
|
u.Flags.Unset(11) |
|
u.Contact = false |
|
} |
|
} |
|
|
|
// GetContact returns value of Contact conditional field. |
|
func (u *User) GetContact() (value bool) { |
|
if u == nil { |
|
return |
|
} |
|
return u.Flags.Has(11) |
|
} |
|
|
|
// SetMutualContact sets value of MutualContact conditional field. |
|
func (u *User) SetMutualContact(value bool) { |
|
if value { |
|
u.Flags.Set(12) |
|
u.MutualContact = true |
|
} else { |
|
u.Flags.Unset(12) |
|
u.MutualContact = false |
|
} |
|
} |
|
|
|
// GetMutualContact returns value of MutualContact conditional field. |
|
func (u *User) GetMutualContact() (value bool) { |
|
if u == nil { |
|
return |
|
} |
|
return u.Flags.Has(12) |
|
} |
|
|
|
// SetDeleted sets value of Deleted conditional field. |
|
func (u *User) SetDeleted(value bool) { |
|
if value { |
|
u.Flags.Set(13) |
|
u.Deleted = true |
|
} else { |
|
u.Flags.Unset(13) |
|
u.Deleted = false |
|
} |
|
} |
|
|
|
// GetDeleted returns value of Deleted conditional field. |
|
func (u *User) GetDeleted() (value bool) { |
|
if u == nil { |
|
return |
|
} |
|
return u.Flags.Has(13) |
|
} |
|
|
|
// SetBot sets value of Bot conditional field. |
|
func (u *User) SetBot(value bool) { |
|
if value { |
|
u.Flags.Set(14) |
|
u.Bot = true |
|
} else { |
|
u.Flags.Unset(14) |
|
u.Bot = false |
|
} |
|
} |
|
|
|
// GetBot returns value of Bot conditional field. |
|
func (u *User) GetBot() (value bool) { |
|
if u == nil { |
|
return |
|
} |
|
return u.Flags.Has(14) |
|
} |
|
|
|
// SetBotChatHistory sets value of BotChatHistory conditional field. |
|
func (u *User) SetBotChatHistory(value bool) { |
|
if value { |
|
u.Flags.Set(15) |
|
u.BotChatHistory = true |
|
} else { |
|
u.Flags.Unset(15) |
|
u.BotChatHistory = false |
|
} |
|
} |
|
|
|
// GetBotChatHistory returns value of BotChatHistory conditional field. |
|
func (u *User) GetBotChatHistory() (value bool) { |
|
if u == nil { |
|
return |
|
} |
|
return u.Flags.Has(15) |
|
} |
|
|
|
// SetBotNochats sets value of BotNochats conditional field. |
|
func (u *User) SetBotNochats(value bool) { |
|
if value { |
|
u.Flags.Set(16) |
|
u.BotNochats = true |
|
} else { |
|
u.Flags.Unset(16) |
|
u.BotNochats = false |
|
} |
|
} |
|
|
|
// GetBotNochats returns value of BotNochats conditional field. |
|
func (u *User) GetBotNochats() (value bool) { |
|
if u == nil { |
|
return |
|
} |
|
return u.Flags.Has(16) |
|
} |
|
|
|
// SetVerified sets value of Verified conditional field. |
|
func (u *User) SetVerified(value bool) { |
|
if value { |
|
u.Flags.Set(17) |
|
u.Verified = true |
|
} else { |
|
u.Flags.Unset(17) |
|
u.Verified = false |
|
} |
|
} |
|
|
|
// GetVerified returns value of Verified conditional field. |
|
func (u *User) GetVerified() (value bool) { |
|
if u == nil { |
|
return |
|
} |
|
return u.Flags.Has(17) |
|
} |
|
|
|
// SetRestricted sets value of Restricted conditional field. |
|
func (u *User) SetRestricted(value bool) { |
|
if value { |
|
u.Flags.Set(18) |
|
u.Restricted = true |
|
} else { |
|
u.Flags.Unset(18) |
|
u.Restricted = false |
|
} |
|
} |
|
|
|
// GetRestricted returns value of Restricted conditional field. |
|
func (u *User) GetRestricted() (value bool) { |
|
if u == nil { |
|
return |
|
} |
|
return u.Flags.Has(18) |
|
} |
|
|
|
// SetMin sets value of Min conditional field. |
|
func (u *User) SetMin(value bool) { |
|
if value { |
|
u.Flags.Set(20) |
|
u.Min = true |
|
} else { |
|
u.Flags.Unset(20) |
|
u.Min = false |
|
} |
|
} |
|
|
|
// GetMin returns value of Min conditional field. |
|
func (u *User) GetMin() (value bool) { |
|
if u == nil { |
|
return |
|
} |
|
return u.Flags.Has(20) |
|
} |
|
|
|
// SetBotInlineGeo sets value of BotInlineGeo conditional field. |
|
func (u *User) SetBotInlineGeo(value bool) { |
|
if value { |
|
u.Flags.Set(21) |
|
u.BotInlineGeo = true |
|
} else { |
|
u.Flags.Unset(21) |
|
u.BotInlineGeo = false |
|
} |
|
} |
|
|
|
// GetBotInlineGeo returns value of BotInlineGeo conditional field. |
|
func (u *User) GetBotInlineGeo() (value bool) { |
|
if u == nil { |
|
return |
|
} |
|
return u.Flags.Has(21) |
|
} |
|
|
|
// SetSupport sets value of Support conditional field. |
|
func (u *User) SetSupport(value bool) { |
|
if value { |
|
u.Flags.Set(23) |
|
u.Support = true |
|
} else { |
|
u.Flags.Unset(23) |
|
u.Support = false |
|
} |
|
} |
|
|
|
// GetSupport returns value of Support conditional field. |
|
func (u *User) GetSupport() (value bool) { |
|
if u == nil { |
|
return |
|
} |
|
return u.Flags.Has(23) |
|
} |
|
|
|
// SetScam sets value of Scam conditional field. |
|
func (u *User) SetScam(value bool) { |
|
if value { |
|
u.Flags.Set(24) |
|
u.Scam = true |
|
} else { |
|
u.Flags.Unset(24) |
|
u.Scam = false |
|
} |
|
} |
|
|
|
// GetScam returns value of Scam conditional field. |
|
func (u *User) GetScam() (value bool) { |
|
if u == nil { |
|
return |
|
} |
|
return u.Flags.Has(24) |
|
} |
|
|
|
// SetApplyMinPhoto sets value of ApplyMinPhoto conditional field. |
|
func (u *User) SetApplyMinPhoto(value bool) { |
|
if value { |
|
u.Flags.Set(25) |
|
u.ApplyMinPhoto = true |
|
} else { |
|
u.Flags.Unset(25) |
|
u.ApplyMinPhoto = false |
|
} |
|
} |
|
|
|
// GetApplyMinPhoto returns value of ApplyMinPhoto conditional field. |
|
func (u *User) GetApplyMinPhoto() (value bool) { |
|
if u == nil { |
|
return |
|
} |
|
return u.Flags.Has(25) |
|
} |
|
|
|
// SetFake sets value of Fake conditional field. |
|
func (u *User) SetFake(value bool) { |
|
if value { |
|
u.Flags.Set(26) |
|
u.Fake = true |
|
} else { |
|
u.Flags.Unset(26) |
|
u.Fake = false |
|
} |
|
} |
|
|
|
// GetFake returns value of Fake conditional field. |
|
func (u *User) GetFake() (value bool) { |
|
if u == nil { |
|
return |
|
} |
|
return u.Flags.Has(26) |
|
} |
|
|
|
// GetID returns value of ID field. |
|
func (u *User) GetID() (value int64) { |
|
if u == nil { |
|
return |
|
} |
|
return u.ID |
|
} |
|
|
|
// SetAccessHash sets value of AccessHash conditional field. |
|
func (u *User) SetAccessHash(value int64) { |
|
u.Flags.Set(0) |
|
u.AccessHash = value |
|
} |
|
|
|
// GetAccessHash returns value of AccessHash conditional field and |
|
// boolean which is true if field was set. |
|
func (u *User) GetAccessHash() (value int64, ok bool) { |
|
if u == nil { |
|
return |
|
} |
|
if !u.Flags.Has(0) { |
|
return value, false |
|
} |
|
return u.AccessHash, true |
|
} |
|
|
|
// SetFirstName sets value of FirstName conditional field. |
|
func (u *User) SetFirstName(value string) { |
|
u.Flags.Set(1) |
|
u.FirstName = value |
|
} |
|
|
|
// GetFirstName returns value of FirstName conditional field and |
|
// boolean which is true if field was set. |
|
func (u *User) GetFirstName() (value string, ok bool) { |
|
if u == nil { |
|
return |
|
} |
|
if !u.Flags.Has(1) { |
|
return value, false |
|
} |
|
return u.FirstName, true |
|
} |
|
|
|
// SetLastName sets value of LastName conditional field. |
|
func (u *User) SetLastName(value string) { |
|
u.Flags.Set(2) |
|
u.LastName = value |
|
} |
|
|
|
// GetLastName returns value of LastName conditional field and |
|
// boolean which is true if field was set. |
|
func (u *User) GetLastName() (value string, ok bool) { |
|
if u == nil { |
|
return |
|
} |
|
if !u.Flags.Has(2) { |
|
return value, false |
|
} |
|
return u.LastName, true |
|
} |
|
|
|
// SetUsername sets value of Username conditional field. |
|
func (u *User) SetUsername(value string) { |
|
u.Flags.Set(3) |
|
u.Username = value |
|
} |
|
|
|
// GetUsername returns value of Username conditional field and |
|
// boolean which is true if field was set. |
|
func (u *User) GetUsername() (value string, ok bool) { |
|
if u == nil { |
|
return |
|
} |
|
if !u.Flags.Has(3) { |
|
return value, false |
|
} |
|
return u.Username, true |
|
} |
|
|
|
// SetPhone sets value of Phone conditional field. |
|
func (u *User) SetPhone(value string) { |
|
u.Flags.Set(4) |
|
u.Phone = value |
|
} |
|
|
|
// GetPhone returns value of Phone conditional field and |
|
// boolean which is true if field was set. |
|
func (u *User) GetPhone() (value string, ok bool) { |
|
if u == nil { |
|
return |
|
} |
|
if !u.Flags.Has(4) { |
|
return value, false |
|
} |
|
return u.Phone, true |
|
} |
|
|
|
// SetPhoto sets value of Photo conditional field. |
|
func (u *User) SetPhoto(value UserProfilePhotoClass) { |
|
u.Flags.Set(5) |
|
u.Photo = value |
|
} |
|
|
|
// GetPhoto returns value of Photo conditional field and |
|
// boolean which is true if field was set. |
|
func (u *User) GetPhoto() (value UserProfilePhotoClass, ok bool) { |
|
if u == nil { |
|
return |
|
} |
|
if !u.Flags.Has(5) { |
|
return value, false |
|
} |
|
return u.Photo, true |
|
} |
|
|
|
// SetStatus sets value of Status conditional field. |
|
func (u *User) SetStatus(value UserStatusClass) { |
|
u.Flags.Set(6) |
|
u.Status = value |
|
} |
|
|
|
// GetStatus returns value of Status conditional field and |
|
// boolean which is true if field was set. |
|
func (u *User) GetStatus() (value UserStatusClass, ok bool) { |
|
if u == nil { |
|
return |
|
} |
|
if !u.Flags.Has(6) { |
|
return value, false |
|
} |
|
return u.Status, true |
|
} |
|
|
|
// SetBotInfoVersion sets value of BotInfoVersion conditional field. |
|
func (u *User) SetBotInfoVersion(value int) { |
|
u.Flags.Set(14) |
|
u.BotInfoVersion = value |
|
} |
|
|
|
// GetBotInfoVersion returns value of BotInfoVersion conditional field and |
|
// boolean which is true if field was set. |
|
func (u *User) GetBotInfoVersion() (value int, ok bool) { |
|
if u == nil { |
|
return |
|
} |
|
if !u.Flags.Has(14) { |
|
return value, false |
|
} |
|
return u.BotInfoVersion, true |
|
} |
|
|
|
// SetRestrictionReason sets value of RestrictionReason conditional field. |
|
func (u *User) SetRestrictionReason(value []RestrictionReason) { |
|
u.Flags.Set(18) |
|
u.RestrictionReason = value |
|
} |
|
|
|
// GetRestrictionReason returns value of RestrictionReason conditional field and |
|
// boolean which is true if field was set. |
|
func (u *User) GetRestrictionReason() (value []RestrictionReason, ok bool) { |
|
if u == nil { |
|
return |
|
} |
|
if !u.Flags.Has(18) { |
|
return value, false |
|
} |
|
return u.RestrictionReason, true |
|
} |
|
|
|
// SetBotInlinePlaceholder sets value of BotInlinePlaceholder conditional field. |
|
func (u *User) SetBotInlinePlaceholder(value string) { |
|
u.Flags.Set(19) |
|
u.BotInlinePlaceholder = value |
|
} |
|
|
|
// GetBotInlinePlaceholder returns value of BotInlinePlaceholder conditional field and |
|
// boolean which is true if field was set. |
|
func (u *User) GetBotInlinePlaceholder() (value string, ok bool) { |
|
if u == nil { |
|
return |
|
} |
|
if !u.Flags.Has(19) { |
|
return value, false |
|
} |
|
return u.BotInlinePlaceholder, true |
|
} |
|
|
|
// SetLangCode sets value of LangCode conditional field. |
|
func (u *User) SetLangCode(value string) { |
|
u.Flags.Set(22) |
|
u.LangCode = value |
|
} |
|
|
|
// GetLangCode returns value of LangCode conditional field and |
|
// boolean which is true if field was set. |
|
func (u *User) GetLangCode() (value string, ok bool) { |
|
if u == nil { |
|
return |
|
} |
|
if !u.Flags.Has(22) { |
|
return value, false |
|
} |
|
return u.LangCode, true |
|
} |
|
|
|
// UserClassName is schema name of UserClass. |
|
const UserClassName = "User" |
|
|
|
// UserClass represents User generic type. |
|
// |
|
// See https://core.telegram.org/type/User for reference. |
|
// |
|
// Example: |
|
// g, err := tg.DecodeUser(buf) |
|
// if err != nil { |
|
// panic(err) |
|
// } |
|
// switch v := g.(type) { |
|
// case *tg.UserEmpty: // userEmpty#d3bc4b7a |
|
// case *tg.User: // user#3ff6ecb0 |
|
// default: panic(v) |
|
// } |
|
type UserClass interface { |
|
bin.Encoder |
|
bin.Decoder |
|
bin.BareEncoder |
|
bin.BareDecoder |
|
construct() UserClass |
|
|
|
// TypeID returns type id in TL schema. |
|
// |
|
// See https://core.telegram.org/mtproto/TL-tl#remarks. |
|
TypeID() uint32 |
|
// TypeName returns name of type in TL schema. |
|
TypeName() string |
|
// String implements fmt.Stringer. |
|
String() string |
|
// Zero returns true if current object has a zero value. |
|
Zero() bool |
|
|
|
// User identifier or 0 |
|
GetID() (value int64) |
|
|
|
// AsNotEmpty tries to map UserClass to User. |
|
AsNotEmpty() (*User, bool) |
|
} |
|
|
|
// AsInputPeer tries to map User to InputPeerUser. |
|
func (u *User) AsInputPeer() *InputPeerUser { |
|
value := new(InputPeerUser) |
|
value.UserID = u.GetID() |
|
if fieldValue, ok := u.GetAccessHash(); ok { |
|
value.AccessHash = fieldValue |
|
} |
|
|
|
return value |
|
} |
|
|
|
// AsInput tries to map User to InputUser. |
|
func (u *User) AsInput() *InputUser { |
|
value := new(InputUser) |
|
value.UserID = u.GetID() |
|
if fieldValue, ok := u.GetAccessHash(); ok { |
|
value.AccessHash = fieldValue |
|
} |
|
|
|
return value |
|
} |
|
|
|
// AsNotEmpty tries to map UserEmpty to User. |
|
func (u *UserEmpty) AsNotEmpty() (*User, bool) { |
|
return nil, false |
|
} |
|
|
|
// AsNotEmpty tries to map User to User. |
|
func (u *User) AsNotEmpty() (*User, bool) { |
|
return u, true |
|
} |
|
|
|
// DecodeUser implements binary de-serialization for UserClass. |
|
func DecodeUser(buf *bin.Buffer) (UserClass, error) { |
|
id, err := buf.PeekID() |
|
if err != nil { |
|
return nil, err |
|
} |
|
switch id { |
|
case UserEmptyTypeID: |
|
// Decoding userEmpty#d3bc4b7a. |
|
v := UserEmpty{} |
|
if err := v.Decode(buf); err != nil { |
|
return nil, fmt.Errorf("unable to decode UserClass: %w", err) |
|
} |
|
return &v, nil |
|
case UserTypeID: |
|
// Decoding user#3ff6ecb0. |
|
v := User{} |
|
if err := v.Decode(buf); err != nil { |
|
return nil, fmt.Errorf("unable to decode UserClass: %w", err) |
|
} |
|
return &v, nil |
|
default: |
|
return nil, fmt.Errorf("unable to decode UserClass: %w", bin.NewUnexpectedID(id)) |
|
} |
|
} |
|
|
|
// User boxes the UserClass providing a helper. |
|
type UserBox struct { |
|
User UserClass |
|
} |
|
|
|
// Decode implements bin.Decoder for UserBox. |
|
func (b *UserBox) Decode(buf *bin.Buffer) error { |
|
if b == nil { |
|
return fmt.Errorf("unable to decode UserBox to nil") |
|
} |
|
v, err := DecodeUser(buf) |
|
if err != nil { |
|
return fmt.Errorf("unable to decode boxed value: %w", err) |
|
} |
|
b.User = v |
|
return nil |
|
} |
|
|
|
// Encode implements bin.Encode for UserBox. |
|
func (b *UserBox) Encode(buf *bin.Buffer) error { |
|
if b == nil || b.User == nil { |
|
return fmt.Errorf("unable to encode UserClass as nil") |
|
} |
|
return b.User.Encode(buf) |
|
}
|
|
|