]> git.notmuchmail.org Git - notmuch/blobdiff - command-line-arguments.h
cli: use designated initializers for opt desc
[notmuch] / command-line-arguments.h
index 4c4d240e10dc17a4e3a966b839a7013c6d40a360..ff51abceb117dbac79da53c728c8555d56d37263 100644 (file)
@@ -3,17 +3,6 @@
 
 #include "notmuch.h"
 
-enum notmuch_opt_type {
-    NOTMUCH_OPT_END = 0,
-    NOTMUCH_OPT_INHERIT,       /* another options table */
-    NOTMUCH_OPT_BOOLEAN,       /* --verbose              */
-    NOTMUCH_OPT_INT,           /* --frob=8               */
-    NOTMUCH_OPT_KEYWORD,       /* --format=raw|json|text */
-    NOTMUCH_OPT_KEYWORD_FLAGS, /* the above with values OR'd together */
-    NOTMUCH_OPT_STRING,                /* --file=/tmp/gnarf.txt  */
-    NOTMUCH_OPT_POSITION       /* notmuch dump pos_arg   */
-};
-
 /*
  * Describe one of the possibilities for a keyword option
  * 'value' will be copied to the output variable
@@ -24,22 +13,21 @@ typedef struct notmuch_keyword {
     int value;
 } notmuch_keyword_t;
 
-/*
- * Describe one option.
- *
- * First two parameters are mandatory.
- *
- * name is mandatory _except_ for positional arguments.
- *
- * arg_id is currently unused, but could define short arguments.
- *
- * keywords is a (possibly NULL) pointer to an array of keywords
- */
+/* Describe one option. */
 typedef struct notmuch_opt_desc {
-    enum notmuch_opt_type opt_type;
-    void *output_var;
+    /* One and only one of opt_* must be set. */
+    const struct notmuch_opt_desc *opt_inherit;
+    notmuch_bool_t *opt_bool;
+    int *opt_int;
+    int *opt_keyword;
+    int *opt_flags;
+    const char **opt_string;
+    const char **opt_position;
+
+    /* Must be set except for opt_inherit and opt_position. */
     const char *name;
-    int  arg_id;
+
+    /* Must be set for opt_keyword and opt_flags. */
     const struct notmuch_keyword *keywords;
 } notmuch_opt_desc_t;