diff options
Diffstat (limited to 'nihil.config/string.ccm')
| -rw-r--r-- | nihil.config/string.ccm | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/nihil.config/string.ccm b/nihil.config/string.ccm new file mode 100644 index 0000000..f3273c3 --- /dev/null +++ b/nihil.config/string.ccm @@ -0,0 +1,54 @@ +/* + * This source code is released into the public domain. + */ + +module; + +#include <stdexcept> +#include <string> + +#include <ucl++.h> + +export module nihil.config:string; + +import nihil; +import :option; +import :store; + +namespace nihil::config { + +struct string final : option +{ + string(std::string &storage, + std::string_view name, + std::string_view description) noexcept + : option(name, description) + , _storage(storage) + { + store::get().register_option(this); + } + + auto get_string() const -> std::string override + { + return _storage; + }; + + auto set_string(std::string_view new_value) -> void override + { + _storage = new_value; + } + + auto add_to_ucl(ucl_object_t *ucl) const -> void override + { + auto ucl_value = ucl_object_fromstring_common( + _storage.data(), _storage.size(), + UCL_STRING_RAW); + ucl_object_insert_key(ucl, ucl_value, + name().data(), name().size(), true); + } + +private: + std::string &_storage; +}; + +} // namespace nihil::config |
