package model import ( "strings" "time" "github.com/rs/zerolog" ) type Conversation struct { Date time.Time `json:"date"` Participants []string `json:"participantDisplayNames"` DisplayName *string `json:"displayName,omitempty"` // Optional UnreadCount int `json:"unreadCount"` LastMessagePreview string `json:"lastMessagePreview"` LastMessage Message `json:"lastMessage"` Guid string `json:"guid"` } func (c *Conversation) GetDisplayName() string { if c.DisplayName == nil { return strings.Join(c.Participants, ",") } return *c.DisplayName } func (c *Conversation) MarshalZerologObject(e *zerolog.Event) { e.Str("guid", c.Guid) e.Time("date", c.Date) e.Int("unreadCount", c.UnreadCount) e.Str("lastMessagePreview", c.LastMessagePreview) e.Strs("participants", c.Participants) if c.DisplayName != nil { e.Str("displayName", *c.DisplayName) } } func (c *Conversation) Equal(o *Conversation) bool { if c.Guid != o.Guid { return false } if !c.Date.Equal(o.Date) { return false } if c.UnreadCount != o.UnreadCount { return false } if c.LastMessagePreview != o.LastMessagePreview { return false } if len(c.Participants) != len(o.Participants) { return false } for i, p := range c.Participants { if p != o.Participants[i] { return false } } if c.DisplayName != nil && o.DisplayName != nil { if *c.DisplayName != *o.DisplayName { return false } } return true }