-------------------------------------------------------------------------
| 94 | |
| 95 | //------------------------------------------------------------------------- |
| 96 | void CoverageDataSerializer::Serialize( |
| 97 | const Plugin::CoverageData& coverageData, |
| 98 | const std::filesystem::path& output) const |
| 99 | { |
| 100 | pb::CoverageData coverageDataProtoBuff; |
| 101 | Tools::CreateParentFolderIfNeeded(output); |
| 102 | |
| 103 | std::ofstream ofs(output.string(), std::ios::binary); |
| 104 | if (!ofs) |
| 105 | throw InvalidOutputFileException(output, "binary"); |
| 106 | |
| 107 | google::protobuf::io::OstreamOutputStream outputStream(&ofs); |
| 108 | google::protobuf::io::CodedOutputStream codedOutputStream(&outputStream); |
| 109 | |
| 110 | codedOutputStream.WriteVarint32(CoverageDataSerializer::FileTypeId); |
| 111 | |
| 112 | FillCoverageDataProtoBuffFrom(coverageData, coverageDataProtoBuff); |
| 113 | WriteMessage(coverageDataProtoBuff, codedOutputStream); |
| 114 | |
| 115 | // Here we serialize manually modules because protobuff's limit. |
| 116 | // See https://developers.google.com/protocol-buffers/docs/techniques#large-data |
| 117 | for (const auto& module : coverageData.GetModules()) |
| 118 | { |
| 119 | pb::ModuleCoverage moduleProtoBuff; |
| 120 | InitializeModuleProtoBuffFrom(*module, moduleProtoBuff); |
| 121 | |
| 122 | WriteMessage(moduleProtoBuff, codedOutputStream); |
| 123 | } |
| 124 | } |
| 125 | } |