Config: Allow passing a DefaultState object to Set functions to delete keys.

This commit is contained in:
Jordan Woyak
2025-02-23 19:05:56 -06:00
parent 137d1375d4
commit ba1bf6959e
2 changed files with 26 additions and 13 deletions

View File

@ -8,7 +8,6 @@
#include <optional>
#include <string>
#include <type_traits>
#include <vector>
#include "Common/Config/ConfigInfo.h"
#include "Common/Config/Enums.h"
@ -16,6 +15,12 @@
namespace Config
{
// Setting a key to an object of this type will delete the key.
struct DefaultState
{
friend constexpr bool operator==(DefaultState, DefaultState) { return true; };
};
namespace detail
{
template <typename T, std::enable_if_t<!std::is_enum<T>::value>* = nullptr>
@ -116,12 +121,20 @@ public:
return detail::TryParse<T>(*iter->second);
}
template <typename T>
bool Set(const Info<T>& config_info, DefaultState)
{
return DeleteKey(config_info.GetLocation());
}
template <typename T>
bool Set(const Info<T>& config_info, const std::common_type_t<T>& value)
{
return Set(config_info.GetLocation(), value);
}
bool Set(const Location& location, DefaultState) { return DeleteKey(location); }
template <typename T>
bool Set(const Location& location, const T& value)
{