12#include <unordered_set>
15#include <fmt/ranges.h>
52 const std::vector<std::any> &args)>;
69 default_level_{default_level},
70 dynamic_msg_builder_{std::move(dynamic_msg_builder)} {}
75 default_level_{default_level},
76 dynamic_msg_builder_{std::move(dynamic_msg_builder)},
82 default_level_{default_level},
84 dynamic_msg_builder_{
nullptr} {}
89 default_level_{default_level},
91 dynamic_msg_builder_{
nullptr},
95 [[nodiscard]] std::string_view
name()
const {
104 return default_level_;
116 return static_msg_templ_;
127 template <
typename... Args>
129 Args &&...args)
const {
130 if (dynamic_msg_builder_ ==
nullptr) {
131 std::vector<std::string> v{};
132 v.push_back(fmt::format(fmt::runtime(static_msg_templ_), std::forward<Args>(args)...));
135 const std::vector<std::any> v{std::forward<Args>(args)...};
136 return dynamic_msg_builder_(eng, in_flight_level, v);
149 return partner_diags_;
155 std::string_view static_msg_templ_;
157 std::vector<DiagTempl> partner_diags_;
169 : level_{
level}, msg_{std::move(
msg)}, templ_{std::move(
templ)} {}
175 [[nodiscard]] std::string
msg() const noexcept {
199 [[nodiscard]]
virtual bool IsATty()
const = 0;
210 [[nodiscard]]
bool IsATty()
const override;
215 std::uint64_t consumed_count_{};
224 [[nodiscard]]
bool IsATty()
const override;
229 std::uint64_t consumed_count_{};
238 [[nodiscard]]
bool IsATty()
const override;
243 std::vector<InFlightDiag> diags_;
318 std::size_t seed = 0x39A9C07E;
319 seed ^= (seed << 6) + (seed >> 2) + 0x6EFC4121 + std::hash<std::string>{}(std::string{templ.name()});
320 seed ^= (seed << 6) + (seed >> 2) + 0x14AA7601 +
static_cast<std::size_t
>(templ.level());
A customizable consumer for diagnostic messages.
virtual bool IsATty() const =0
virtual InFlightDiag ConsumedAt(std::size_t i) const =0
virtual ~DiagConsumer()=default
virtual void Consume(const InFlightDiag &diag)=0
virtual std::uint64_t ConsumedCount() const =0
Coordinates the generation and consumption of diagnostic messages.
Defines a reusable template for standardized diagnostic reporting.
DiagTempl(std::string_view name, DiagLevel default_level, std::string_view static_msg_templ, const std::vector< DiagTempl > &partner_diags) noexcept
DiagLevel level() const
Gets the default diagnostic level of the template.
std::vector< std::string > BuildDynamicMsg(const DiagEngine &eng, const DiagLevel in_flight_level, Args &&...args) const
Builds a dynamic message for this DiagTempl based on the configured message builder.
DiagTempl(std::string_view name, DiagLevel default_level, DynamicMsgBuilder dynamic_msg_builder) noexcept
std::string_view static_msg_templ() const
Gets the static message template.
std::string_view name() const
DiagTempl(std::string_view name, DiagLevel default_level, std::string_view static_msg_templ) noexcept
const std::vector< DiagTempl > & partner_diags() const
Gets a vector of partner DiagTempl for this DiagTempl.
DiagTempl(std::string_view name, DiagLevel default_level, DynamicMsgBuilder dynamic_msg_builder, const std::vector< DiagTempl > &partner_diags) noexcept
A DiagConsumer implementation that simply ignores the provided diagnostic.
bool IsATty() const override
InFlightDiag ConsumedAt(std::size_t i) const override
std::uint64_t ConsumedCount() const override
void Consume(const InFlightDiag &diag) override
Represents an in-flight diagnostic.
const DiagTempl & templ() const noexcept
DiagLevel level() const noexcept
InFlightDiag(const DiagLevel level, std::string msg, DiagTempl templ) noexcept
std::string msg() const noexcept
A DiagConsumer implementation that pushes diagnostic messages to stderr.
bool IsATty() const override
InFlightDiag ConsumedAt(std::size_t i) const override
void Consume(const InFlightDiag &diag) override
std::uint64_t ConsumedCount() const override
A DiagConsumer implementation that pushes diagnostic messages to an internal vector.
std::uint64_t ConsumedCount() const override
bool IsATty() const override
void Consume(const InFlightDiag &diag) override
InFlightDiag ConsumedAt(std::size_t i) const override
constexpr auto WarnTransparencyCollapse
DiagTempl DiagFor(std::string_view name)
Retrieves the DiagTempl corresponding to a given diagnostic name.
constexpr auto WarnColorPrecisionLoss
constexpr auto NoteGeneric
constexpr auto FatalGeneric
std::vector< const char * > AllDiagNames()
Gets an iterable view of all DiagTempl names in the internal table.
constexpr auto WarnUnusedAttribute
constexpr auto WarnAttributeFormatMismatch
constexpr auto WarnMissingAttributesCsv
constexpr auto WarnTileIndexOutOfRange
constexpr auto WarnPaletteIndexOutOfRange
std::string LevelToStr(DiagLevel level)
int LevelPriority(DiagLevel level)
fmt::terminal_color ColorForLevel(DiagLevel level)
constexpr auto ErrGeneric
constexpr auto WarnKeyFrameMissingColors
constexpr auto WarnKeyFrameNoMatchingTile
std::function< std::vector< std::string >(const DiagEngine &eng, DiagLevel in_flight_level, const std::vector< std::any > &args)> DynamicMsgBuilder
An alias for a dynamic diagnostic message builder function.
constexpr auto WarnUnusedManualPalColor
std::size_t operator()(const porytiles::DiagTempl &templ) const noexcept