NOTMUCH_FORMAT_RAW
};
+static const notmuch_show_format_t *formatters[] = {
+ [NOTMUCH_FORMAT_JSON] = &format_json,
+ [NOTMUCH_FORMAT_SEXP] = &format_sexp,
+ [NOTMUCH_FORMAT_TEXT] = &format_text,
+ [NOTMUCH_FORMAT_MBOX] = &format_mbox,
+ [NOTMUCH_FORMAT_RAW] = &format_raw,
+};
+
enum {
ENTIRE_THREAD_DEFAULT,
ENTIRE_THREAD_TRUE,
notmuch_query_t *query;
char *query_string;
int opt_index, ret;
- const notmuch_show_format_t *format = &format_text;
+ const notmuch_show_format_t *formatter;
sprinter_t *sprinter;
notmuch_show_params_t params = {
.part = -1,
},
.include_html = FALSE
};
- int format_sel = NOTMUCH_FORMAT_NOT_SPECIFIED;
+ int format = NOTMUCH_FORMAT_NOT_SPECIFIED;
int exclude = EXCLUDE_TRUE;
int entire_thread = ENTIRE_THREAD_DEFAULT;
notmuch_bool_t single_message;
notmuch_opt_desc_t options[] = {
- { NOTMUCH_OPT_KEYWORD, &format_sel, "format", 'f',
+ { NOTMUCH_OPT_KEYWORD, &format, "format", 'f',
(notmuch_keyword_t []){ { "json", NOTMUCH_FORMAT_JSON },
{ "text", NOTMUCH_FORMAT_TEXT },
{ "sexp", NOTMUCH_FORMAT_SEXP },
/* specifying a part implies single message display */
single_message = params.part >= 0;
- if (format_sel == NOTMUCH_FORMAT_NOT_SPECIFIED) {
+ if (format == NOTMUCH_FORMAT_NOT_SPECIFIED) {
/* if part was requested and format was not specified, use format=raw */
if (params.part >= 0)
- format_sel = NOTMUCH_FORMAT_RAW;
+ format = NOTMUCH_FORMAT_RAW;
else
- format_sel = NOTMUCH_FORMAT_TEXT;
+ format = NOTMUCH_FORMAT_TEXT;
}
- switch (format_sel) {
- case NOTMUCH_FORMAT_JSON:
- format = &format_json;
- break;
- case NOTMUCH_FORMAT_TEXT:
- format = &format_text;
- break;
- case NOTMUCH_FORMAT_SEXP:
- format = &format_sexp;
- break;
- case NOTMUCH_FORMAT_MBOX:
+ if (format == NOTMUCH_FORMAT_MBOX) {
if (params.part > 0) {
fprintf (stderr, "Error: specifying parts is incompatible with mbox output format.\n");
return EXIT_FAILURE;
}
-
- format = &format_mbox;
- break;
- case NOTMUCH_FORMAT_RAW:
- format = &format_raw;
+ } else if (format == NOTMUCH_FORMAT_RAW) {
/* raw format only supports single message display */
single_message = TRUE;
- params.raw = TRUE;
- break;
}
notmuch_exit_if_unsupported_format ();
/* Default is entire-thread = FALSE except for format=json and
* format=sexp. */
if (entire_thread == ENTIRE_THREAD_DEFAULT) {
- if (format == &format_json || format == &format_sexp)
+ if (format == NOTMUCH_FORMAT_JSON || format == NOTMUCH_FORMAT_SEXP)
entire_thread = ENTIRE_THREAD_TRUE;
else
entire_thread = ENTIRE_THREAD_FALSE;
fprintf (stderr, "Warning: --body=false is incompatible with --part > 0. Disabling.\n");
params.output_body = TRUE;
} else {
- if (format != &format_json && format != &format_sexp)
+ if (format != NOTMUCH_FORMAT_JSON && format != NOTMUCH_FORMAT_SEXP)
fprintf (stderr,
"Warning: --body=false only implemented for format=json and format=sexp\n");
}
}
if (params.include_html &&
- (format_sel != NOTMUCH_FORMAT_JSON && format_sel != NOTMUCH_FORMAT_SEXP)) {
+ (format != NOTMUCH_FORMAT_JSON && format != NOTMUCH_FORMAT_SEXP)) {
fprintf (stderr, "Warning: --include-html only implemented for format=json and format=sexp\n");
}
}
/* Create structure printer. */
- sprinter = format->new_sprinter(config, stdout);
+ formatter = formatters[format];
+ sprinter = formatter->new_sprinter(config, stdout);
/* If a single message is requested we do not use search_excludes. */
if (single_message) {
- ret = do_show_single (config, query, format, sprinter, ¶ms);
+ ret = do_show_single (config, query, formatter, sprinter, ¶ms);
} else {
/* We always apply set the exclude flag. The
* exclude=true|false option controls whether or not we return
params.omit_excluded = FALSE;
}
- ret = do_show (config, query, format, sprinter, ¶ms);
+ ret = do_show (config, query, formatter, sprinter, ¶ms);
}
notmuch_crypto_cleanup (¶ms.crypto);