package mailq import ( "errors" "fmt" "time" ) type MailQ struct { NumTotal int NumActive int NumHold int NumDeferred int Entries []QEntry } type QEntry struct { Id string Status string Date time.Time Size int Sender string Recipients []string Reason string } func NewQueue() MailQ { return MailQ{} } func (q MailQ) AddEntry(entry QEntry) { q.NumTotal += 1 if entry.Status == "active" { q.NumActive += 1 } else if entry.Status == "deferred" { q.NumDeferred += 1 } else if entry.Status == "hold" { q.NumHold += 1 } q.Entries = append(q.Entries, entry) } func (q MailQ) RemoveEntry(entry QEntry) { var currentIndex int var currentEntry QEntry for currentIndex, currentEntry = range q.Entries { if currentEntry.Id == entry.Id { break } } q.Entries = append(q.Entries[:currentIndex], q.Entries[currentIndex+1:]...) } func (q MailQ) GetMessageById(id string) (QEntry, error) { for _, entry := range q.Entries { if entry.Id == id { return entry, nil } } return QEntry{}, errors.New(fmt.Sprintf("No message with id '%s' available!", id)) }