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(); diff --git a/src/libstore/globals.cc b/src/libstore/globals.cc index c114e22dc..ffc2543ef 100644 --- a/src/libstore/globals.cc +++ b/src/libstore/globals.cc @@ -269,11 +269,31 @@ Path Settings::getDefaultSSLCertFile() const std::string nixVersion = PACKAGE_VERSION; -NLOHMANN_JSON_SERIALIZE_ENUM(SandboxMode, { - {SandboxMode::smEnabled, true}, - {SandboxMode::smRelaxed, "relaxed"}, - {SandboxMode::smDisabled, false}, -}); +void to_json(nlohmann::json & j, const SandboxMode & e) +{ + if (e == SandboxMode::smEnabled) { + j = true; + } else if (e == SandboxMode::smRelaxed) { + j = "relaxed"; + } else if (e == SandboxMode::smDisabled) { + j = false; + } else { + abort(); + } +} + +void from_json(const nlohmann::json & j, SandboxMode & e) +{ + if (j == true) { + e = SandboxMode::smEnabled; + } else if (j == "relaxed") { + e = SandboxMode::smRelaxed; + } else if (j == false) { + e = SandboxMode::smDisabled; + } else { + throw Error("Invalid sandbox mode '%s'", std::string(j)); + } +} template<> SandboxMode BaseSetting::parse(const std::string & str, const ApplyConfigOptions & options) const { diff --git a/src/libstore/globals.hh b/src/libstore/globals.hh index 94aa60825..bfba6ab01 100644 --- a/src/libstore/globals.hh +++ b/src/libstore/globals.hh @@ -14,6 +14,9 @@ namespace nix { typedef enum { smEnabled, smRelaxed, smDisabled } SandboxMode; +void to_json(nlohmann::json & j, const SandboxMode & e); +void from_json(const nlohmann::json & j, SandboxMode & e); + struct MaxBuildJobsSetting : public BaseSetting { MaxBuildJobsSetting(Config * options,