package store import ( "net/mail" ) type MessageInterface interface { CreateMessage(Message) error FindMessages(string, string) ([]Message, error) } type Message struct { ID string Username string `storm:"index"` // FK accounts.username Mailbox string `storm:"index"` // The mailbox, e.g. `INBOX` or `Foo/Bar` Header mail.Header Body []byte } func (c *concrete) CreateMessage(message Message) error { return c.storm.Save(&message) } func (c *concrete) FindMessages(username string, mailbox string) ([]Message, error) { var messages []Message var out []Message err := c.storm.Find("Username", username, &messages) if err != nil { return nil, err } // FIXME: I cannot storm, so I just filter out all non-mailbox messages for _, message := range messages { if message.Mailbox == mailbox { out = append(out, message) } } return out, nil }