aboutsummaryrefslogtreecommitdiff
path: root/vendor/github.com/emersion/go-imap/responses/search.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/emersion/go-imap/responses/search.go')
-rw-r--r--vendor/github.com/emersion/go-imap/responses/search.go41
1 files changed, 41 insertions, 0 deletions
diff --git a/vendor/github.com/emersion/go-imap/responses/search.go b/vendor/github.com/emersion/go-imap/responses/search.go
new file mode 100644
index 0000000..028dbc7
--- /dev/null
+++ b/vendor/github.com/emersion/go-imap/responses/search.go
@@ -0,0 +1,41 @@
+package responses
+
+import (
+ "github.com/emersion/go-imap"
+)
+
+const searchName = "SEARCH"
+
+// A SEARCH response.
+// See RFC 3501 section 7.2.5
+type Search struct {
+ Ids []uint32
+}
+
+func (r *Search) Handle(resp imap.Resp) error {
+ name, fields, ok := imap.ParseNamedResp(resp)
+ if !ok || name != searchName {
+ return ErrUnhandled
+ }
+
+ r.Ids = make([]uint32, len(fields))
+ for i, f := range fields {
+ if id, err := imap.ParseNumber(f); err != nil {
+ return err
+ } else {
+ r.Ids[i] = id
+ }
+ }
+
+ return nil
+}
+
+func (r *Search) WriteTo(w *imap.Writer) (err error) {
+ fields := []interface{}{imap.RawString(searchName)}
+ for _, id := range r.Ids {
+ fields = append(fields, id)
+ }
+
+ resp := imap.NewUntaggedResp(fields)
+ return resp.WriteTo(w)
+}