From d5963532328ce5f1c9f266bf7e760b7d18a60c15 Mon Sep 17 00:00:00 2001 From: Lexi Winter Date: Mon, 23 Jun 2025 16:28:11 +0100 Subject: various updates --- nihil.config/write.ccm | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 nihil.config/write.ccm (limited to 'nihil.config/write.ccm') diff --git a/nihil.config/write.ccm b/nihil.config/write.ccm new file mode 100644 index 0000000..947c7ee --- /dev/null +++ b/nihil.config/write.ccm @@ -0,0 +1,42 @@ +/* + * This source code is released into the public domain. + */ + +module; + +#include +#include +#include + +export module nihil.config:write; + +import nihil.ucl; +import :store; + +namespace nihil::config { + +/* + * Write all config values (except defaults) to disk. + */ +auto write_to(std::filesystem::path const &filename) -> void +try { + auto uclconfig = ucl::map(); + + // 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())); +} + +}; -- cgit v1.2.3