Files
lix/src/libutil/deprecated-features.hh
T
piegames 0edfea450b libexpr: Soft-deprecate ancient let syntax
Change-Id: I6802b26f038578870ea1fa1ed298f0c4b1f29c4a
2024-08-21 12:59:03 +02:00

87 lines
2.3 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#pragma once
///@file
#include "error.hh"
#include "types.hh"
namespace nix {
/**
* The list of available deprecated features.
*
* If you update this, dont forget to also change the map defining
* their string representation and documentation in the corresponding
* `.cc` file as well.
*
* Reminder: New deprecated features should start out with a warning without throwing an error.
* See the developer documentation for details.
*/
enum struct DeprecatedFeature
{
RecSetOverrides,
AncientLet,
UrlLiterals,
};
enum struct DeprecatedFeatures {};
inline DeprecatedFeatures operator| (DeprecatedFeatures a, DeprecatedFeatures b) {
return static_cast<DeprecatedFeatures>(static_cast<size_t>(a) | static_cast<size_t>(b));
}
inline DeprecatedFeatures operator| (DeprecatedFeatures a, DeprecatedFeature b) {
return a | static_cast<DeprecatedFeatures>(1 << static_cast<size_t>(b));
}
inline DeprecatedFeatures operator& (DeprecatedFeatures a, DeprecatedFeature b) {
return static_cast<DeprecatedFeatures>(static_cast<size_t>(a) & (1 << static_cast<size_t>(b)));
}
/**
* Just because writing `DeprecatedFeature::UrlLiterals` is way too long
*/
using Dep = DeprecatedFeature;
/**
* Parse a deprecated feature (enum value) from its name. Deprecated
* feature flag names are hyphenated and do not contain spaces.
*/
const std::optional<DeprecatedFeature> parseDeprecatedFeature(
const std::string_view & name);
/**
* Show the name of a deprecated feature. This is the opposite of
* parseDeprecatedFeature().
*/
std::string_view showDeprecatedFeature(const DeprecatedFeature);
/**
* Shorthand for `str << showDeprecatedFeature(feature)`.
*/
std::ostream & operator<<(
std::ostream & str,
const DeprecatedFeature & feature);
/**
* Parse a set of strings to the corresponding set of deprecated
* features, ignoring (but warning for) any unknown feature.
*/
DeprecatedFeatures parseDeprecatedFeatures(const std::set<std::string> &);
/**
* A deprecated feature used for some
* operation, but was not enabled.
*/
class MissingDeprecatedFeature : public Error
{
public:
/**
* The deprecated feature that was required but not enabled.
*/
DeprecatedFeature missingFeature;
MissingDeprecatedFeature(DeprecatedFeature missingFeature);
};
}