diff options
Diffstat (limited to 'src/setting.hpp')
| -rw-r--r-- | src/setting.hpp | 134 |
1 files changed, 66 insertions, 68 deletions
diff --git a/src/setting.hpp b/src/setting.hpp index 6e10a8a..997109a 100644 --- a/src/setting.hpp +++ b/src/setting.hpp @@ -23,46 +23,44 @@ namespace wanda { + struct setting; -struct setting; - -/** - * @brief A convenience type to represent setting keys - */ -using key = type_wrapper<std::string, struct KeyTag>; + /** + * @brief A convenience type to represent setting keys + */ + using key = type_wrapper<std::string, struct KeyTag>; -namespace literals -{ -/** - * @brief UDL to create setting keys - */ -key operator""_key(char const *str, std::size_t len); + namespace literals + { + /** + * @brief UDL to create setting keys + */ + key operator""_key(char const * str, std::size_t len); -/** - * @brief UDL to create setting schemas - */ -std::optional<setting> operator""_setting(char const *str, std::size_t lent); -} // namespace literals + /** + * @brief UDL to create setting schemas + */ + std::optional<setting> operator""_setting(char const * str, std::size_t lent); + } // namespace literals -/** - * @brief A simple wrapper for GSettings Schemas - */ -struct setting -{ - struct entry + /** + * @brief A simple wrapper for GSettings Schemas + */ + struct setting { + struct entry + { + using value_type = std::variant<std::monostate, bool, std::int32_t, std::int64_t, std::uint32_t, std::uint64_t, double, std::string, std::vector<std::string>>; - using value_type = std::variant<std::monostate, bool, std::int32_t, std::int64_t, std::uint32_t, std::uint64_t, double, std::string, std::vector<std::string>>; - - value_type operator*() const; + value_type operator*() const; - template <typename Type> - bool operator=(Type value) - { - struct setting_applier + template<typename Type> + bool operator=(Type value) { - setting_applier(GSettings *setting, gchar const *key, Type value) noexcept - : m_result{[&] { + struct setting_applier + { + setting_applier(GSettings * setting, gchar const * key, Type value) noexcept + : m_result{[&] { if constexpr (std::is_same_v<Type, bool>) { return g_settings_set_boolean(setting, key, value); @@ -94,7 +92,7 @@ struct setting else if constexpr (std::is_same_v<Type, std::vector<std::string>>) { auto temp = std::vector<gchar const *>{value.size() + 1}; - std::transform(value.begin(), value.end(), temp.begin(), [](auto const &str) { return str.c_str(); }); + std::transform(value.begin(), value.end(), temp.begin(), [](auto const & str) { return str.c_str(); }); return g_settings_set_strv(setting, key, temp.data()); } else @@ -102,53 +100,53 @@ struct setting static_assert(deferred_failure<Type>{}, "Invalid argument type!"); } }()} - { - } + { + } - ~setting_applier() - { - g_settings_sync(); - } + ~setting_applier() + { + g_settings_sync(); + } - operator bool() const - { - return m_result; - } + operator bool() const + { + return m_result; + } - private: - gboolean const m_result; - }; + private: + gboolean const m_result; + }; - return setting_applier{m_settings.get(), m_key.get().c_str(), value}; - } + return setting_applier{m_settings.get(), m_key.get().c_str(), value}; + } - private: - entry(setting const &schema, key key); + private: + entry(setting const & schema, key key); - std::unique_ptr<GSettings, decltype(&g_object_unref)> m_settings; + std::unique_ptr<GSettings, decltype(&g_object_unref)> m_settings; - key m_key; + key m_key; - friend setting; - }; + friend setting; + }; - /** - * @brief Get the entry for the given key - * - * @return An <code>std::optional</code> wrapping the entry associated with - * the given key, or an empty <code>std::optional</code> if the desired key - * does not exist in the setting's schema. - */ - std::optional<entry> operator[](key key) const; + /** + * @brief Get the entry for the given key + * + * @return An <code>std::optional</code> wrapping the entry associated with + * the given key, or an empty <code>std::optional</code> if the desired key + * does not exist in the setting's schema. + */ + std::optional<entry> operator[](key key) const; -private: - explicit setting(GSettingsSchema *schema); + private: + explicit setting(GSettingsSchema * schema); - std::unique_ptr<GSettingsSchema, decltype(&g_settings_schema_unref)> m_schema; + std::unique_ptr<GSettingsSchema, decltype(&g_settings_schema_unref)> m_schema; - friend std::optional<setting> literals::operator""_setting(char const *, std::size_t); -}; + friend std::optional<setting> literals::operator""_setting(char const *, std::size_t); + }; -} // namespace wanda +} // namespace wanda #endif
\ No newline at end of file |
