| 56 | |
| 57 | template <typename Visitor, typename... Args> |
| 58 | decltype(std::declval<Visitor>()(std::chrono::seconds{}, std::declval<Args&&>()...)) |
| 59 | VisitDuration(TimeUnit::type unit, Visitor&& visitor, Args&&... args) { |
| 60 | switch (unit) { |
| 61 | default: |
| 62 | case TimeUnit::SECOND: |
| 63 | break; |
| 64 | case TimeUnit::MILLI: |
| 65 | return visitor(std::chrono::milliseconds{}, std::forward<Args>(args)...); |
| 66 | case TimeUnit::MICRO: |
| 67 | return visitor(std::chrono::microseconds{}, std::forward<Args>(args)...); |
| 68 | case TimeUnit::NANO: |
| 69 | return visitor(std::chrono::nanoseconds{}, std::forward<Args>(args)...); |
| 70 | } |
| 71 | return visitor(std::chrono::seconds{}, std::forward<Args>(args)...); |
| 72 | } |
| 73 | |
| 74 | inline std::optional<int64_t> CastSecondsToUnit(TimeUnit::type unit, int64_t seconds) { |
| 75 | auto cast_seconds_to_unit = [](auto duration, |
no outgoing calls
no test coverage detected