diff options
| author | Lexi Winter <lexi@le-fay.org> | 2025-06-23 19:45:54 +0100 |
|---|---|---|
| committer | Lexi Winter <lexi@le-fay.org> | 2025-06-23 19:45:54 +0100 |
| commit | 2a3f19ff67bd0292a2812993b2b19c292d113959 (patch) | |
| tree | 81fa477e6c1470f77a3ddd12ee5804c7a315f2c3 /nihil.config/write.cc | |
| parent | 504c02086832dcaab5cfa042ee7a488470284424 (diff) | |
| download | nihil-2a3f19ff67bd0292a2812993b2b19c292d113959.tar.gz nihil-2a3f19ff67bd0292a2812993b2b19c292d113959.tar.bz2 | |
config: add separate implementation for read, write
Diffstat (limited to 'nihil.config/write.cc')
| -rw-r--r-- | nihil.config/write.cc | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/nihil.config/write.cc b/nihil.config/write.cc new file mode 100644 index 0000000..4b2a232 --- /dev/null +++ b/nihil.config/write.cc @@ -0,0 +1,39 @@ +/* + * This source code is released into the public domain. + */ + +module; + +#include <filesystem> +#include <format> +#include <utility> + +import nihil; +import nihil.ucl; + +module nihil.config; + +namespace nihil::config { + +auto write_to(std::filesystem::path const &filename) -> void +try { + auto uclconfig = ucl::map<ucl::object>(); + + // Add all the options to the UCL object. + for (auto const &option : store::get().all()) { + if (option.is_default()) + continue; + + uclconfig.insert({option.name(), option.to_ucl()}); + } + + auto ucl_text = std::format("{:c}", uclconfig); + auto ret = safe_write_file(filename, ucl_text); + if (!ret) + throw error(std::format("{}: {}", filename.string(), + ret.error().message())); +} catch (ucl::error const &exc) { + throw error(std::format("{}: {}", filename.string(), exc.what())); +} + +}; |
