3 #include "fly/concepts/concepts.hpp"
5 #include "fly/logger/detail/styler_proxy.hpp"
6 #include "fly/types/numeric/literals.hpp"
14 namespace fly::logger {
22 enum class Style : std::uint8_t
76 explicit constexpr
Color(std::uint8_t color,
Plane plane = Foreground) noexcept :
82 const std::uint8_t m_color;
109 m_direction(direction),
110 m_distance(distance > 0 ? distance : 1)
115 const std::uint8_t m_distance;
121 template <
typename T>
122 concept Modifier = fly::SameAsAny<T, Style, Color, Color::StandardColor, Cursor, Cursor::Direction>;
171 template <Modifier ModifierType>
172 explicit Styler(ModifierType &&modifier) noexcept
174 set_modifier(modifier);
192 template <Modifier ModifierType, Modifier... ModifierTypes>
193 Styler(ModifierType &&modifier, ModifierTypes &&...modifiers) noexcept :
194 Styler(std::forward<ModifierTypes>(modifiers)...)
196 set_modifier(modifier);
221 template <Modifier ModifierType>
222 void set_modifier(ModifierType &&modifier)
224 if constexpr (fly::SameAs<ModifierType, Style>)
226 m_styles.emplace(std::move(modifier));
228 else if constexpr (fly::SameAsAny<ModifierType, Color, Color::StandardColor>)
230 m_colors.emplace(std::move(modifier));
232 else if constexpr (fly::SameAsAny<ModifierType, Cursor, Cursor::Direction>)
234 m_cursors.emplace(std::move(modifier));
240 std::stack<Style> m_styles;
241 std::stack<Color> m_colors;
242 std::stack<Cursor> m_cursors;
244 std::unique_ptr<detail::StylerProxy> m_proxy;
250 inline namespace literals {
251 inline namespace styler_literals {
261 template <
char... Literals>
265 const std::uint8_t validated_color =
operator"" _u8<Literals...>();
Definition: styler.hpp:160
Styler(ModifierType &&modifier, ModifierTypes &&...modifiers) noexcept
Definition: styler.hpp:193
friend detail::StylerProxy & operator<<(std::ostream &stream, const Styler &styler)
Definition: styler.cpp:13
Styler(ModifierType &&modifier) noexcept
Definition: styler.hpp:172
Definition: styler_proxy.hpp:16
Definition: styler.hpp:37
Plane
Definition: styler.hpp:65
StandardColor
Definition: styler.hpp:50
constexpr Color(std::uint8_t color, Plane plane=Foreground) noexcept
Definition: styler.hpp:76
Definition: styler.hpp:90
Direction
Definition: styler.hpp:95
constexpr Cursor(Direction direction, std::uint8_t distance=1) noexcept
Definition: styler.hpp:108