aboutsummaryrefslogtreecommitdiff
path: root/vendor/github.com/emersion/go-imap/imap.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/emersion/go-imap/imap.go')
-rw-r--r--vendor/github.com/emersion/go-imap/imap.go108
1 files changed, 108 insertions, 0 deletions
diff --git a/vendor/github.com/emersion/go-imap/imap.go b/vendor/github.com/emersion/go-imap/imap.go
new file mode 100644
index 0000000..837d78d
--- /dev/null
+++ b/vendor/github.com/emersion/go-imap/imap.go
@@ -0,0 +1,108 @@
+// Package imap implements IMAP4rev1 (RFC 3501).
+package imap
+
+import (
+ "errors"
+ "io"
+ "strings"
+)
+
+// A StatusItem is a mailbox status data item that can be retrieved with a
+// STATUS command. See RFC 3501 section 6.3.10.
+type StatusItem string
+
+const (
+ StatusMessages StatusItem = "MESSAGES"
+ StatusRecent StatusItem = "RECENT"
+ StatusUidNext StatusItem = "UIDNEXT"
+ StatusUidValidity StatusItem = "UIDVALIDITY"
+ StatusUnseen StatusItem = "UNSEEN"
+
+ StatusAppendLimit StatusItem = "APPENDLIMIT"
+)
+
+// A FetchItem is a message data item that can be fetched.
+type FetchItem string
+
+// List of items that can be fetched.
+const (
+ // Macros
+ FetchAll FetchItem = "ALL"
+ FetchFast FetchItem = "FAST"
+ FetchFull FetchItem = "FULL"
+
+ // Items
+ FetchBody FetchItem = "BODY"
+ FetchBodyStructure FetchItem = "BODYSTRUCTURE"
+ FetchEnvelope FetchItem = "ENVELOPE"
+ FetchFlags FetchItem = "FLAGS"
+ FetchInternalDate FetchItem = "INTERNALDATE"
+ FetchRFC822 FetchItem = "RFC822"
+ FetchRFC822Header FetchItem = "RFC822.HEADER"
+ FetchRFC822Size FetchItem = "RFC822.SIZE"
+ FetchRFC822Text FetchItem = "RFC822.TEXT"
+ FetchUid FetchItem = "UID"
+)
+
+// Expand expands the item if it's a macro.
+func (item FetchItem) Expand() []FetchItem {
+ switch item {
+ case FetchAll:
+ return []FetchItem{FetchFlags, FetchInternalDate, FetchRFC822Size, FetchEnvelope}
+ case FetchFast:
+ return []FetchItem{FetchFlags, FetchInternalDate, FetchRFC822Size}
+ case FetchFull:
+ return []FetchItem{FetchFlags, FetchInternalDate, FetchRFC822Size, FetchEnvelope, FetchBody}
+ default:
+ return []FetchItem{item}
+ }
+}
+
+// FlagsOp is an operation that will be applied on message flags.
+type FlagsOp string
+
+const (
+ // SetFlags replaces existing flags by new ones.
+ SetFlags FlagsOp = "FLAGS"
+ // AddFlags adds new flags.
+ AddFlags = "+FLAGS"
+ // RemoveFlags removes existing flags.
+ RemoveFlags = "-FLAGS"
+)
+
+// silentOp can be appended to a FlagsOp to prevent the operation from
+// triggering unilateral message updates.
+const silentOp = ".SILENT"
+
+// A StoreItem is a message data item that can be updated.
+type StoreItem string
+
+// FormatFlagsOp returns the StoreItem that executes the flags operation op.
+func FormatFlagsOp(op FlagsOp, silent bool) StoreItem {
+ s := string(op)
+ if silent {
+ s += silentOp
+ }
+ return StoreItem(s)
+}
+
+// ParseFlagsOp parses a flags operation from StoreItem.
+func ParseFlagsOp(item StoreItem) (op FlagsOp, silent bool, err error) {
+ itemStr := string(item)
+ silent = strings.HasSuffix(itemStr, silentOp)
+ if silent {
+ itemStr = strings.TrimSuffix(itemStr, silentOp)
+ }
+ op = FlagsOp(itemStr)
+
+ if op != SetFlags && op != AddFlags && op != RemoveFlags {
+ err = errors.New("Unsupported STORE operation")
+ }
+ return
+}
+
+// CharsetReader, if non-nil, defines a function to generate charset-conversion
+// readers, converting from the provided charset into UTF-8. Charsets are always
+// lower-case. utf-8 and us-ascii charsets are handled by default. One of the
+// the CharsetReader's result values must be non-nil.
+var CharsetReader func(charset string, r io.Reader) (io.Reader, error)