/// @brief パケットを json ファイルに保存する.
/// @param outputPath 保存先のパス
/// @param packets 保存するパケット
inline void SaveAsJson(std::filesystem::path outputPath, std::vector<Packet::StackablePtr> packets)
{
auto json = nlohmann::json::array();
for (auto index = 0; index < packets.size(); index++)
{
auto packetToGetJson = std::shared_ptr<Packet::Stackable>(nullptr);
auto &packet = packets[index];
// packet が Absolute であることを検証する
// TODO Absolute 型だけでなく,メタ情報を持つ Stackable であることを検証する.
auto &stackablePacketRef = *packet;
if (typeid(stackablePacketRef) == typeid(Packet::Absolute))
{
packetToGetJson = packet;
}
else
{
// メタ情報を持つ Stackable を持たない場合,強制的にメタ情報を付与する.
SPDLOG_WARN("The stackable does not have the meta information such as timestamp.",
"This packet will added a meta information");
auto pseudoAbsolute = std::make_shared<Packet::Absolute>();
pseudoAbsolute->TimestampNs.Value(std::chrono::seconds(index));
packetToGetJson = pseudoAbsolute;
}
auto stackableEntityPtr = packetToGetJson->StackableEntity();
auto stackableEntityJson = stackableEntityPtr->ToJson();
json.push_back(stackableEntityJson);
}
auto ofs = std::ofstream(outputPath);
ofs << json;
}
現在 Absolute/AbsoluteEntity のみが提供されているが,今後 Relative/RelativeEntity も提供する予定である.
これらをまとめる抽象型がないため,メタ情報一般を検証したいときに Absolute/AbsoluteEntity しか使えず,残作業となってしまっている.
以下,残作業となってしまっている箇所の一例 (
PacketBuilder.hpp
より) である.