diff options
Diffstat (limited to 'src/lib-storage/mail-search-build.h')
-rw-r--r-- | src/lib-storage/mail-search-build.h | 59 |
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 |