9#include "../microfmt.hpp"
10#include <boost/describe.hpp>
23 : std::integral_constant<bool, std::is_enum_v<E> && boost::describe::has_describe_enumerators<E>::value> {};
30template <
typename E>
struct formatter<E, std::enable_if_t<detail::is_described_enum<E>::value>> {
34 using Enumerators = boost::describe::describe_enumerators<E>;
37 boost::mp11::mp_for_each<Enumerators>([&](
auto D)
noexcept {
38 if (!found && D.value == val) {
46 using Underlying = std::underlying_type_t<E>;
48 sizeof(Underlying) == 1 ?
"uint8_t"
49 :
sizeof(Underlying) == 2 ?
"uint16_t"
51 static_cast<Underlying
>(val));
59template <
typename T>
struct formatter<T, std::enable_if_t<detail::is_described_struct<T>::value>> {
62 void format(
const T &val,
const sink &out)
const noexcept {
63 using Members = boost::describe::describe_members<T, boost::describe::mod_public>;
68 boost::mp11::mp_for_each<Members>([&](
auto D)
noexcept {
Definition microfmt.hpp:881
boost::describe::has_describe_members< T > is_described_struct
Definition boost_describe.hpp:18
reloco::sink sink
Type-erased, zero-allocation output sink.
Definition microfmt.hpp:46
RELOCO_CONSTEXPR20 void format_to(const sink &out, microfmt::string_view fmt, const Args &...args) noexcept
Definition microfmt.hpp:1766
Definition boost_describe.hpp:23