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.
This commit is contained in:
Yorick 2022-04-20 15:41:01 +02:00
parent cd0549a9cd
commit ebf2fd76b1
No known key found for this signature in database
GPG key ID: A36E70F9DC014A15
2 changed files with 21 additions and 0 deletions

View file

@ -58,4 +58,18 @@ std::ostream & operator <<(std::ostream & str, const ExperimentalFeature & featu
return str << showExperimentalFeature(feature); 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);
}
} }

View file

@ -51,4 +51,11 @@ public:
MissingExperimentalFeature(ExperimentalFeature); MissingExperimentalFeature(ExperimentalFeature);
}; };
/**
* Semi-magic conversion to and from json.
* See the nlohmann/json readme for more details.
*/
void to_json(nlohmann::json&, const ExperimentalFeature&);
void from_json(const nlohmann::json&, ExperimentalFeature&);
} }