diff --git a/libgnucash/app-utils/gnc-option.hpp b/libgnucash/app-utils/gnc-option.hpp index 1a91c6138c..15b78876a7 100644 --- a/libgnucash/app-utils/gnc-option.hpp +++ b/libgnucash/app-utils/gnc-option.hpp @@ -198,6 +198,7 @@ class GncOption public: template GncOption(OptionType option) : m_option{option} {} + template ValueType get_value() const { return boost::apply_visitor(GetValueVisitor(), m_option); @@ -218,6 +219,22 @@ public: { boost::apply_visitor(SetValueVisitor(value), m_option); } + const std::string& get_section() const + { + return boost::apply_visitor(GetSectionVisitor(), m_option); + } + const std::string& get_name() const + { + return boost::apply_visitor(GetNameVisitor(), m_option); + } + const std::string& get_key() const + { + return boost::apply_visitor(GetKeyVisitor(), m_option); + } + const std::string& get_docstring() const + { + return boost::apply_visitor(GetDocstringVisitor(), m_option); + } private: template struct GetValueVisitor : public boost::static_visitor @@ -277,6 +294,35 @@ private: return option.get_scm_default_value(); } }; + struct GetSectionVisitor : public boost::static_visitor + { + template + const std::string& operator()(OptionType& option) const { + return option.m_section; + } + }; + struct GetNameVisitor : public boost::static_visitor + { + template + const std::string& operator()(OptionType& option) const { + return option.m_name; + } + }; + struct GetKeyVisitor : public boost::static_visitor + { + template + const std::string& operator()(OptionType& option) const { + return option.m_sort_tag; + } + }; + struct GetDocstringVisitor : + public boost::static_visitor + { + template + const std::string& operator()(OptionType& option) const { + return option.m_doc_string; + } + }; GncOptionVariant m_option; }; diff --git a/libgnucash/app-utils/test/gtest-gnc-option.cpp b/libgnucash/app-utils/test/gtest-gnc-option.cpp index be9b3b5603..b4a7f187c4 100644 --- a/libgnucash/app-utils/test/gtest-gnc-option.cpp +++ b/libgnucash/app-utils/test/gtest-gnc-option.cpp @@ -42,6 +42,16 @@ TEST(GncOption, test_text_ctor) }); } +TEST(GncOption, test_string_classifier_getters) +{ + auto option = gnc_make_string_option("foo", "bar", "baz", "Phony Option", + std::string{"waldo"}); + EXPECT_STREQ("foo", option.get_section().c_str()); + EXPECT_STREQ("bar", option.get_name().c_str()); + EXPECT_STREQ("baz", option.get_key().c_str()); + EXPECT_STREQ("Phony Option", option.get_docstring().c_str()); +} + TEST(GncOption, test_string_default_value) { auto option = gnc_make_string_option("foo", "bar", "baz", "Phony Option",