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.
1075 lines
24 KiB
1075 lines
24 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{} |
|
) |
|
|
|
// Dialog represents TL type `dialog#a8edd0f5`. |
|
// Chat |
|
// |
|
// See https://core.telegram.org/constructor/dialog for reference. |
|
type Dialog struct { |
|
// Flags, see TL conditional fields¹ |
|
// |
|
// Links: |
|
// 1) https://core.telegram.org/mtproto/TL-combinators#conditional-fields |
|
Flags bin.Fields |
|
// Is the dialog pinned |
|
Pinned bool |
|
// Whether the chat was manually marked as unread |
|
UnreadMark bool |
|
// The chat |
|
Peer PeerClass |
|
// The latest message ID |
|
TopMessage int |
|
// Position up to which all incoming messages are read. |
|
ReadInboxMaxID int |
|
// Position up to which all outgoing messages are read. |
|
ReadOutboxMaxID int |
|
// Number of unread messages |
|
UnreadCount int |
|
// Number of unread mentions¹ |
|
// |
|
// Links: |
|
// 1) https://core.telegram.org/api/mentions |
|
UnreadMentionsCount int |
|
// UnreadReactionsCount field of Dialog. |
|
UnreadReactionsCount int |
|
// Notification settings |
|
NotifySettings PeerNotifySettings |
|
// PTS¹ |
|
// |
|
// Links: |
|
// 1) https://core.telegram.org/api/updates |
|
// |
|
// Use SetPts and GetPts helpers. |
|
Pts int |
|
// Message draft |
|
// |
|
// Use SetDraft and GetDraft helpers. |
|
Draft DraftMessageClass |
|
// Peer folder ID, for more info click here¹ |
|
// |
|
// Links: |
|
// 1) https://core.telegram.org/api/folders#peer-folders |
|
// |
|
// Use SetFolderID and GetFolderID helpers. |
|
FolderID int |
|
} |
|
|
|
// DialogTypeID is TL type id of Dialog. |
|
const DialogTypeID = 0xa8edd0f5 |
|
|
|
// construct implements constructor of DialogClass. |
|
func (d Dialog) construct() DialogClass { return &d } |
|
|
|
// Ensuring interfaces in compile-time for Dialog. |
|
var ( |
|
_ bin.Encoder = &Dialog{} |
|
_ bin.Decoder = &Dialog{} |
|
_ bin.BareEncoder = &Dialog{} |
|
_ bin.BareDecoder = &Dialog{} |
|
|
|
_ DialogClass = &Dialog{} |
|
) |
|
|
|
func (d *Dialog) Zero() bool { |
|
if d == nil { |
|
return true |
|
} |
|
if !(d.Flags.Zero()) { |
|
return false |
|
} |
|
if !(d.Pinned == false) { |
|
return false |
|
} |
|
if !(d.UnreadMark == false) { |
|
return false |
|
} |
|
if !(d.Peer == nil) { |
|
return false |
|
} |
|
if !(d.TopMessage == 0) { |
|
return false |
|
} |
|
if !(d.ReadInboxMaxID == 0) { |
|
return false |
|
} |
|
if !(d.ReadOutboxMaxID == 0) { |
|
return false |
|
} |
|
if !(d.UnreadCount == 0) { |
|
return false |
|
} |
|
if !(d.UnreadMentionsCount == 0) { |
|
return false |
|
} |
|
if !(d.UnreadReactionsCount == 0) { |
|
return false |
|
} |
|
if !(d.NotifySettings.Zero()) { |
|
return false |
|
} |
|
if !(d.Pts == 0) { |
|
return false |
|
} |
|
if !(d.Draft == nil) { |
|
return false |
|
} |
|
if !(d.FolderID == 0) { |
|
return false |
|
} |
|
|
|
return true |
|
} |
|
|
|
// String implements fmt.Stringer. |
|
func (d *Dialog) String() string { |
|
if d == nil { |
|
return "Dialog(nil)" |
|
} |
|
type Alias Dialog |
|
return fmt.Sprintf("Dialog%+v", Alias(*d)) |
|
} |
|
|
|
// FillFrom fills Dialog from given interface. |
|
func (d *Dialog) FillFrom(from interface { |
|
GetPinned() (value bool) |
|
GetUnreadMark() (value bool) |
|
GetPeer() (value PeerClass) |
|
GetTopMessage() (value int) |
|
GetReadInboxMaxID() (value int) |
|
GetReadOutboxMaxID() (value int) |
|
GetUnreadCount() (value int) |
|
GetUnreadMentionsCount() (value int) |
|
GetUnreadReactionsCount() (value int) |
|
GetNotifySettings() (value PeerNotifySettings) |
|
GetPts() (value int, ok bool) |
|
GetDraft() (value DraftMessageClass, ok bool) |
|
GetFolderID() (value int, ok bool) |
|
}) { |
|
d.Pinned = from.GetPinned() |
|
d.UnreadMark = from.GetUnreadMark() |
|
d.Peer = from.GetPeer() |
|
d.TopMessage = from.GetTopMessage() |
|
d.ReadInboxMaxID = from.GetReadInboxMaxID() |
|
d.ReadOutboxMaxID = from.GetReadOutboxMaxID() |
|
d.UnreadCount = from.GetUnreadCount() |
|
d.UnreadMentionsCount = from.GetUnreadMentionsCount() |
|
d.UnreadReactionsCount = from.GetUnreadReactionsCount() |
|
d.NotifySettings = from.GetNotifySettings() |
|
if val, ok := from.GetPts(); ok { |
|
d.Pts = val |
|
} |
|
|
|
if val, ok := from.GetDraft(); ok { |
|
d.Draft = val |
|
} |
|
|
|
if val, ok := from.GetFolderID(); ok { |
|
d.FolderID = val |
|
} |
|
|
|
} |
|
|
|
// TypeID returns type id in TL schema. |
|
// |
|
// See https://core.telegram.org/mtproto/TL-tl#remarks. |
|
func (*Dialog) TypeID() uint32 { |
|
return DialogTypeID |
|
} |
|
|
|
// TypeName returns name of type in TL schema. |
|
func (*Dialog) TypeName() string { |
|
return "dialog" |
|
} |
|
|
|
// TypeInfo returns info about TL type. |
|
func (d *Dialog) TypeInfo() tdp.Type { |
|
typ := tdp.Type{ |
|
Name: "dialog", |
|
ID: DialogTypeID, |
|
} |
|
if d == nil { |
|
typ.Null = true |
|
return typ |
|
} |
|
typ.Fields = []tdp.Field{ |
|
{ |
|
Name: "Pinned", |
|
SchemaName: "pinned", |
|
Null: !d.Flags.Has(2), |
|
}, |
|
{ |
|
Name: "UnreadMark", |
|
SchemaName: "unread_mark", |
|
Null: !d.Flags.Has(3), |
|
}, |
|
{ |
|
Name: "Peer", |
|
SchemaName: "peer", |
|
}, |
|
{ |
|
Name: "TopMessage", |
|
SchemaName: "top_message", |
|
}, |
|
{ |
|
Name: "ReadInboxMaxID", |
|
SchemaName: "read_inbox_max_id", |
|
}, |
|
{ |
|
Name: "ReadOutboxMaxID", |
|
SchemaName: "read_outbox_max_id", |
|
}, |
|
{ |
|
Name: "UnreadCount", |
|
SchemaName: "unread_count", |
|
}, |
|
{ |
|
Name: "UnreadMentionsCount", |
|
SchemaName: "unread_mentions_count", |
|
}, |
|
{ |
|
Name: "UnreadReactionsCount", |
|
SchemaName: "unread_reactions_count", |
|
}, |
|
{ |
|
Name: "NotifySettings", |
|
SchemaName: "notify_settings", |
|
}, |
|
{ |
|
Name: "Pts", |
|
SchemaName: "pts", |
|
Null: !d.Flags.Has(0), |
|
}, |
|
{ |
|
Name: "Draft", |
|
SchemaName: "draft", |
|
Null: !d.Flags.Has(1), |
|
}, |
|
{ |
|
Name: "FolderID", |
|
SchemaName: "folder_id", |
|
Null: !d.Flags.Has(4), |
|
}, |
|
} |
|
return typ |
|
} |
|
|
|
// SetFlags sets flags for non-zero fields. |
|
func (d *Dialog) SetFlags() { |
|
if !(d.Pinned == false) { |
|
d.Flags.Set(2) |
|
} |
|
if !(d.UnreadMark == false) { |
|
d.Flags.Set(3) |
|
} |
|
if !(d.Pts == 0) { |
|
d.Flags.Set(0) |
|
} |
|
if !(d.Draft == nil) { |
|
d.Flags.Set(1) |
|
} |
|
if !(d.FolderID == 0) { |
|
d.Flags.Set(4) |
|
} |
|
} |
|
|
|
// Encode implements bin.Encoder. |
|
func (d *Dialog) Encode(b *bin.Buffer) error { |
|
if d == nil { |
|
return fmt.Errorf("can't encode dialog#a8edd0f5 as nil") |
|
} |
|
b.PutID(DialogTypeID) |
|
return d.EncodeBare(b) |
|
} |
|
|
|
// EncodeBare implements bin.BareEncoder. |
|
func (d *Dialog) EncodeBare(b *bin.Buffer) error { |
|
if d == nil { |
|
return fmt.Errorf("can't encode dialog#a8edd0f5 as nil") |
|
} |
|
d.SetFlags() |
|
if err := d.Flags.Encode(b); err != nil { |
|
return fmt.Errorf("unable to encode dialog#a8edd0f5: field flags: %w", err) |
|
} |
|
if d.Peer == nil { |
|
return fmt.Errorf("unable to encode dialog#a8edd0f5: field peer is nil") |
|
} |
|
if err := d.Peer.Encode(b); err != nil { |
|
return fmt.Errorf("unable to encode dialog#a8edd0f5: field peer: %w", err) |
|
} |
|
b.PutInt(d.TopMessage) |
|
b.PutInt(d.ReadInboxMaxID) |
|
b.PutInt(d.ReadOutboxMaxID) |
|
b.PutInt(d.UnreadCount) |
|
b.PutInt(d.UnreadMentionsCount) |
|
b.PutInt(d.UnreadReactionsCount) |
|
if err := d.NotifySettings.Encode(b); err != nil { |
|
return fmt.Errorf("unable to encode dialog#a8edd0f5: field notify_settings: %w", err) |
|
} |
|
if d.Flags.Has(0) { |
|
b.PutInt(d.Pts) |
|
} |
|
if d.Flags.Has(1) { |
|
if d.Draft == nil { |
|
return fmt.Errorf("unable to encode dialog#a8edd0f5: field draft is nil") |
|
} |
|
if err := d.Draft.Encode(b); err != nil { |
|
return fmt.Errorf("unable to encode dialog#a8edd0f5: field draft: %w", err) |
|
} |
|
} |
|
if d.Flags.Has(4) { |
|
b.PutInt(d.FolderID) |
|
} |
|
return nil |
|
} |
|
|
|
// Decode implements bin.Decoder. |
|
func (d *Dialog) Decode(b *bin.Buffer) error { |
|
if d == nil { |
|
return fmt.Errorf("can't decode dialog#a8edd0f5 to nil") |
|
} |
|
if err := b.ConsumeID(DialogTypeID); err != nil { |
|
return fmt.Errorf("unable to decode dialog#a8edd0f5: %w", err) |
|
} |
|
return d.DecodeBare(b) |
|
} |
|
|
|
// DecodeBare implements bin.BareDecoder. |
|
func (d *Dialog) DecodeBare(b *bin.Buffer) error { |
|
if d == nil { |
|
return fmt.Errorf("can't decode dialog#a8edd0f5 to nil") |
|
} |
|
{ |
|
if err := d.Flags.Decode(b); err != nil { |
|
return fmt.Errorf("unable to decode dialog#a8edd0f5: field flags: %w", err) |
|
} |
|
} |
|
d.Pinned = d.Flags.Has(2) |
|
d.UnreadMark = d.Flags.Has(3) |
|
{ |
|
value, err := DecodePeer(b) |
|
if err != nil { |
|
return fmt.Errorf("unable to decode dialog#a8edd0f5: field peer: %w", err) |
|
} |
|
d.Peer = value |
|
} |
|
{ |
|
value, err := b.Int() |
|
if err != nil { |
|
return fmt.Errorf("unable to decode dialog#a8edd0f5: field top_message: %w", err) |
|
} |
|
d.TopMessage = value |
|
} |
|
{ |
|
value, err := b.Int() |
|
if err != nil { |
|
return fmt.Errorf("unable to decode dialog#a8edd0f5: field read_inbox_max_id: %w", err) |
|
} |
|
d.ReadInboxMaxID = value |
|
} |
|
{ |
|
value, err := b.Int() |
|
if err != nil { |
|
return fmt.Errorf("unable to decode dialog#a8edd0f5: field read_outbox_max_id: %w", err) |
|
} |
|
d.ReadOutboxMaxID = value |
|
} |
|
{ |
|
value, err := b.Int() |
|
if err != nil { |
|
return fmt.Errorf("unable to decode dialog#a8edd0f5: field unread_count: %w", err) |
|
} |
|
d.UnreadCount = value |
|
} |
|
{ |
|
value, err := b.Int() |
|
if err != nil { |
|
return fmt.Errorf("unable to decode dialog#a8edd0f5: field unread_mentions_count: %w", err) |
|
} |
|
d.UnreadMentionsCount = value |
|
} |
|
{ |
|
value, err := b.Int() |
|
if err != nil { |
|
return fmt.Errorf("unable to decode dialog#a8edd0f5: field unread_reactions_count: %w", err) |
|
} |
|
d.UnreadReactionsCount = value |
|
} |
|
{ |
|
if err := d.NotifySettings.Decode(b); err != nil { |
|
return fmt.Errorf("unable to decode dialog#a8edd0f5: field notify_settings: %w", err) |
|
} |
|
} |
|
if d.Flags.Has(0) { |
|
value, err := b.Int() |
|
if err != nil { |
|
return fmt.Errorf("unable to decode dialog#a8edd0f5: field pts: %w", err) |
|
} |
|
d.Pts = value |
|
} |
|
if d.Flags.Has(1) { |
|
value, err := DecodeDraftMessage(b) |
|
if err != nil { |
|
return fmt.Errorf("unable to decode dialog#a8edd0f5: field draft: %w", err) |
|
} |
|
d.Draft = value |
|
} |
|
if d.Flags.Has(4) { |
|
value, err := b.Int() |
|
if err != nil { |
|
return fmt.Errorf("unable to decode dialog#a8edd0f5: field folder_id: %w", err) |
|
} |
|
d.FolderID = value |
|
} |
|
return nil |
|
} |
|
|
|
// SetPinned sets value of Pinned conditional field. |
|
func (d *Dialog) SetPinned(value bool) { |
|
if value { |
|
d.Flags.Set(2) |
|
d.Pinned = true |
|
} else { |
|
d.Flags.Unset(2) |
|
d.Pinned = false |
|
} |
|
} |
|
|
|
// GetPinned returns value of Pinned conditional field. |
|
func (d *Dialog) GetPinned() (value bool) { |
|
if d == nil { |
|
return |
|
} |
|
return d.Flags.Has(2) |
|
} |
|
|
|
// SetUnreadMark sets value of UnreadMark conditional field. |
|
func (d *Dialog) SetUnreadMark(value bool) { |
|
if value { |
|
d.Flags.Set(3) |
|
d.UnreadMark = true |
|
} else { |
|
d.Flags.Unset(3) |
|
d.UnreadMark = false |
|
} |
|
} |
|
|
|
// GetUnreadMark returns value of UnreadMark conditional field. |
|
func (d *Dialog) GetUnreadMark() (value bool) { |
|
if d == nil { |
|
return |
|
} |
|
return d.Flags.Has(3) |
|
} |
|
|
|
// GetPeer returns value of Peer field. |
|
func (d *Dialog) GetPeer() (value PeerClass) { |
|
if d == nil { |
|
return |
|
} |
|
return d.Peer |
|
} |
|
|
|
// GetTopMessage returns value of TopMessage field. |
|
func (d *Dialog) GetTopMessage() (value int) { |
|
if d == nil { |
|
return |
|
} |
|
return d.TopMessage |
|
} |
|
|
|
// GetReadInboxMaxID returns value of ReadInboxMaxID field. |
|
func (d *Dialog) GetReadInboxMaxID() (value int) { |
|
if d == nil { |
|
return |
|
} |
|
return d.ReadInboxMaxID |
|
} |
|
|
|
// GetReadOutboxMaxID returns value of ReadOutboxMaxID field. |
|
func (d *Dialog) GetReadOutboxMaxID() (value int) { |
|
if d == nil { |
|
return |
|
} |
|
return d.ReadOutboxMaxID |
|
} |
|
|
|
// GetUnreadCount returns value of UnreadCount field. |
|
func (d *Dialog) GetUnreadCount() (value int) { |
|
if d == nil { |
|
return |
|
} |
|
return d.UnreadCount |
|
} |
|
|
|
// GetUnreadMentionsCount returns value of UnreadMentionsCount field. |
|
func (d *Dialog) GetUnreadMentionsCount() (value int) { |
|
if d == nil { |
|
return |
|
} |
|
return d.UnreadMentionsCount |
|
} |
|
|
|
// GetUnreadReactionsCount returns value of UnreadReactionsCount field. |
|
func (d *Dialog) GetUnreadReactionsCount() (value int) { |
|
if d == nil { |
|
return |
|
} |
|
return d.UnreadReactionsCount |
|
} |
|
|
|
// GetNotifySettings returns value of NotifySettings field. |
|
func (d *Dialog) GetNotifySettings() (value PeerNotifySettings) { |
|
if d == nil { |
|
return |
|
} |
|
return d.NotifySettings |
|
} |
|
|
|
// SetPts sets value of Pts conditional field. |
|
func (d *Dialog) SetPts(value int) { |
|
d.Flags.Set(0) |
|
d.Pts = value |
|
} |
|
|
|
// GetPts returns value of Pts conditional field and |
|
// boolean which is true if field was set. |
|
func (d *Dialog) GetPts() (value int, ok bool) { |
|
if d == nil { |
|
return |
|
} |
|
if !d.Flags.Has(0) { |
|
return value, false |
|
} |
|
return d.Pts, true |
|
} |
|
|
|
// SetDraft sets value of Draft conditional field. |
|
func (d *Dialog) SetDraft(value DraftMessageClass) { |
|
d.Flags.Set(1) |
|
d.Draft = value |
|
} |
|
|
|
// GetDraft returns value of Draft conditional field and |
|
// boolean which is true if field was set. |
|
func (d *Dialog) GetDraft() (value DraftMessageClass, ok bool) { |
|
if d == nil { |
|
return |
|
} |
|
if !d.Flags.Has(1) { |
|
return value, false |
|
} |
|
return d.Draft, true |
|
} |
|
|
|
// SetFolderID sets value of FolderID conditional field. |
|
func (d *Dialog) SetFolderID(value int) { |
|
d.Flags.Set(4) |
|
d.FolderID = value |
|
} |
|
|
|
// GetFolderID returns value of FolderID conditional field and |
|
// boolean which is true if field was set. |
|
func (d *Dialog) GetFolderID() (value int, ok bool) { |
|
if d == nil { |
|
return |
|
} |
|
if !d.Flags.Has(4) { |
|
return value, false |
|
} |
|
return d.FolderID, true |
|
} |
|
|
|
// DialogFolder represents TL type `dialogFolder#71bd134c`. |
|
// Dialog in folder |
|
// |
|
// See https://core.telegram.org/constructor/dialogFolder for reference. |
|
type DialogFolder struct { |
|
// Flags, see TL conditional fields¹ |
|
// |
|
// Links: |
|
// 1) https://core.telegram.org/mtproto/TL-combinators#conditional-fields |
|
Flags bin.Fields |
|
// Is this folder pinned |
|
Pinned bool |
|
// The folder |
|
Folder Folder |
|
// Peer in folder |
|
Peer PeerClass |
|
// Latest message ID of dialog |
|
TopMessage int |
|
// Number of unread muted peers in folder |
|
UnreadMutedPeersCount int |
|
// Number of unread unmuted peers in folder |
|
UnreadUnmutedPeersCount int |
|
// Number of unread messages from muted peers in folder |
|
UnreadMutedMessagesCount int |
|
// Number of unread messages from unmuted peers in folder |
|
UnreadUnmutedMessagesCount int |
|
} |
|
|
|
// DialogFolderTypeID is TL type id of DialogFolder. |
|
const DialogFolderTypeID = 0x71bd134c |
|
|
|
// construct implements constructor of DialogClass. |
|
func (d DialogFolder) construct() DialogClass { return &d } |
|
|
|
// Ensuring interfaces in compile-time for DialogFolder. |
|
var ( |
|
_ bin.Encoder = &DialogFolder{} |
|
_ bin.Decoder = &DialogFolder{} |
|
_ bin.BareEncoder = &DialogFolder{} |
|
_ bin.BareDecoder = &DialogFolder{} |
|
|
|
_ DialogClass = &DialogFolder{} |
|
) |
|
|
|
func (d *DialogFolder) Zero() bool { |
|
if d == nil { |
|
return true |
|
} |
|
if !(d.Flags.Zero()) { |
|
return false |
|
} |
|
if !(d.Pinned == false) { |
|
return false |
|
} |
|
if !(d.Folder.Zero()) { |
|
return false |
|
} |
|
if !(d.Peer == nil) { |
|
return false |
|
} |
|
if !(d.TopMessage == 0) { |
|
return false |
|
} |
|
if !(d.UnreadMutedPeersCount == 0) { |
|
return false |
|
} |
|
if !(d.UnreadUnmutedPeersCount == 0) { |
|
return false |
|
} |
|
if !(d.UnreadMutedMessagesCount == 0) { |
|
return false |
|
} |
|
if !(d.UnreadUnmutedMessagesCount == 0) { |
|
return false |
|
} |
|
|
|
return true |
|
} |
|
|
|
// String implements fmt.Stringer. |
|
func (d *DialogFolder) String() string { |
|
if d == nil { |
|
return "DialogFolder(nil)" |
|
} |
|
type Alias DialogFolder |
|
return fmt.Sprintf("DialogFolder%+v", Alias(*d)) |
|
} |
|
|
|
// FillFrom fills DialogFolder from given interface. |
|
func (d *DialogFolder) FillFrom(from interface { |
|
GetPinned() (value bool) |
|
GetFolder() (value Folder) |
|
GetPeer() (value PeerClass) |
|
GetTopMessage() (value int) |
|
GetUnreadMutedPeersCount() (value int) |
|
GetUnreadUnmutedPeersCount() (value int) |
|
GetUnreadMutedMessagesCount() (value int) |
|
GetUnreadUnmutedMessagesCount() (value int) |
|
}) { |
|
d.Pinned = from.GetPinned() |
|
d.Folder = from.GetFolder() |
|
d.Peer = from.GetPeer() |
|
d.TopMessage = from.GetTopMessage() |
|
d.UnreadMutedPeersCount = from.GetUnreadMutedPeersCount() |
|
d.UnreadUnmutedPeersCount = from.GetUnreadUnmutedPeersCount() |
|
d.UnreadMutedMessagesCount = from.GetUnreadMutedMessagesCount() |
|
d.UnreadUnmutedMessagesCount = from.GetUnreadUnmutedMessagesCount() |
|
} |
|
|
|
// TypeID returns type id in TL schema. |
|
// |
|
// See https://core.telegram.org/mtproto/TL-tl#remarks. |
|
func (*DialogFolder) TypeID() uint32 { |
|
return DialogFolderTypeID |
|
} |
|
|
|
// TypeName returns name of type in TL schema. |
|
func (*DialogFolder) TypeName() string { |
|
return "dialogFolder" |
|
} |
|
|
|
// TypeInfo returns info about TL type. |
|
func (d *DialogFolder) TypeInfo() tdp.Type { |
|
typ := tdp.Type{ |
|
Name: "dialogFolder", |
|
ID: DialogFolderTypeID, |
|
} |
|
if d == nil { |
|
typ.Null = true |
|
return typ |
|
} |
|
typ.Fields = []tdp.Field{ |
|
{ |
|
Name: "Pinned", |
|
SchemaName: "pinned", |
|
Null: !d.Flags.Has(2), |
|
}, |
|
{ |
|
Name: "Folder", |
|
SchemaName: "folder", |
|
}, |
|
{ |
|
Name: "Peer", |
|
SchemaName: "peer", |
|
}, |
|
{ |
|
Name: "TopMessage", |
|
SchemaName: "top_message", |
|
}, |
|
{ |
|
Name: "UnreadMutedPeersCount", |
|
SchemaName: "unread_muted_peers_count", |
|
}, |
|
{ |
|
Name: "UnreadUnmutedPeersCount", |
|
SchemaName: "unread_unmuted_peers_count", |
|
}, |
|
{ |
|
Name: "UnreadMutedMessagesCount", |
|
SchemaName: "unread_muted_messages_count", |
|
}, |
|
{ |
|
Name: "UnreadUnmutedMessagesCount", |
|
SchemaName: "unread_unmuted_messages_count", |
|
}, |
|
} |
|
return typ |
|
} |
|
|
|
// SetFlags sets flags for non-zero fields. |
|
func (d *DialogFolder) SetFlags() { |
|
if !(d.Pinned == false) { |
|
d.Flags.Set(2) |
|
} |
|
} |
|
|
|
// Encode implements bin.Encoder. |
|
func (d *DialogFolder) Encode(b *bin.Buffer) error { |
|
if d == nil { |
|
return fmt.Errorf("can't encode dialogFolder#71bd134c as nil") |
|
} |
|
b.PutID(DialogFolderTypeID) |
|
return d.EncodeBare(b) |
|
} |
|
|
|
// EncodeBare implements bin.BareEncoder. |
|
func (d *DialogFolder) EncodeBare(b *bin.Buffer) error { |
|
if d == nil { |
|
return fmt.Errorf("can't encode dialogFolder#71bd134c as nil") |
|
} |
|
d.SetFlags() |
|
if err := d.Flags.Encode(b); err != nil { |
|
return fmt.Errorf("unable to encode dialogFolder#71bd134c: field flags: %w", err) |
|
} |
|
if err := d.Folder.Encode(b); err != nil { |
|
return fmt.Errorf("unable to encode dialogFolder#71bd134c: field folder: %w", err) |
|
} |
|
if d.Peer == nil { |
|
return fmt.Errorf("unable to encode dialogFolder#71bd134c: field peer is nil") |
|
} |
|
if err := d.Peer.Encode(b); err != nil { |
|
return fmt.Errorf("unable to encode dialogFolder#71bd134c: field peer: %w", err) |
|
} |
|
b.PutInt(d.TopMessage) |
|
b.PutInt(d.UnreadMutedPeersCount) |
|
b.PutInt(d.UnreadUnmutedPeersCount) |
|
b.PutInt(d.UnreadMutedMessagesCount) |
|
b.PutInt(d.UnreadUnmutedMessagesCount) |
|
return nil |
|
} |
|
|
|
// Decode implements bin.Decoder. |
|
func (d *DialogFolder) Decode(b *bin.Buffer) error { |
|
if d == nil { |
|
return fmt.Errorf("can't decode dialogFolder#71bd134c to nil") |
|
} |
|
if err := b.ConsumeID(DialogFolderTypeID); err != nil { |
|
return fmt.Errorf("unable to decode dialogFolder#71bd134c: %w", err) |
|
} |
|
return d.DecodeBare(b) |
|
} |
|
|
|
// DecodeBare implements bin.BareDecoder. |
|
func (d *DialogFolder) DecodeBare(b *bin.Buffer) error { |
|
if d == nil { |
|
return fmt.Errorf("can't decode dialogFolder#71bd134c to nil") |
|
} |
|
{ |
|
if err := d.Flags.Decode(b); err != nil { |
|
return fmt.Errorf("unable to decode dialogFolder#71bd134c: field flags: %w", err) |
|
} |
|
} |
|
d.Pinned = d.Flags.Has(2) |
|
{ |
|
if err := d.Folder.Decode(b); err != nil { |
|
return fmt.Errorf("unable to decode dialogFolder#71bd134c: field folder: %w", err) |
|
} |
|
} |
|
{ |
|
value, err := DecodePeer(b) |
|
if err != nil { |
|
return fmt.Errorf("unable to decode dialogFolder#71bd134c: field peer: %w", err) |
|
} |
|
d.Peer = value |
|
} |
|
{ |
|
value, err := b.Int() |
|
if err != nil { |
|
return fmt.Errorf("unable to decode dialogFolder#71bd134c: field top_message: %w", err) |
|
} |
|
d.TopMessage = value |
|
} |
|
{ |
|
value, err := b.Int() |
|
if err != nil { |
|
return fmt.Errorf("unable to decode dialogFolder#71bd134c: field unread_muted_peers_count: %w", err) |
|
} |
|
d.UnreadMutedPeersCount = value |
|
} |
|
{ |
|
value, err := b.Int() |
|
if err != nil { |
|
return fmt.Errorf("unable to decode dialogFolder#71bd134c: field unread_unmuted_peers_count: %w", err) |
|
} |
|
d.UnreadUnmutedPeersCount = value |
|
} |
|
{ |
|
value, err := b.Int() |
|
if err != nil { |
|
return fmt.Errorf("unable to decode dialogFolder#71bd134c: field unread_muted_messages_count: %w", err) |
|
} |
|
d.UnreadMutedMessagesCount = value |
|
} |
|
{ |
|
value, err := b.Int() |
|
if err != nil { |
|
return fmt.Errorf("unable to decode dialogFolder#71bd134c: field unread_unmuted_messages_count: %w", err) |
|
} |
|
d.UnreadUnmutedMessagesCount = value |
|
} |
|
return nil |
|
} |
|
|
|
// SetPinned sets value of Pinned conditional field. |
|
func (d *DialogFolder) SetPinned(value bool) { |
|
if value { |
|
d.Flags.Set(2) |
|
d.Pinned = true |
|
} else { |
|
d.Flags.Unset(2) |
|
d.Pinned = false |
|
} |
|
} |
|
|
|
// GetPinned returns value of Pinned conditional field. |
|
func (d *DialogFolder) GetPinned() (value bool) { |
|
if d == nil { |
|
return |
|
} |
|
return d.Flags.Has(2) |
|
} |
|
|
|
// GetFolder returns value of Folder field. |
|
func (d *DialogFolder) GetFolder() (value Folder) { |
|
if d == nil { |
|
return |
|
} |
|
return d.Folder |
|
} |
|
|
|
// GetPeer returns value of Peer field. |
|
func (d *DialogFolder) GetPeer() (value PeerClass) { |
|
if d == nil { |
|
return |
|
} |
|
return d.Peer |
|
} |
|
|
|
// GetTopMessage returns value of TopMessage field. |
|
func (d *DialogFolder) GetTopMessage() (value int) { |
|
if d == nil { |
|
return |
|
} |
|
return d.TopMessage |
|
} |
|
|
|
// GetUnreadMutedPeersCount returns value of UnreadMutedPeersCount field. |
|
func (d *DialogFolder) GetUnreadMutedPeersCount() (value int) { |
|
if d == nil { |
|
return |
|
} |
|
return d.UnreadMutedPeersCount |
|
} |
|
|
|
// GetUnreadUnmutedPeersCount returns value of UnreadUnmutedPeersCount field. |
|
func (d *DialogFolder) GetUnreadUnmutedPeersCount() (value int) { |
|
if d == nil { |
|
return |
|
} |
|
return d.UnreadUnmutedPeersCount |
|
} |
|
|
|
// GetUnreadMutedMessagesCount returns value of UnreadMutedMessagesCount field. |
|
func (d *DialogFolder) GetUnreadMutedMessagesCount() (value int) { |
|
if d == nil { |
|
return |
|
} |
|
return d.UnreadMutedMessagesCount |
|
} |
|
|
|
// GetUnreadUnmutedMessagesCount returns value of UnreadUnmutedMessagesCount field. |
|
func (d *DialogFolder) GetUnreadUnmutedMessagesCount() (value int) { |
|
if d == nil { |
|
return |
|
} |
|
return d.UnreadUnmutedMessagesCount |
|
} |
|
|
|
// DialogClassName is schema name of DialogClass. |
|
const DialogClassName = "Dialog" |
|
|
|
// DialogClass represents Dialog generic type. |
|
// |
|
// See https://core.telegram.org/type/Dialog for reference. |
|
// |
|
// Example: |
|
// g, err := tg.DecodeDialog(buf) |
|
// if err != nil { |
|
// panic(err) |
|
// } |
|
// switch v := g.(type) { |
|
// case *tg.Dialog: // dialog#a8edd0f5 |
|
// case *tg.DialogFolder: // dialogFolder#71bd134c |
|
// default: panic(v) |
|
// } |
|
type DialogClass interface { |
|
bin.Encoder |
|
bin.Decoder |
|
bin.BareEncoder |
|
bin.BareDecoder |
|
construct() DialogClass |
|
|
|
// 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 |
|
|
|
// Is the dialog pinned |
|
GetPinned() (value bool) |
|
|
|
// The chat |
|
GetPeer() (value PeerClass) |
|
|
|
// The latest message ID |
|
GetTopMessage() (value int) |
|
} |
|
|
|
// AsInputDialogPeerFolder tries to map Dialog to InputDialogPeerFolder. |
|
func (d *Dialog) AsInputDialogPeerFolder() *InputDialogPeerFolder { |
|
value := new(InputDialogPeerFolder) |
|
if fieldValue, ok := d.GetFolderID(); ok { |
|
value.FolderID = fieldValue |
|
} |
|
|
|
return value |
|
} |
|
|
|
// DecodeDialog implements binary de-serialization for DialogClass. |
|
func DecodeDialog(buf *bin.Buffer) (DialogClass, error) { |
|
id, err := buf.PeekID() |
|
if err != nil { |
|
return nil, err |
|
} |
|
switch id { |
|
case DialogTypeID: |
|
// Decoding dialog#a8edd0f5. |
|
v := Dialog{} |
|
if err := v.Decode(buf); err != nil { |
|
return nil, fmt.Errorf("unable to decode DialogClass: %w", err) |
|
} |
|
return &v, nil |
|
case DialogFolderTypeID: |
|
// Decoding dialogFolder#71bd134c. |
|
v := DialogFolder{} |
|
if err := v.Decode(buf); err != nil { |
|
return nil, fmt.Errorf("unable to decode DialogClass: %w", err) |
|
} |
|
return &v, nil |
|
default: |
|
return nil, fmt.Errorf("unable to decode DialogClass: %w", bin.NewUnexpectedID(id)) |
|
} |
|
} |
|
|
|
// Dialog boxes the DialogClass providing a helper. |
|
type DialogBox struct { |
|
Dialog DialogClass |
|
} |
|
|
|
// Decode implements bin.Decoder for DialogBox. |
|
func (b *DialogBox) Decode(buf *bin.Buffer) error { |
|
if b == nil { |
|
return fmt.Errorf("unable to decode DialogBox to nil") |
|
} |
|
v, err := DecodeDialog(buf) |
|
if err != nil { |
|
return fmt.Errorf("unable to decode boxed value: %w", err) |
|
} |
|
b.Dialog = v |
|
return nil |
|
} |
|
|
|
// Encode implements bin.Encode for DialogBox. |
|
func (b *DialogBox) Encode(buf *bin.Buffer) error { |
|
if b == nil || b.Dialog == nil { |
|
return fmt.Errorf("unable to encode DialogClass as nil") |
|
} |
|
return b.Dialog.Encode(buf) |
|
}
|
|
|