summaryrefslogtreecommitdiffstats
path: root/src/lib-storage/mail-search-build.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib-storage/mail-search-build.h')
-rw-r--r--src/lib-storage/mail-search-build.h59
1 files changed, 59 insertions, 0 deletions
diff --git a/src/lib-storage/mail-search-build.h b/src/lib-storage/mail-search-build.h
new file mode 100644
index 0000000..7bba1ce
--- /dev/null
+++ b/src/lib-storage/mail-search-build.h
@@ -0,0 +1,59 @@
+#ifndef MAIL_SEARCH_BUILD_H
+#define MAIL_SEARCH_BUILD_H
+
+#include "mail-search.h"
+#include "mail-search-register.h"
+
+struct mailbox;
+
+struct mail_search_build_context {
+ pool_t pool;
+ struct mail_search_args *args;
+ struct mail_search_register *reg;
+ struct mail_search_parser *parser;
+ const char *charset;
+
+ struct mail_search_arg *parent;
+ /* error is either here or in parser */
+ const char *_error;
+ bool charset_checked;
+ bool unknown_charset;
+};
+
+/* Start building a new search query. Use mail_search_args_unref() to
+ free it. */
+struct mail_search_args *mail_search_build_init(void);
+
+/* Convert IMAP SEARCH command compatible parameters to mail_search_args.
+ If charset is unknown, it's changed to NULL. */
+int mail_search_build(struct mail_search_register *reg,
+ struct mail_search_parser *parser, const char **charset,
+ struct mail_search_args **args_r,
+ const char **client_error_r);
+
+/* Add new search arg with given type. */
+struct mail_search_arg *
+mail_search_build_add(struct mail_search_args *args,
+ enum mail_search_arg_type type);
+/* Add SEARCH_ALL to search args. */
+void mail_search_build_add_all(struct mail_search_args *args);
+/* Add a sequence set to search args. */
+void mail_search_build_add_seqset(struct mail_search_args *args,
+ uint32_t seq1, uint32_t seq2);
+
+/* Convert input string into UTF-8 */
+int mail_search_build_get_utf8(struct mail_search_build_context *ctx,
+ const char *input, const char **output_r);
+
+struct mail_search_arg *
+mail_search_build_new(struct mail_search_build_context *ctx,
+ enum mail_search_arg_type type);
+struct mail_search_arg *
+mail_search_build_str(struct mail_search_build_context *ctx,
+ enum mail_search_arg_type type);
+/* Returns 0 if arg is returned, -1 if error. */
+int mail_search_build_key(struct mail_search_build_context *ctx,
+ struct mail_search_arg *parent,
+ struct mail_search_arg **arg_r);
+
+#endif