unofficial mirror of notmuch@notmuchmail.org
 help / color / mirror / code / Atom feed
From: David Bremner <david@tethera.net>
To: notmuch@notmuchmail.org
Cc: David Bremner <david@tethera.net>
Subject: [PATCH 13/24] lib: add notmuch_config_get_bool
Date: Thu, 24 Dec 2020 20:42:17 -0400	[thread overview]
Message-ID: <20201225004228.647328-14-david@tethera.net> (raw)
In-Reply-To: <20201225004228.647328-1-david@tethera.net>

Booleans have no out of band values, so return a status for errors.
---
 lib/config.cc | 26 ++++++++++++++++++++++++++
 lib/notmuch.h | 19 +++++++++++++++++++
 2 files changed, 45 insertions(+)

diff --git a/lib/config.cc b/lib/config.cc
index 4500fe1a..17af4b46 100644
--- a/lib/config.cc
+++ b/lib/config.cc
@@ -334,6 +334,32 @@ _notmuch_config_load_from_file (notmuch_database_t *notmuch,
     return status;
 }
 
+notmuch_status_t
+notmuch_config_get_bool (notmuch_database_t *notmuch, notmuch_config_key_t key, notmuch_bool_t *val)
+{
+    const char *key_string, *val_string;
+
+    key_string = _notmuch_config_key_to_string (key);
+    if (! key_string) {
+	return NOTMUCH_STATUS_ILLEGAL_ARGUMENT;
+    }
+
+    val_string = _notmuch_string_map_get (notmuch->config, key_string);
+    if (! val_string) {
+	*val = FALSE;
+	return NOTMUCH_STATUS_SUCCESS;
+    }
+
+    if (strcase_equal (val_string, "false") || strcase_equal (val_string, "no"))
+	*val = FALSE;
+    else if (strcase_equal (val_string, "true") || strcase_equal (val_string, "yes"))
+	*val = TRUE;
+    else
+	return NOTMUCH_STATUS_ILLEGAL_ARGUMENT;
+
+    return NOTMUCH_STATUS_SUCCESS;
+}
+
 static const char *
 _notmuch_config_key_to_string (notmuch_config_key_t key) {
     switch (key) {
diff --git a/lib/notmuch.h b/lib/notmuch.h
index 3bd4aa54..b3346eb7 100644
--- a/lib/notmuch.h
+++ b/lib/notmuch.h
@@ -2518,6 +2518,25 @@ notmuch_config_values_move_to_next (notmuch_config_values_t *values);
 void
 notmuch_config_values_destroy (notmuch_config_values_t *values);
 
+/**
+ * get a configuration value from an open database as Boolean
+ *
+ * This value reflects all configuration information given at the time
+ * the database was opened.
+ *
+ * @param[in] notmuch database
+ * @param[in] key configuration key
+ * @param[out] val configuration value, converted to Boolean
+ *
+ * @since libnotmuch 5.4 (notmuch 0.32)
+ *
+ * @retval #NOTMUCH_STATUS_ILLEGAL_ARGUMENT if either key is unknown
+ * or the corresponding value does not convert to Boolean.
+ */
+notmuch_status_t
+notmuch_config_get_bool (notmuch_database_t *notmuch,
+			 notmuch_config_key_t key,
+			 notmuch_bool_t *val);
 /**
  * get the current default indexing options for a given database.
  *
-- 
2.29.2

  parent reply	other threads:[~2020-12-25  0:44 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-25  0:42 v2 Merged Config David Bremner
2020-12-25  0:42 ` [PATCH 01/24] lib: add _notmuch_string_map_set David Bremner
2020-12-25  0:42 ` [PATCH 02/24] lib: cache configuration information from database David Bremner
2020-12-25  0:42 ` [PATCH 03/24] lib: add stub for notmuch_database_open_with_config David Bremner
2020-12-26 13:13   ` David Bremner
2020-12-25  0:42 ` [PATCH 04/24] lib/open: add support for config profiles and default locations David Bremner
2020-12-25  0:42 ` [PATCH 05/24] CLI: generalize notmuch_config_mode_t David Bremner
2020-12-25  0:42 ` [PATCH 06/24] lib/config: add notmuch_config_key_{get,set} David Bremner
2020-12-25  0:42 ` [PATCH 07/24] lib/open: load default values for known configuration keys David Bremner
2020-12-25  0:42 ` [PATCH 08/24] CLI: add (unused) database argument to subcommands David Bremner
2020-12-25  0:42 ` [PATCH 09/24] util: add strsplit_len: simplified strtok with delimiter escaping David Bremner
2020-12-25  0:42 ` [PATCH 10/24] lib/config: add config values iterator David Bremner
2020-12-25  0:42 ` [PATCH 11/24] CLI/count: switch to new configuration framework David Bremner
2020-12-25  0:42 ` [PATCH 12/24] cli/dump: convert to new config framework David Bremner
2020-12-25  0:42 ` David Bremner [this message]
2020-12-25  0:42 ` [PATCH 14/24] CLI/restore: " David Bremner
2020-12-25  0:42 ` [PATCH 15/24] CLI/insert: " David Bremner
2020-12-25  0:42 ` [PATCH 16/24] cli/reindex: convert " David Bremner
2020-12-25  0:42 ` [PATCH 17/24] CLI/reply: convert to " David Bremner
2020-12-25  0:42 ` [PATCH 18/24] CLI/{search,address}: convert to new configuration framework David Bremner
2020-12-25  0:42 ` [PATCH 19/24] cli/config: add accessor for config file name David Bremner
2020-12-25  0:42 ` [PATCH 20/24] CLI/show: mostly switch show to new config framework David Bremner
2020-12-25  0:42 ` [PATCH 21/24] cli/tag: convert " David Bremner
2020-12-25  0:42 ` [PATCH 22/24] lib/config: add _notmuch_config_cache David Bremner
2020-12-25  0:42 ` [PATCH 23/24] lib: split notmuch_database_compact David Bremner
2020-12-25  0:42 ` [PATCH 24/24] cli/compact: convert to new configuration framework David Bremner

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://notmuchmail.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20201225004228.647328-14-david@tethera.net \
    --to=david@tethera.net \
    --cc=notmuch@notmuchmail.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://yhetil.org/notmuch.git/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).