Commit 6d1c8b27 authored by Dominik Charousset's avatar Dominik Charousset

Deprecate old inspector API instead of removing it

parent 8c8fb8be
...@@ -70,10 +70,39 @@ constexpr auto always_true = always_true_t{}; ...@@ -70,10 +70,39 @@ constexpr auto always_true = always_true_t{};
template <class> template <class>
constexpr bool assertion_failed_v = false; constexpr bool assertion_failed_v = false;
// TODO: remove with CAF 0.19
template <class T, class Inspector, class Obj>
class has_static_apply {
private:
template <class U>
static auto sfinae(Inspector* f, Obj* x)
-> decltype(U::apply(*f, *x), std::true_type());
template <class U>
static auto sfinae(...) -> std::false_type;
using sfinae_type = decltype(sfinae<T>(nullptr, nullptr));
public:
static constexpr bool value = sfinae_type::value;
};
template <class T, class Inspector, class Obj>
constexpr bool has_static_apply_v = has_static_apply<T, Inspector, Obj>::value;
// -- loading ------------------------------------------------------------------ // -- loading ------------------------------------------------------------------
// TODO: remove with CAF 0.19
template <class Inspector, class T>
[[deprecated("please provide apply instead of apply_object/apply_value")]] //
std::enable_if_t<!has_static_apply_v<inspector_access<T>, Inspector, T>, bool>
load(Inspector& f, T& x, inspector_access_type::specialization) {
return inspector_access<T>::apply_value(f, x);
}
template <class Inspector, class T> template <class Inspector, class T>
bool load(Inspector& f, T& x, inspector_access_type::specialization) { std::enable_if_t<has_static_apply_v<inspector_access<T>, Inspector, T>, bool>
load(Inspector& f, T& x, inspector_access_type::specialization) {
return inspector_access<T>::apply(f, x); return inspector_access<T>::apply(f, x);
} }
...@@ -164,8 +193,17 @@ bool load_field(Inspector& f, string_view field_name, T& x, IsValid& is_valid, ...@@ -164,8 +193,17 @@ bool load_field(Inspector& f, string_view field_name, T& x, IsValid& is_valid,
// -- saving ------------------------------------------------------------------- // -- saving -------------------------------------------------------------------
// TODO: remove with CAF 0.19
template <class Inspector, class T>
[[deprecated("please provide apply instead of apply_object/apply_value")]] //
std::enable_if_t<!has_static_apply_v<inspector_access<T>, Inspector, T>, bool>
save(Inspector& f, T& x, inspector_access_type::specialization) {
return inspector_access<T>::apply_value(f, x);
}
template <class Inspector, class T> template <class Inspector, class T>
bool save(Inspector& f, T& x, inspector_access_type::specialization) { std::enable_if_t<has_static_apply_v<inspector_access<T>, Inspector, T>, bool>
save(Inspector& f, T& x, inspector_access_type::specialization) {
return inspector_access<T>::apply(f, x); return inspector_access<T>::apply(f, x);
} }
...@@ -335,6 +373,18 @@ struct optional_inspector_access { ...@@ -335,6 +373,18 @@ struct optional_inspector_access {
return f.object(x).fields(f.field("value", x)); return f.object(x).fields(f.field("value", x));
} }
template <class Inspector>
[[deprecated("use apply instead")]] static bool
apply_object(Inspector& f, container_type& x) {
return apply(f, x);
}
template <class Inspector>
[[deprecated("use apply instead")]] static bool
apply_value(Inspector& f, container_type& x) {
return apply(f, x);
}
template <class Inspector> template <class Inspector>
static bool static bool
save_field(Inspector& f, string_view field_name, container_type& x) { save_field(Inspector& f, string_view field_name, container_type& x) {
...@@ -467,6 +517,18 @@ struct variant_inspector_access { ...@@ -467,6 +517,18 @@ struct variant_inspector_access {
return f.object(x).fields(f.field("value", x)); return f.object(x).fields(f.field("value", x));
} }
template <class Inspector>
[[deprecated("use apply instead")]] static bool
apply_object(Inspector& f, T& x) {
return apply(f, x);
}
template <class Inspector>
[[deprecated("use apply instead")]] static bool
apply_value(Inspector& f, T& x) {
return apply(f, x);
}
template <class Inspector> template <class Inspector>
static bool save_field(Inspector& f, string_view field_name, value_type& x) { static bool save_field(Inspector& f, string_view field_name, value_type& x) {
auto g = [&f](auto& y) { return detail::save(f, y); }; auto g = [&f](auto& y) { return detail::save(f, y); };
...@@ -659,6 +721,18 @@ struct inspector_access<std::chrono::duration<Rep, Period>> ...@@ -659,6 +721,18 @@ struct inspector_access<std::chrono::duration<Rep, Period>>
return f.apply(get, set); return f.apply(get, set);
} }
} }
template <class Inspector>
[[deprecated("use apply instead")]] static bool
apply_object(Inspector& f, value_type& x) {
return apply(f, x);
}
template <class Inspector>
[[deprecated("use apply instead")]] static bool
apply_value(Inspector& f, value_type& x) {
return apply(f, x);
}
}; };
template <class Duration> template <class Duration>
...@@ -692,6 +766,35 @@ struct inspector_access< ...@@ -692,6 +766,35 @@ struct inspector_access<
return f.apply(get, set); return f.apply(get, set);
} }
} }
template <class Inspector>
[[deprecated("use apply instead")]] static bool
apply_object(Inspector& f, value_type& x) {
return apply(f, x);
}
template <class Inspector>
[[deprecated("use apply instead")]] static bool
apply_value(Inspector& f, value_type& x) {
return apply(f, x);
}
};
// -- deprecated API -----------------------------------------------------------
template <class T>
struct default_inspector_access : inspector_access_base<T> {
template <class Inspector>
[[deprecated("call f.apply(x) instead")]] static bool
apply_object(Inspector& f, T& x) {
return f.apply(x);
}
template <class Inspector>
[[deprecated("call f.apply(x) instead")]] static bool
apply_value(Inspector& f, T& x) {
return f.apply(x);
}
}; };
} // namespace caf } // namespace caf
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment