aboutsummaryrefslogtreecommitdiff
path: root/src/libutil/suggestions.hh
diff options
context:
space:
mode:
authorregnat <rg@regnat.ovh>2022-03-04 13:42:43 +0100
committerregnat <rg@regnat.ovh>2022-03-07 10:09:10 +0100
commitfd45d85b4149a4d153d9c60f7f77244b3cf29ae3 (patch)
treeda6a53b4478f6d97a9d7932131dccc47a3da54d9 /src/libutil/suggestions.hh
parentb44cebd1fd68f89bbc2317e2b7978042309e17bb (diff)
Move OrSuggestions to its own header
Prevents a recursive inclusion
Diffstat (limited to 'src/libutil/suggestions.hh')
-rw-r--r--src/libutil/suggestions.hh59
1 files changed, 0 insertions, 59 deletions
diff --git a/src/libutil/suggestions.hh b/src/libutil/suggestions.hh
index 63426259d..705b4cd1c 100644
--- a/src/libutil/suggestions.hh
+++ b/src/libutil/suggestions.hh
@@ -39,63 +39,4 @@ public:
Suggestions& operator+=(const Suggestions & other);
};
-
-// Either a value of type `T`, or some suggestions
-template<typename T>
-class OrSuggestions {
-public:
- using Raw = std::variant<T, Suggestions>;
-
- Raw raw;
-
- T* operator ->()
- {
- return &**this;
- }
-
- T& operator *()
- {
- if (auto elt = std::get_if<T>(&raw))
- return *elt;
- throw Error("Invalid access to a failed value");
- }
-
- operator bool() const noexcept
- {
- return std::holds_alternative<T>(raw);
- }
-
- OrSuggestions(T t)
- : raw(t)
- {
- }
-
- OrSuggestions()
- : raw(Suggestions{})
- {
- }
-
- static OrSuggestions<T> failed(const Suggestions & s)
- {
- auto res = OrSuggestions<T>();
- res.raw = s;
- return res;
- }
-
- static OrSuggestions<T> failed()
- {
- return OrSuggestions<T>::failed(Suggestions{});
- }
-
- const Suggestions & get_suggestions()
- {
- static Suggestions noSuggestions;
- if (const auto & suggestions = std::get_if<Suggestions>(&raw))
- return *suggestions;
- else
- return noSuggestions;
- }
-
-};
-
}