aboutsummaryrefslogtreecommitdiff
path: root/vendor/github.com/emersion/go-imap/responses/expunge.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/emersion/go-imap/responses/expunge.go')
-rw-r--r--vendor/github.com/emersion/go-imap/responses/expunge.go43
1 files changed, 43 insertions, 0 deletions
diff --git a/vendor/github.com/emersion/go-imap/responses/expunge.go b/vendor/github.com/emersion/go-imap/responses/expunge.go
new file mode 100644
index 0000000..bce3bf1
--- /dev/null
+++ b/vendor/github.com/emersion/go-imap/responses/expunge.go
@@ -0,0 +1,43 @@
+package responses
+
+import (
+ "github.com/emersion/go-imap"
+)
+
+const expungeName = "EXPUNGE"
+
+// An EXPUNGE response.
+// See RFC 3501 section 7.4.1
+type Expunge struct {
+ SeqNums chan uint32
+}
+
+func (r *Expunge) Handle(resp imap.Resp) error {
+ name, fields, ok := imap.ParseNamedResp(resp)
+ if !ok || name != expungeName {
+ return ErrUnhandled
+ }
+
+ if len(fields) == 0 {
+ return errNotEnoughFields
+ }
+
+ seqNum, err := imap.ParseNumber(fields[0])
+ if err != nil {
+ return err
+ }
+
+ r.SeqNums <- seqNum
+ return nil
+}
+
+func (r *Expunge) WriteTo(w *imap.Writer) error {
+ for seqNum := range r.SeqNums {
+ resp := imap.NewUntaggedResp([]interface{}{seqNum, imap.RawString(expungeName)})
+ if err := resp.WriteTo(w); err != nil {
+ return err
+ }
+ }
+
+ return nil
+}