146void Write(
Writer& writer, std::chrono::duration<Rep, Period> value) {
147 using std::chrono::duration, std::chrono::nanoseconds;
152 if constexpr (impl::IsDumpedAsNanoseconds<duration<Rep, Period>>) {
153 const auto count = std::chrono::duration_cast<nanoseconds>(value).count();
155 if (nanoseconds{count} != value) {
156 throw std::logic_error(
157 "Trying to serialize a huge duration, it does not fit into "
158 "std::chrono::nanoseconds type"
161 impl::WriteTrivial(writer, count);
163 impl::WriteTrivial(writer, value.count());
169std::chrono::duration<Rep, Period>
Read(
Reader& reader,
To<std::chrono::duration<Rep, Period>>) {
170 using std::chrono::duration, std::chrono::nanoseconds;
172 if constexpr (impl::IsDumpedAsNanoseconds<duration<Rep, Period>>) {
173 const auto count = impl::ReadTrivial<nanoseconds::rep>(reader);
174 return std::chrono::duration_cast<duration<Rep, Period>>(nanoseconds{count});
176 const auto count = impl::ReadTrivial<Rep>(reader);
177 return duration<Rep, Period>{count};