#pragma once #include <date/tz.h> #include <fmt/format.h> namespace waybar { struct waybar_time { std::locale locale; date::zoned_seconds ztime; }; } // namespace waybar template <> struct fmt::formatter<waybar::waybar_time> { std::string_view specs; template <typename ParseContext> constexpr auto parse(ParseContext& ctx) -> decltype(ctx.begin()) { auto it = ctx.begin(); if (it != ctx.end() && *it == ':') { ++it; } auto end = it; while (end != ctx.end() && *end != '}') { ++end; } if (end != it) { specs = {it, std::string_view::size_type(end - it)}; } return end; } template <typename FormatContext> auto format(const waybar::waybar_time& t, FormatContext& ctx) { return format_to(ctx.out(), "{}", date::format(t.locale, fmt::to_string(specs), t.ztime)); } };