package memory import ( "errors" "github.com/emersion/go-imap/backend" ) type User struct { username string password string mailboxes map[string]*Mailbox } func (u *User) Username() string { return u.username } func (u *User) ListMailboxes(subscribed bool) (mailboxes []backend.Mailbox, err error) { for _, mailbox := range u.mailboxes { if subscribed && !mailbox.Subscribed { continue } mailboxes = append(mailboxes, mailbox) } return } func (u *User) GetMailbox(name string) (mailbox backend.Mailbox, err error) { mailbox, ok := u.mailboxes[name] if !ok { err = errors.New("No such mailbox") } return } func (u *User) CreateMailbox(name string) error { if _, ok := u.mailboxes[name]; ok { return errors.New("Mailbox already exists") } u.mailboxes[name] = &Mailbox{name: name, user: u} return nil } func (u *User) DeleteMailbox(name string) error { if name == "INBOX" { return errors.New("Cannot delete INBOX") } if _, ok := u.mailboxes[name]; !ok { return errors.New("No such mailbox") } delete(u.mailboxes, name) return nil } func (u *User) RenameMailbox(existingName, newName string) error { mbox, ok := u.mailboxes[existingName] if !ok { return errors.New("No such mailbox") } u.mailboxes[newName] = &Mailbox{ name: newName, Messages: mbox.Messages, user: u, } mbox.Messages = nil if existingName != "INBOX" { delete(u.mailboxes, existingName) } return nil } func (u *User) Logout() error { return nil }