// Code generated by gotdgen, DO NOT EDIT. package tg import ( "context" "errors" "fmt" "sort" "strings" "go.uber.org/multierr" "go.mau.fi/mautrix-telegram/pkg/gotd/bin" "go.mau.fi/mautrix-telegram/pkg/gotd/tdjson" "go.mau.fi/mautrix-telegram/pkg/gotd/tdp" "go.mau.fi/mautrix-telegram/pkg/gotd/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{} ) // DraftMessageEmpty represents TL type `draftMessageEmpty#1b0c841a`. // Empty draft // // See https://core.telegram.org/constructor/draftMessageEmpty for reference. type DraftMessageEmpty struct { // Flags, see TL conditional fields¹ // // Links: // 1) https://core.telegram.org/mtproto/TL-combinators#conditional-fields Flags bin.Fields // When was the draft last updated // // Use SetDate and GetDate helpers. Date int } // DraftMessageEmptyTypeID is TL type id of DraftMessageEmpty. const DraftMessageEmptyTypeID = 0x1b0c841a // construct implements constructor of DraftMessageClass. func (d DraftMessageEmpty) construct() DraftMessageClass { return &d } // Ensuring interfaces in compile-time for DraftMessageEmpty. var ( _ bin.Encoder = &DraftMessageEmpty{} _ bin.Decoder = &DraftMessageEmpty{} _ bin.BareEncoder = &DraftMessageEmpty{} _ bin.BareDecoder = &DraftMessageEmpty{} _ DraftMessageClass = &DraftMessageEmpty{} ) func (d *DraftMessageEmpty) Zero() bool { if d == nil { return true } if !(d.Flags.Zero()) { return false } if !(d.Date == 0) { return false } return true } // String implements fmt.Stringer. func (d *DraftMessageEmpty) String() string { if d == nil { return "DraftMessageEmpty(nil)" } type Alias DraftMessageEmpty return fmt.Sprintf("DraftMessageEmpty%+v", Alias(*d)) } // FillFrom fills DraftMessageEmpty from given interface. func (d *DraftMessageEmpty) FillFrom(from interface { GetDate() (value int, ok bool) }) { if val, ok := from.GetDate(); ok { d.Date = val } } // TypeID returns type id in TL schema. // // See https://core.telegram.org/mtproto/TL-tl#remarks. func (*DraftMessageEmpty) TypeID() uint32 { return DraftMessageEmptyTypeID } // TypeName returns name of type in TL schema. func (*DraftMessageEmpty) TypeName() string { return "draftMessageEmpty" } // TypeInfo returns info about TL type. func (d *DraftMessageEmpty) TypeInfo() tdp.Type { typ := tdp.Type{ Name: "draftMessageEmpty", ID: DraftMessageEmptyTypeID, } if d == nil { typ.Null = true return typ } typ.Fields = []tdp.Field{ { Name: "Date", SchemaName: "date", Null: !d.Flags.Has(0), }, } return typ } // SetFlags sets flags for non-zero fields. func (d *DraftMessageEmpty) SetFlags() { if !(d.Date == 0) { d.Flags.Set(0) } } // Encode implements bin.Encoder. func (d *DraftMessageEmpty) Encode(b *bin.Buffer) error { if d == nil { return fmt.Errorf("can't encode draftMessageEmpty#1b0c841a as nil") } b.PutID(DraftMessageEmptyTypeID) return d.EncodeBare(b) } // EncodeBare implements bin.BareEncoder. func (d *DraftMessageEmpty) EncodeBare(b *bin.Buffer) error { if d == nil { return fmt.Errorf("can't encode draftMessageEmpty#1b0c841a as nil") } d.SetFlags() if err := d.Flags.Encode(b); err != nil { return fmt.Errorf("unable to encode draftMessageEmpty#1b0c841a: field flags: %w", err) } if d.Flags.Has(0) { b.PutInt(d.Date) } return nil } // Decode implements bin.Decoder. func (d *DraftMessageEmpty) Decode(b *bin.Buffer) error { if d == nil { return fmt.Errorf("can't decode draftMessageEmpty#1b0c841a to nil") } if err := b.ConsumeID(DraftMessageEmptyTypeID); err != nil { return fmt.Errorf("unable to decode draftMessageEmpty#1b0c841a: %w", err) } return d.DecodeBare(b) } // DecodeBare implements bin.BareDecoder. func (d *DraftMessageEmpty) DecodeBare(b *bin.Buffer) error { if d == nil { return fmt.Errorf("can't decode draftMessageEmpty#1b0c841a to nil") } { if err := d.Flags.Decode(b); err != nil { return fmt.Errorf("unable to decode draftMessageEmpty#1b0c841a: field flags: %w", err) } } if d.Flags.Has(0) { value, err := b.Int() if err != nil { return fmt.Errorf("unable to decode draftMessageEmpty#1b0c841a: field date: %w", err) } d.Date = value } return nil } // SetDate sets value of Date conditional field. func (d *DraftMessageEmpty) SetDate(value int) { d.Flags.Set(0) d.Date = value } // GetDate returns value of Date conditional field and // boolean which is true if field was set. func (d *DraftMessageEmpty) GetDate() (value int, ok bool) { if d == nil { return } if !d.Flags.Has(0) { return value, false } return d.Date, true } // DraftMessage represents TL type `draftMessage#2d65321f`. // Represents a message draft¹. // // Links: // 1. https://core.telegram.org/api/drafts // // See https://core.telegram.org/constructor/draftMessage for reference. type DraftMessage struct { // Flags, see TL conditional fields¹ // // Links: // 1) https://core.telegram.org/mtproto/TL-combinators#conditional-fields Flags bin.Fields // Whether no webpage preview will be generated NoWebpage bool // If set, any eventual webpage preview will be shown on top of the message instead of at // the bottom. InvertMedia bool // If set, indicates that the message should be sent in reply to the specified message or // story. // // Use SetReplyTo and GetReplyTo helpers. ReplyTo InputReplyToClass // The draft Message string // Message entities¹ for styled text. // // Links: // 1) https://core.telegram.org/api/entities // // Use SetEntities and GetEntities helpers. Entities []MessageEntityClass // Media. // // Use SetMedia and GetMedia helpers. Media InputMediaClass // Date of last update of the draft. Date int // A message effect that should be played as specified here »¹. // // Links: // 1) https://core.telegram.org/api/effects // // Use SetEffect and GetEffect helpers. Effect int64 } // DraftMessageTypeID is TL type id of DraftMessage. const DraftMessageTypeID = 0x2d65321f // construct implements constructor of DraftMessageClass. func (d DraftMessage) construct() DraftMessageClass { return &d } // Ensuring interfaces in compile-time for DraftMessage. var ( _ bin.Encoder = &DraftMessage{} _ bin.Decoder = &DraftMessage{} _ bin.BareEncoder = &DraftMessage{} _ bin.BareDecoder = &DraftMessage{} _ DraftMessageClass = &DraftMessage{} ) func (d *DraftMessage) Zero() bool { if d == nil { return true } if !(d.Flags.Zero()) { return false } if !(d.NoWebpage == false) { return false } if !(d.InvertMedia == false) { return false } if !(d.ReplyTo == nil) { return false } if !(d.Message == "") { return false } if !(d.Entities == nil) { return false } if !(d.Media == nil) { return false } if !(d.Date == 0) { return false } if !(d.Effect == 0) { return false } return true } // String implements fmt.Stringer. func (d *DraftMessage) String() string { if d == nil { return "DraftMessage(nil)" } type Alias DraftMessage return fmt.Sprintf("DraftMessage%+v", Alias(*d)) } // FillFrom fills DraftMessage from given interface. func (d *DraftMessage) FillFrom(from interface { GetNoWebpage() (value bool) GetInvertMedia() (value bool) GetReplyTo() (value InputReplyToClass, ok bool) GetMessage() (value string) GetEntities() (value []MessageEntityClass, ok bool) GetMedia() (value InputMediaClass, ok bool) GetDate() (value int) GetEffect() (value int64, ok bool) }) { d.NoWebpage = from.GetNoWebpage() d.InvertMedia = from.GetInvertMedia() if val, ok := from.GetReplyTo(); ok { d.ReplyTo = val } d.Message = from.GetMessage() if val, ok := from.GetEntities(); ok { d.Entities = val } if val, ok := from.GetMedia(); ok { d.Media = val } d.Date = from.GetDate() if val, ok := from.GetEffect(); ok { d.Effect = val } } // TypeID returns type id in TL schema. // // See https://core.telegram.org/mtproto/TL-tl#remarks. func (*DraftMessage) TypeID() uint32 { return DraftMessageTypeID } // TypeName returns name of type in TL schema. func (*DraftMessage) TypeName() string { return "draftMessage" } // TypeInfo returns info about TL type. func (d *DraftMessage) TypeInfo() tdp.Type { typ := tdp.Type{ Name: "draftMessage", ID: DraftMessageTypeID, } if d == nil { typ.Null = true return typ } typ.Fields = []tdp.Field{ { Name: "NoWebpage", SchemaName: "no_webpage", Null: !d.Flags.Has(1), }, { Name: "InvertMedia", SchemaName: "invert_media", Null: !d.Flags.Has(6), }, { Name: "ReplyTo", SchemaName: "reply_to", Null: !d.Flags.Has(4), }, { Name: "Message", SchemaName: "message", }, { Name: "Entities", SchemaName: "entities", Null: !d.Flags.Has(3), }, { Name: "Media", SchemaName: "media", Null: !d.Flags.Has(5), }, { Name: "Date", SchemaName: "date", }, { Name: "Effect", SchemaName: "effect", Null: !d.Flags.Has(7), }, } return typ } // SetFlags sets flags for non-zero fields. func (d *DraftMessage) SetFlags() { if !(d.NoWebpage == false) { d.Flags.Set(1) } if !(d.InvertMedia == false) { d.Flags.Set(6) } if !(d.ReplyTo == nil) { d.Flags.Set(4) } if !(d.Entities == nil) { d.Flags.Set(3) } if !(d.Media == nil) { d.Flags.Set(5) } if !(d.Effect == 0) { d.Flags.Set(7) } } // Encode implements bin.Encoder. func (d *DraftMessage) Encode(b *bin.Buffer) error { if d == nil { return fmt.Errorf("can't encode draftMessage#2d65321f as nil") } b.PutID(DraftMessageTypeID) return d.EncodeBare(b) } // EncodeBare implements bin.BareEncoder. func (d *DraftMessage) EncodeBare(b *bin.Buffer) error { if d == nil { return fmt.Errorf("can't encode draftMessage#2d65321f as nil") } d.SetFlags() if err := d.Flags.Encode(b); err != nil { return fmt.Errorf("unable to encode draftMessage#2d65321f: field flags: %w", err) } if d.Flags.Has(4) { if d.ReplyTo == nil { return fmt.Errorf("unable to encode draftMessage#2d65321f: field reply_to is nil") } if err := d.ReplyTo.Encode(b); err != nil { return fmt.Errorf("unable to encode draftMessage#2d65321f: field reply_to: %w", err) } } b.PutString(d.Message) if d.Flags.Has(3) { b.PutVectorHeader(len(d.Entities)) for idx, v := range d.Entities { if v == nil { return fmt.Errorf("unable to encode draftMessage#2d65321f: field entities element with index %d is nil", idx) } if err := v.Encode(b); err != nil { return fmt.Errorf("unable to encode draftMessage#2d65321f: field entities element with index %d: %w", idx, err) } } } if d.Flags.Has(5) { if d.Media == nil { return fmt.Errorf("unable to encode draftMessage#2d65321f: field media is nil") } if err := d.Media.Encode(b); err != nil { return fmt.Errorf("unable to encode draftMessage#2d65321f: field media: %w", err) } } b.PutInt(d.Date) if d.Flags.Has(7) { b.PutLong(d.Effect) } return nil } // Decode implements bin.Decoder. func (d *DraftMessage) Decode(b *bin.Buffer) error { if d == nil { return fmt.Errorf("can't decode draftMessage#2d65321f to nil") } if err := b.ConsumeID(DraftMessageTypeID); err != nil { return fmt.Errorf("unable to decode draftMessage#2d65321f: %w", err) } return d.DecodeBare(b) } // DecodeBare implements bin.BareDecoder. func (d *DraftMessage) DecodeBare(b *bin.Buffer) error { if d == nil { return fmt.Errorf("can't decode draftMessage#2d65321f to nil") } { if err := d.Flags.Decode(b); err != nil { return fmt.Errorf("unable to decode draftMessage#2d65321f: field flags: %w", err) } } d.NoWebpage = d.Flags.Has(1) d.InvertMedia = d.Flags.Has(6) if d.Flags.Has(4) { value, err := DecodeInputReplyTo(b) if err != nil { return fmt.Errorf("unable to decode draftMessage#2d65321f: field reply_to: %w", err) } d.ReplyTo = value } { value, err := b.String() if err != nil { return fmt.Errorf("unable to decode draftMessage#2d65321f: field message: %w", err) } d.Message = value } if d.Flags.Has(3) { headerLen, err := b.VectorHeader() if err != nil { return fmt.Errorf("unable to decode draftMessage#2d65321f: field entities: %w", err) } if headerLen > 0 { d.Entities = make([]MessageEntityClass, 0, headerLen%bin.PreallocateLimit) } for idx := 0; idx < headerLen; idx++ { value, err := DecodeMessageEntity(b) if err != nil { return fmt.Errorf("unable to decode draftMessage#2d65321f: field entities: %w", err) } d.Entities = append(d.Entities, value) } } if d.Flags.Has(5) { value, err := DecodeInputMedia(b) if err != nil { return fmt.Errorf("unable to decode draftMessage#2d65321f: field media: %w", err) } d.Media = value } { value, err := b.Int() if err != nil { return fmt.Errorf("unable to decode draftMessage#2d65321f: field date: %w", err) } d.Date = value } if d.Flags.Has(7) { value, err := b.Long() if err != nil { return fmt.Errorf("unable to decode draftMessage#2d65321f: field effect: %w", err) } d.Effect = value } return nil } // SetNoWebpage sets value of NoWebpage conditional field. func (d *DraftMessage) SetNoWebpage(value bool) { if value { d.Flags.Set(1) d.NoWebpage = true } else { d.Flags.Unset(1) d.NoWebpage = false } } // GetNoWebpage returns value of NoWebpage conditional field. func (d *DraftMessage) GetNoWebpage() (value bool) { if d == nil { return } return d.Flags.Has(1) } // SetInvertMedia sets value of InvertMedia conditional field. func (d *DraftMessage) SetInvertMedia(value bool) { if value { d.Flags.Set(6) d.InvertMedia = true } else { d.Flags.Unset(6) d.InvertMedia = false } } // GetInvertMedia returns value of InvertMedia conditional field. func (d *DraftMessage) GetInvertMedia() (value bool) { if d == nil { return } return d.Flags.Has(6) } // SetReplyTo sets value of ReplyTo conditional field. func (d *DraftMessage) SetReplyTo(value InputReplyToClass) { d.Flags.Set(4) d.ReplyTo = value } // GetReplyTo returns value of ReplyTo conditional field and // boolean which is true if field was set. func (d *DraftMessage) GetReplyTo() (value InputReplyToClass, ok bool) { if d == nil { return } if !d.Flags.Has(4) { return value, false } return d.ReplyTo, true } // GetMessage returns value of Message field. func (d *DraftMessage) GetMessage() (value string) { if d == nil { return } return d.Message } // SetEntities sets value of Entities conditional field. func (d *DraftMessage) SetEntities(value []MessageEntityClass) { d.Flags.Set(3) d.Entities = value } // GetEntities returns value of Entities conditional field and // boolean which is true if field was set. func (d *DraftMessage) GetEntities() (value []MessageEntityClass, ok bool) { if d == nil { return } if !d.Flags.Has(3) { return value, false } return d.Entities, true } // SetMedia sets value of Media conditional field. func (d *DraftMessage) SetMedia(value InputMediaClass) { d.Flags.Set(5) d.Media = value } // GetMedia returns value of Media conditional field and // boolean which is true if field was set. func (d *DraftMessage) GetMedia() (value InputMediaClass, ok bool) { if d == nil { return } if !d.Flags.Has(5) { return value, false } return d.Media, true } // GetDate returns value of Date field. func (d *DraftMessage) GetDate() (value int) { if d == nil { return } return d.Date } // SetEffect sets value of Effect conditional field. func (d *DraftMessage) SetEffect(value int64) { d.Flags.Set(7) d.Effect = value } // GetEffect returns value of Effect conditional field and // boolean which is true if field was set. func (d *DraftMessage) GetEffect() (value int64, ok bool) { if d == nil { return } if !d.Flags.Has(7) { return value, false } return d.Effect, true } // MapEntities returns field Entities wrapped in MessageEntityClassArray helper. func (d *DraftMessage) MapEntities() (value MessageEntityClassArray, ok bool) { if !d.Flags.Has(3) { return value, false } return MessageEntityClassArray(d.Entities), true } // DraftMessageClassName is schema name of DraftMessageClass. const DraftMessageClassName = "DraftMessage" // DraftMessageClass represents DraftMessage generic type. // // See https://core.telegram.org/type/DraftMessage for reference. // // Example: // // g, err := tg.DecodeDraftMessage(buf) // if err != nil { // panic(err) // } // switch v := g.(type) { // case *tg.DraftMessageEmpty: // draftMessageEmpty#1b0c841a // case *tg.DraftMessage: // draftMessage#2d65321f // default: panic(v) // } type DraftMessageClass interface { bin.Encoder bin.Decoder bin.BareEncoder bin.BareDecoder construct() DraftMessageClass // 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 // AsNotEmpty tries to map DraftMessageClass to DraftMessage. AsNotEmpty() (*DraftMessage, bool) } // AsNotEmpty tries to map DraftMessageEmpty to DraftMessage. func (d *DraftMessageEmpty) AsNotEmpty() (*DraftMessage, bool) { return nil, false } // AsNotEmpty tries to map DraftMessage to DraftMessage. func (d *DraftMessage) AsNotEmpty() (*DraftMessage, bool) { return d, true } // DecodeDraftMessage implements binary de-serialization for DraftMessageClass. func DecodeDraftMessage(buf *bin.Buffer) (DraftMessageClass, error) { id, err := buf.PeekID() if err != nil { return nil, err } switch id { case DraftMessageEmptyTypeID: // Decoding draftMessageEmpty#1b0c841a. v := DraftMessageEmpty{} if err := v.Decode(buf); err != nil { return nil, fmt.Errorf("unable to decode DraftMessageClass: %w", err) } return &v, nil case DraftMessageTypeID: // Decoding draftMessage#2d65321f. v := DraftMessage{} if err := v.Decode(buf); err != nil { return nil, fmt.Errorf("unable to decode DraftMessageClass: %w", err) } return &v, nil default: return nil, fmt.Errorf("unable to decode DraftMessageClass: %w", bin.NewUnexpectedID(id)) } } // DraftMessage boxes the DraftMessageClass providing a helper. type DraftMessageBox struct { DraftMessage DraftMessageClass } // Decode implements bin.Decoder for DraftMessageBox. func (b *DraftMessageBox) Decode(buf *bin.Buffer) error { if b == nil { return fmt.Errorf("unable to decode DraftMessageBox to nil") } v, err := DecodeDraftMessage(buf) if err != nil { return fmt.Errorf("unable to decode boxed value: %w", err) } b.DraftMessage = v return nil } // Encode implements bin.Encode for DraftMessageBox. func (b *DraftMessageBox) Encode(buf *bin.Buffer) error { if b == nil || b.DraftMessage == nil { return fmt.Errorf("unable to encode DraftMessageClass as nil") } return b.DraftMessage.Encode(buf) }