buildSearchQueryString reconstructs a search query string from a parsed Query. This is needed because the API expects the raw query string.
(q *search.Query)
| 763 | // buildSearchQueryString reconstructs a search query string from a parsed Query. |
| 764 | // This is needed because the API expects the raw query string. |
| 765 | func buildSearchQueryString(q *search.Query) string { |
| 766 | if q == nil { |
| 767 | return "" |
| 768 | } |
| 769 | |
| 770 | var parts []string |
| 771 | |
| 772 | parts = append(parts, q.TextTerms...) |
| 773 | for _, addr := range q.FromAddrs { |
| 774 | parts = append(parts, "from:"+addr) |
| 775 | } |
| 776 | for _, addr := range q.ToAddrs { |
| 777 | parts = append(parts, "to:"+addr) |
| 778 | } |
| 779 | for _, addr := range q.CcAddrs { |
| 780 | parts = append(parts, "cc:"+addr) |
| 781 | } |
| 782 | for _, addr := range q.BccAddrs { |
| 783 | parts = append(parts, "bcc:"+addr) |
| 784 | } |
| 785 | for _, term := range q.SubjectTerms { |
| 786 | parts = append(parts, "subject:"+term) |
| 787 | } |
| 788 | for _, label := range q.Labels { |
| 789 | parts = append(parts, "label:"+label) |
| 790 | } |
| 791 | if q.HasAttachment != nil && *q.HasAttachment { |
| 792 | parts = append(parts, "has:attachment") |
| 793 | } |
| 794 | if q.BeforeDate != nil { |
| 795 | parts = append(parts, "before:"+q.BeforeDate.Format("2006-01-02")) |
| 796 | } |
| 797 | if q.AfterDate != nil { |
| 798 | parts = append(parts, "after:"+q.AfterDate.Format("2006-01-02")) |
| 799 | } |
| 800 | if q.LargerThan != nil { |
| 801 | parts = append(parts, fmt.Sprintf("larger:%d", *q.LargerThan)) |
| 802 | } |
| 803 | if q.SmallerThan != nil { |
| 804 | parts = append(parts, fmt.Sprintf("smaller:%d", *q.SmallerThan)) |
| 805 | } |
| 806 | |
| 807 | var result strings.Builder |
| 808 | for i, part := range parts { |
| 809 | if i > 0 { |
| 810 | result.WriteString(" ") |
| 811 | } |
| 812 | result.WriteString(part) |
| 813 | } |
| 814 | return result.String() |
| 815 | } |
| 816 | |
| 817 | // readBody reads the response body into a byte slice. |
| 818 | func readBody(resp *http.Response) ([]byte, error) { |
no test coverage detected