From 63ee2cdda36e48f932dd5a1ae7f35f85687ce1f5 Mon Sep 17 00:00:00 2001 From: Alois Wohlschlager Date: Tue, 20 Aug 2024 19:36:49 +0200 Subject: [PATCH] libfetchers: serialise accept-flake-config properly The AcceptFlakeConfig type used was missing its JSON serialisation definition, so it was incorrectly serialised as an integer, ending up that way for example in the nix.conf manual page. Declare a proper serialisation. Change-Id: If8ec210f9d4dd42fe480c4e97d0a4920eb66a01e --- src/libfetchers/fetch-settings.cc | 26 ++++++++++++++++++++++++++ src/libfetchers/fetch-settings.hh | 3 +++ 2 files changed, 29 insertions(+) diff --git a/src/libfetchers/fetch-settings.cc b/src/libfetchers/fetch-settings.cc index 007f2725f..b278835ad 100644 --- a/src/libfetchers/fetch-settings.cc +++ b/src/libfetchers/fetch-settings.cc @@ -7,6 +7,32 @@ namespace nix { +void to_json(nlohmann::json & j, const AcceptFlakeConfig & e) +{ + if (e == AcceptFlakeConfig::False) { + j = false; + } else if (e == AcceptFlakeConfig::Ask) { + j = "ask"; + } else if (e == AcceptFlakeConfig::True) { + j = true; + } else { + abort(); + } +} + +void from_json(const nlohmann::json & j, AcceptFlakeConfig & e) +{ + if (j == false) { + e = AcceptFlakeConfig::False; + } else if (j == "ask") { + e = AcceptFlakeConfig::Ask; + } else if (j == true) { + e = AcceptFlakeConfig::True; + } else { + throw Error("Invalid accept-flake-config value '%s'", std::string(j)); + } +} + template<> AcceptFlakeConfig BaseSetting::parse(const std::string & str, const ApplyConfigOptions & options) const { if (str == "true") return AcceptFlakeConfig::True; diff --git a/src/libfetchers/fetch-settings.hh b/src/libfetchers/fetch-settings.hh index 93123463c..0bdc707ec 100644 --- a/src/libfetchers/fetch-settings.hh +++ b/src/libfetchers/fetch-settings.hh @@ -13,6 +13,9 @@ namespace nix { enum class AcceptFlakeConfig { False, Ask, True }; +void to_json(nlohmann::json & j, const AcceptFlakeConfig & e); +void from_json(const nlohmann::json & j, AcceptFlakeConfig & e); + struct FetchSettings : public Config { FetchSettings();