diff options
author | Yorick van Pelt <yorick@yorickvanpelt.nl> | 2022-04-20 15:41:01 +0200 |
---|---|---|
committer | Yorick van Pelt <yorick@yorickvanpelt.nl> | 2022-04-20 15:41:01 +0200 |
commit | ebf2fd76b106d5eb8f45ccce0615653108bb99bc (patch) | |
tree | 9fa4f96b7ed64c750388571a6803d51c11a7a9eb /src/libutil/experimental-features.cc | |
parent | cd0549a9cd91369f2ad858f0887c5e19077664a1 (diff) |
Add custom to_json and from_json functions for ExperimentalFeature
nix show-config --json was serializing experimental features as ints.
nlohmann::json will automatically use these definitions to serialize
and deserialize ExperimentalFeatures.
Strictly, we don't use the from_json instance yet, it's provided for
completeness and hopefully future use.
Diffstat (limited to 'src/libutil/experimental-features.cc')
-rw-r--r-- | src/libutil/experimental-features.cc | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/libutil/experimental-features.cc b/src/libutil/experimental-features.cc index e033a4116..df37edf57 100644 --- a/src/libutil/experimental-features.cc +++ b/src/libutil/experimental-features.cc @@ -58,4 +58,18 @@ std::ostream & operator <<(std::ostream & str, const ExperimentalFeature & featu return str << showExperimentalFeature(feature); } +void to_json(nlohmann::json& j, const ExperimentalFeature& feature) { + j = showExperimentalFeature(feature); +} + +void from_json(const nlohmann::json& j, ExperimentalFeature& feature) { + const std::string input = j; + const auto parsed = parseExperimentalFeature(input); + + if (parsed.has_value()) + feature = *parsed; + else + throw Error("Unknown experimental feature '%s' in JSON input", input); +} + } |