diff --git a/src/formatter/json.cpp b/src/formatter/json.cpp index 3c049583..26004752 100644 --- a/src/formatter/json.cpp +++ b/src/formatter/json.cpp @@ -41,14 +41,19 @@ struct visitor_t { node.AddMember(rapidjson::StringRef(name.data(), name.size()), rapidjson::kNullType, allocator); } - // For `bool`, `std::int64_t`, `std::uint64_t` and `double` types. - template - auto operator()(T value) -> void { - static_assert( - std::is_same::value || - std::is_same::value || - std::is_same::value || - std::is_same::value, "type mismatch"); + auto operator()(bool value) -> void { + node.AddMember(rapidjson::StringRef(name.data(), name.size()), value, allocator); + } + + auto operator()(std::int64_t value) -> void { + node.AddMember(rapidjson::StringRef(name.data(), name.size()), value, allocator); + } + + auto operator()(std::uint64_t value) -> void { + node.AddMember(rapidjson::StringRef(name.data(), name.size()), value, allocator); + } + + auto operator()(double value) -> void { node.AddMember(rapidjson::StringRef(name.data(), name.size()), value, allocator); } @@ -219,9 +224,10 @@ class json_t::inner_t::builder { inner.timestamp(record.timestamp(), wr); apply("timestamp", wr.inner.data(), wr.inner.size()); } else { - apply("timestamp", std::chrono::duration_cast< + const auto timestamp = std::chrono::duration_cast< std::chrono::microseconds - >(record.timestamp().time_since_epoch()).count()); + >(record.timestamp().time_since_epoch()).count(); + apply("timestamp", static_cast(timestamp)); } }