// This source code is released into the public domain. export module nihil.config:write; import nihil.std; import nihil.error; import nihil.monad; import nihil.posix; import nihil.ucl; import :option; import :store; namespace nihil::config { // Write all config values (except defaults) to disk. export [[nodiscard]] auto write_to(std::filesystem::path const &filename) -> std::expected { auto uclconfig = ucl::map(); // Add all the options to the UCL object. for (auto const &option : store::get().all()) { if (option->is_default()) continue; auto uobj = co_await option->ucl(); uclconfig.insert({option->name(), uobj}); } auto ucl_text = std::format("{:c}", uclconfig); co_await safe_write_file(filename, ucl_text); co_return {}; } }; // namespace nihil::config