#include "metrics/eye_serdes.hpp" #include "coding/reader.hpp" #include "coding/serdes_json.hpp" #include "coding/write_to_sink.hpp" #include "coding/writer.hpp" #include "base/logging.hpp" #include #include namespace eye { // static void Serdes::Serialize(Info const & info, std::vector & result) { result.clear(); using Sink = MemWriter>; Sink writer(result); WriteToSink(writer, static_cast(Info::GetVersion())); coding::SerializerJson ser(writer); ser(info); } // static void Serdes::Deserialize(std::vector const & bytes, Info & result) { MemReader reader(bytes.data(), bytes.size()); NonOwningReaderSource source(reader); auto version = static_cast(Version::Unknown); ReadPrimitiveFromSource(source, version); if (version == static_cast(Version::V0)) { try { // TODO: Use temporary object InfoV0 and implement method to convert it to Info, // TODO: when InfoV1 will be implemented. coding::DeserializerJson des(source); des(result); } catch (base::Json::Exception & ex) { LOG(LERROR, ("Cannot deserialize eye file. Exception:", ex.Msg(), "Version:", version, "File content:", bytes)); } return; } MYTHROW(UnknownVersion, ("Unknown data version:", static_cast(version))); } } // namespace eye