|
Malloy
|
Namespace for metaprogramming utils. More...
Typedefs | |
| template<typename V > | |
| using | unwrap_variant = std::conditional_t< std::variant_size_v< V >==1, std::variant_alternative_t< 0, V >, V > |
| Pattern: unwrap_variant<variant<T>> -> T unwrap_variant<variant<T, ...> -> std::variant<T, ...> | |
| template<typename V > | |
| using | body_type = unwrap_variant< V > |
| Converts from a variant of possible bodies to the actual body type taken by callbacks. | |
| template<typename F > | |
| using | bodies_for_t = std::invoke_result_t< decltype(&F::body_for), const F *, const typename F::header_type & > |
| Resolves the body type used by a filter F. | |
| template<typename Bodies > | |
| using | to_responses = typename decltype(detail::conv_to_resp_helper{std::declval< Bodies >()})::type |
| Converts a variant<T...> where T is body to a variant<response<T>...> | |
| template<typename Filter > | |
| using | filter_resp_t = unwrap_variant< to_responses< bodies_for_t< Filter > > > |
| Resolves to the type that must be taken in callbacks handling responses for Filter. | |
Namespace for metaprogramming utils.
| using malloy::mp::unwrap_variant = typedef std::conditional_t<std::variant_size_v<V> == 1, std::variant_alternative_t<0, V>, V> |
Pattern: unwrap_variant<variant<T>> -> T unwrap_variant<variant<T, ...> -> std::variant<T, ...>
i.e. If it is a 1 element it just returns that type, otherwise the entire variant type.