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.
593 lines
12 KiB
593 lines
12 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{} |
|
) |
|
|
|
// Theme represents TL type `theme#a00e67d6`. |
|
// Theme |
|
// |
|
// See https://core.telegram.org/constructor/theme for reference. |
|
type Theme struct { |
|
// Flags, see TL conditional fields¹ |
|
// |
|
// Links: |
|
// 1) https://core.telegram.org/mtproto/TL-combinators#conditional-fields |
|
Flags bin.Fields |
|
// Whether the current user is the creator of this theme |
|
Creator bool |
|
// Whether this is the default theme |
|
Default bool |
|
// Whether this theme is meant to be used as a chat theme¹ |
|
// |
|
// Links: |
|
// 1) https://core.telegram.org/blog/chat-themes-interactive-emoji-read-receipts |
|
ForChat bool |
|
// Theme ID |
|
ID int64 |
|
// Theme access hash |
|
AccessHash int64 |
|
// Unique theme ID |
|
Slug string |
|
// Theme name |
|
Title string |
|
// Theme |
|
// |
|
// Use SetDocument and GetDocument helpers. |
|
Document DocumentClass |
|
// Theme settings |
|
// |
|
// Use SetSettings and GetSettings helpers. |
|
Settings []ThemeSettings |
|
// Emoticon field of Theme. |
|
// |
|
// Use SetEmoticon and GetEmoticon helpers. |
|
Emoticon string |
|
// Installation count |
|
// |
|
// Use SetInstallsCount and GetInstallsCount helpers. |
|
InstallsCount int |
|
} |
|
|
|
// ThemeTypeID is TL type id of Theme. |
|
const ThemeTypeID = 0xa00e67d6 |
|
|
|
// Ensuring interfaces in compile-time for Theme. |
|
var ( |
|
_ bin.Encoder = &Theme{} |
|
_ bin.Decoder = &Theme{} |
|
_ bin.BareEncoder = &Theme{} |
|
_ bin.BareDecoder = &Theme{} |
|
) |
|
|
|
func (t *Theme) Zero() bool { |
|
if t == nil { |
|
return true |
|
} |
|
if !(t.Flags.Zero()) { |
|
return false |
|
} |
|
if !(t.Creator == false) { |
|
return false |
|
} |
|
if !(t.Default == false) { |
|
return false |
|
} |
|
if !(t.ForChat == false) { |
|
return false |
|
} |
|
if !(t.ID == 0) { |
|
return false |
|
} |
|
if !(t.AccessHash == 0) { |
|
return false |
|
} |
|
if !(t.Slug == "") { |
|
return false |
|
} |
|
if !(t.Title == "") { |
|
return false |
|
} |
|
if !(t.Document == nil) { |
|
return false |
|
} |
|
if !(t.Settings == nil) { |
|
return false |
|
} |
|
if !(t.Emoticon == "") { |
|
return false |
|
} |
|
if !(t.InstallsCount == 0) { |
|
return false |
|
} |
|
|
|
return true |
|
} |
|
|
|
// String implements fmt.Stringer. |
|
func (t *Theme) String() string { |
|
if t == nil { |
|
return "Theme(nil)" |
|
} |
|
type Alias Theme |
|
return fmt.Sprintf("Theme%+v", Alias(*t)) |
|
} |
|
|
|
// FillFrom fills Theme from given interface. |
|
func (t *Theme) FillFrom(from interface { |
|
GetCreator() (value bool) |
|
GetDefault() (value bool) |
|
GetForChat() (value bool) |
|
GetID() (value int64) |
|
GetAccessHash() (value int64) |
|
GetSlug() (value string) |
|
GetTitle() (value string) |
|
GetDocument() (value DocumentClass, ok bool) |
|
GetSettings() (value []ThemeSettings, ok bool) |
|
GetEmoticon() (value string, ok bool) |
|
GetInstallsCount() (value int, ok bool) |
|
}) { |
|
t.Creator = from.GetCreator() |
|
t.Default = from.GetDefault() |
|
t.ForChat = from.GetForChat() |
|
t.ID = from.GetID() |
|
t.AccessHash = from.GetAccessHash() |
|
t.Slug = from.GetSlug() |
|
t.Title = from.GetTitle() |
|
if val, ok := from.GetDocument(); ok { |
|
t.Document = val |
|
} |
|
|
|
if val, ok := from.GetSettings(); ok { |
|
t.Settings = val |
|
} |
|
|
|
if val, ok := from.GetEmoticon(); ok { |
|
t.Emoticon = val |
|
} |
|
|
|
if val, ok := from.GetInstallsCount(); ok { |
|
t.InstallsCount = val |
|
} |
|
|
|
} |
|
|
|
// TypeID returns type id in TL schema. |
|
// |
|
// See https://core.telegram.org/mtproto/TL-tl#remarks. |
|
func (*Theme) TypeID() uint32 { |
|
return ThemeTypeID |
|
} |
|
|
|
// TypeName returns name of type in TL schema. |
|
func (*Theme) TypeName() string { |
|
return "theme" |
|
} |
|
|
|
// TypeInfo returns info about TL type. |
|
func (t *Theme) TypeInfo() tdp.Type { |
|
typ := tdp.Type{ |
|
Name: "theme", |
|
ID: ThemeTypeID, |
|
} |
|
if t == nil { |
|
typ.Null = true |
|
return typ |
|
} |
|
typ.Fields = []tdp.Field{ |
|
{ |
|
Name: "Creator", |
|
SchemaName: "creator", |
|
Null: !t.Flags.Has(0), |
|
}, |
|
{ |
|
Name: "Default", |
|
SchemaName: "default", |
|
Null: !t.Flags.Has(1), |
|
}, |
|
{ |
|
Name: "ForChat", |
|
SchemaName: "for_chat", |
|
Null: !t.Flags.Has(5), |
|
}, |
|
{ |
|
Name: "ID", |
|
SchemaName: "id", |
|
}, |
|
{ |
|
Name: "AccessHash", |
|
SchemaName: "access_hash", |
|
}, |
|
{ |
|
Name: "Slug", |
|
SchemaName: "slug", |
|
}, |
|
{ |
|
Name: "Title", |
|
SchemaName: "title", |
|
}, |
|
{ |
|
Name: "Document", |
|
SchemaName: "document", |
|
Null: !t.Flags.Has(2), |
|
}, |
|
{ |
|
Name: "Settings", |
|
SchemaName: "settings", |
|
Null: !t.Flags.Has(3), |
|
}, |
|
{ |
|
Name: "Emoticon", |
|
SchemaName: "emoticon", |
|
Null: !t.Flags.Has(6), |
|
}, |
|
{ |
|
Name: "InstallsCount", |
|
SchemaName: "installs_count", |
|
Null: !t.Flags.Has(4), |
|
}, |
|
} |
|
return typ |
|
} |
|
|
|
// SetFlags sets flags for non-zero fields. |
|
func (t *Theme) SetFlags() { |
|
if !(t.Creator == false) { |
|
t.Flags.Set(0) |
|
} |
|
if !(t.Default == false) { |
|
t.Flags.Set(1) |
|
} |
|
if !(t.ForChat == false) { |
|
t.Flags.Set(5) |
|
} |
|
if !(t.Document == nil) { |
|
t.Flags.Set(2) |
|
} |
|
if !(t.Settings == nil) { |
|
t.Flags.Set(3) |
|
} |
|
if !(t.Emoticon == "") { |
|
t.Flags.Set(6) |
|
} |
|
if !(t.InstallsCount == 0) { |
|
t.Flags.Set(4) |
|
} |
|
} |
|
|
|
// Encode implements bin.Encoder. |
|
func (t *Theme) Encode(b *bin.Buffer) error { |
|
if t == nil { |
|
return fmt.Errorf("can't encode theme#a00e67d6 as nil") |
|
} |
|
b.PutID(ThemeTypeID) |
|
return t.EncodeBare(b) |
|
} |
|
|
|
// EncodeBare implements bin.BareEncoder. |
|
func (t *Theme) EncodeBare(b *bin.Buffer) error { |
|
if t == nil { |
|
return fmt.Errorf("can't encode theme#a00e67d6 as nil") |
|
} |
|
t.SetFlags() |
|
if err := t.Flags.Encode(b); err != nil { |
|
return fmt.Errorf("unable to encode theme#a00e67d6: field flags: %w", err) |
|
} |
|
b.PutLong(t.ID) |
|
b.PutLong(t.AccessHash) |
|
b.PutString(t.Slug) |
|
b.PutString(t.Title) |
|
if t.Flags.Has(2) { |
|
if t.Document == nil { |
|
return fmt.Errorf("unable to encode theme#a00e67d6: field document is nil") |
|
} |
|
if err := t.Document.Encode(b); err != nil { |
|
return fmt.Errorf("unable to encode theme#a00e67d6: field document: %w", err) |
|
} |
|
} |
|
if t.Flags.Has(3) { |
|
b.PutVectorHeader(len(t.Settings)) |
|
for idx, v := range t.Settings { |
|
if err := v.Encode(b); err != nil { |
|
return fmt.Errorf("unable to encode theme#a00e67d6: field settings element with index %d: %w", idx, err) |
|
} |
|
} |
|
} |
|
if t.Flags.Has(6) { |
|
b.PutString(t.Emoticon) |
|
} |
|
if t.Flags.Has(4) { |
|
b.PutInt(t.InstallsCount) |
|
} |
|
return nil |
|
} |
|
|
|
// Decode implements bin.Decoder. |
|
func (t *Theme) Decode(b *bin.Buffer) error { |
|
if t == nil { |
|
return fmt.Errorf("can't decode theme#a00e67d6 to nil") |
|
} |
|
if err := b.ConsumeID(ThemeTypeID); err != nil { |
|
return fmt.Errorf("unable to decode theme#a00e67d6: %w", err) |
|
} |
|
return t.DecodeBare(b) |
|
} |
|
|
|
// DecodeBare implements bin.BareDecoder. |
|
func (t *Theme) DecodeBare(b *bin.Buffer) error { |
|
if t == nil { |
|
return fmt.Errorf("can't decode theme#a00e67d6 to nil") |
|
} |
|
{ |
|
if err := t.Flags.Decode(b); err != nil { |
|
return fmt.Errorf("unable to decode theme#a00e67d6: field flags: %w", err) |
|
} |
|
} |
|
t.Creator = t.Flags.Has(0) |
|
t.Default = t.Flags.Has(1) |
|
t.ForChat = t.Flags.Has(5) |
|
{ |
|
value, err := b.Long() |
|
if err != nil { |
|
return fmt.Errorf("unable to decode theme#a00e67d6: field id: %w", err) |
|
} |
|
t.ID = value |
|
} |
|
{ |
|
value, err := b.Long() |
|
if err != nil { |
|
return fmt.Errorf("unable to decode theme#a00e67d6: field access_hash: %w", err) |
|
} |
|
t.AccessHash = value |
|
} |
|
{ |
|
value, err := b.String() |
|
if err != nil { |
|
return fmt.Errorf("unable to decode theme#a00e67d6: field slug: %w", err) |
|
} |
|
t.Slug = value |
|
} |
|
{ |
|
value, err := b.String() |
|
if err != nil { |
|
return fmt.Errorf("unable to decode theme#a00e67d6: field title: %w", err) |
|
} |
|
t.Title = value |
|
} |
|
if t.Flags.Has(2) { |
|
value, err := DecodeDocument(b) |
|
if err != nil { |
|
return fmt.Errorf("unable to decode theme#a00e67d6: field document: %w", err) |
|
} |
|
t.Document = value |
|
} |
|
if t.Flags.Has(3) { |
|
headerLen, err := b.VectorHeader() |
|
if err != nil { |
|
return fmt.Errorf("unable to decode theme#a00e67d6: field settings: %w", err) |
|
} |
|
|
|
if headerLen > 0 { |
|
t.Settings = make([]ThemeSettings, 0, headerLen%bin.PreallocateLimit) |
|
} |
|
for idx := 0; idx < headerLen; idx++ { |
|
var value ThemeSettings |
|
if err := value.Decode(b); err != nil { |
|
return fmt.Errorf("unable to decode theme#a00e67d6: field settings: %w", err) |
|
} |
|
t.Settings = append(t.Settings, value) |
|
} |
|
} |
|
if t.Flags.Has(6) { |
|
value, err := b.String() |
|
if err != nil { |
|
return fmt.Errorf("unable to decode theme#a00e67d6: field emoticon: %w", err) |
|
} |
|
t.Emoticon = value |
|
} |
|
if t.Flags.Has(4) { |
|
value, err := b.Int() |
|
if err != nil { |
|
return fmt.Errorf("unable to decode theme#a00e67d6: field installs_count: %w", err) |
|
} |
|
t.InstallsCount = value |
|
} |
|
return nil |
|
} |
|
|
|
// SetCreator sets value of Creator conditional field. |
|
func (t *Theme) SetCreator(value bool) { |
|
if value { |
|
t.Flags.Set(0) |
|
t.Creator = true |
|
} else { |
|
t.Flags.Unset(0) |
|
t.Creator = false |
|
} |
|
} |
|
|
|
// GetCreator returns value of Creator conditional field. |
|
func (t *Theme) GetCreator() (value bool) { |
|
if t == nil { |
|
return |
|
} |
|
return t.Flags.Has(0) |
|
} |
|
|
|
// SetDefault sets value of Default conditional field. |
|
func (t *Theme) SetDefault(value bool) { |
|
if value { |
|
t.Flags.Set(1) |
|
t.Default = true |
|
} else { |
|
t.Flags.Unset(1) |
|
t.Default = false |
|
} |
|
} |
|
|
|
// GetDefault returns value of Default conditional field. |
|
func (t *Theme) GetDefault() (value bool) { |
|
if t == nil { |
|
return |
|
} |
|
return t.Flags.Has(1) |
|
} |
|
|
|
// SetForChat sets value of ForChat conditional field. |
|
func (t *Theme) SetForChat(value bool) { |
|
if value { |
|
t.Flags.Set(5) |
|
t.ForChat = true |
|
} else { |
|
t.Flags.Unset(5) |
|
t.ForChat = false |
|
} |
|
} |
|
|
|
// GetForChat returns value of ForChat conditional field. |
|
func (t *Theme) GetForChat() (value bool) { |
|
if t == nil { |
|
return |
|
} |
|
return t.Flags.Has(5) |
|
} |
|
|
|
// GetID returns value of ID field. |
|
func (t *Theme) GetID() (value int64) { |
|
if t == nil { |
|
return |
|
} |
|
return t.ID |
|
} |
|
|
|
// GetAccessHash returns value of AccessHash field. |
|
func (t *Theme) GetAccessHash() (value int64) { |
|
if t == nil { |
|
return |
|
} |
|
return t.AccessHash |
|
} |
|
|
|
// GetSlug returns value of Slug field. |
|
func (t *Theme) GetSlug() (value string) { |
|
if t == nil { |
|
return |
|
} |
|
return t.Slug |
|
} |
|
|
|
// GetTitle returns value of Title field. |
|
func (t *Theme) GetTitle() (value string) { |
|
if t == nil { |
|
return |
|
} |
|
return t.Title |
|
} |
|
|
|
// SetDocument sets value of Document conditional field. |
|
func (t *Theme) SetDocument(value DocumentClass) { |
|
t.Flags.Set(2) |
|
t.Document = value |
|
} |
|
|
|
// GetDocument returns value of Document conditional field and |
|
// boolean which is true if field was set. |
|
func (t *Theme) GetDocument() (value DocumentClass, ok bool) { |
|
if t == nil { |
|
return |
|
} |
|
if !t.Flags.Has(2) { |
|
return value, false |
|
} |
|
return t.Document, true |
|
} |
|
|
|
// SetSettings sets value of Settings conditional field. |
|
func (t *Theme) SetSettings(value []ThemeSettings) { |
|
t.Flags.Set(3) |
|
t.Settings = value |
|
} |
|
|
|
// GetSettings returns value of Settings conditional field and |
|
// boolean which is true if field was set. |
|
func (t *Theme) GetSettings() (value []ThemeSettings, ok bool) { |
|
if t == nil { |
|
return |
|
} |
|
if !t.Flags.Has(3) { |
|
return value, false |
|
} |
|
return t.Settings, true |
|
} |
|
|
|
// SetEmoticon sets value of Emoticon conditional field. |
|
func (t *Theme) SetEmoticon(value string) { |
|
t.Flags.Set(6) |
|
t.Emoticon = value |
|
} |
|
|
|
// GetEmoticon returns value of Emoticon conditional field and |
|
// boolean which is true if field was set. |
|
func (t *Theme) GetEmoticon() (value string, ok bool) { |
|
if t == nil { |
|
return |
|
} |
|
if !t.Flags.Has(6) { |
|
return value, false |
|
} |
|
return t.Emoticon, true |
|
} |
|
|
|
// SetInstallsCount sets value of InstallsCount conditional field. |
|
func (t *Theme) SetInstallsCount(value int) { |
|
t.Flags.Set(4) |
|
t.InstallsCount = value |
|
} |
|
|
|
// GetInstallsCount returns value of InstallsCount conditional field and |
|
// boolean which is true if field was set. |
|
func (t *Theme) GetInstallsCount() (value int, ok bool) { |
|
if t == nil { |
|
return |
|
} |
|
if !t.Flags.Has(4) { |
|
return value, false |
|
} |
|
return t.InstallsCount, true |
|
} |
|
|
|
// GetDocumentAsNotEmpty returns mapped value of Document conditional field and |
|
// boolean which is true if field was set. |
|
func (t *Theme) GetDocumentAsNotEmpty() (*Document, bool) { |
|
if value, ok := t.GetDocument(); ok { |
|
return value.AsNotEmpty() |
|
} |
|
return nil, false |
|
}
|
|
|