message.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package ticket
  2. import (
  3. "github.com/ClickHouse/clickhouse-go/v2/lib/driver"
  4. "github.com/kelindar/bitmap"
  5. "google.golang.org/protobuf/types/known/timestamppb"
  6. "time"
  7. )
  8. func (x *Message) Scan(row driver.Rows) error {
  9. var (
  10. typ int32
  11. date time.Time
  12. aIds []string
  13. aFilenames []string
  14. aTypes []string
  15. aEncodings []string
  16. aBuckets []string
  17. aKeys []string
  18. err error
  19. )
  20. if err = row.Scan(
  21. &x.MessageId,
  22. &x.TicketId,
  23. &x.Role,
  24. &typ,
  25. &x.Content,
  26. &date,
  27. &x.Raw,
  28. &x.Flags,
  29. &x.Headers,
  30. &x.Meta,
  31. &aIds, &aFilenames, &aTypes, &aEncodings, &aBuckets, &aKeys,
  32. ); err != nil {
  33. return err
  34. }
  35. x.Type = Message_Type(typ)
  36. x.Date = timestamppb.New(date)
  37. x.Attachments = make([]*Attachment, len(aIds))
  38. for i := range aIds {
  39. x.Attachments[i] = &Attachment{
  40. Id: aIds[i],
  41. Filename: aFilenames[i],
  42. ContentType: aTypes[i],
  43. ContentEncoding: aEncodings[i],
  44. Bucket: aBuckets[i],
  45. Key: aKeys[i],
  46. }
  47. }
  48. return nil
  49. }
  50. func (x *Message) SetFlags(flags ...MessageFlag) {
  51. mask := bitmap.FromBytes(x.Flags)
  52. for i := range flags {
  53. if MessageFlag_unknown_message_flag == flags[i] {
  54. continue
  55. }
  56. mask.Set(uint32(flags[i]))
  57. }
  58. x.Flags = mask.ToBytes()
  59. }
  60. func (x *Message) RemoveFlags(flags ...MessageFlag) {
  61. mask := bitmap.FromBytes(x.Flags)
  62. for i := range flags {
  63. if MessageFlag_unknown_message_flag == flags[i] {
  64. continue
  65. }
  66. mask.Remove(uint32(flags[i]))
  67. }
  68. x.Flags = mask.ToBytes()
  69. }
  70. func (x *Message) HasFlag(flag MessageFlag) bool {
  71. return bitmap.
  72. FromBytes(x.Flags).
  73. Contains(uint32(flag))
  74. }