143void Write(
Writer& writer, std::chrono::duration<Rep, Period> value) {
144 using std::chrono::duration, std::chrono::nanoseconds;
149 if constexpr (impl::kIsDumpedAsNanoseconds<duration<Rep, Period>>) {
150 const auto count = std::chrono::duration_cast<nanoseconds>(value).count();
152 if (nanoseconds{count} != value) {
153 throw std::logic_error(
154 "Trying to serialize a huge duration, it does not fit into "
155 "std::chrono::nanoseconds type"
158 impl::WriteTrivial(writer, count);
160 impl::WriteTrivial(writer, value.count());
166std::chrono::duration<Rep, Period>
Read(
Reader& reader,
To<std::chrono::duration<Rep, Period>>) {
167 using std::chrono::duration, std::chrono::nanoseconds;
169 if constexpr (impl::kIsDumpedAsNanoseconds<duration<Rep, Period>>) {
170 const auto count = impl::ReadTrivial<nanoseconds::rep>(reader);
171 return std::chrono::duration_cast<duration<Rep, Period>>(nanoseconds{count});
173 const auto count = impl::ReadTrivial<Rep>(reader);
174 return duration<Rep, Period>{count};