#include #include #include #include "analytics/SerdeObjectVisitor.h" #include "fbs/meta/Schema.h" #include "fbs/storage/Common.h" #include "tests/GtestHelpers.h" namespace hf3fs::analytics { class DebugObjectVisitor : public BaseObjectVisitor { public: template void visit(std::string_view k, T &) = delete; template requires std::is_arithmetic_v void visit(std::string_view k, T &) { XLOGF(DBG3, "arithmetic visit({})", k); } template requires std::is_enum_v void visit(std::string_view k, T &) { XLOGF(DBG3, "enum visit({})", k); } template requires std::is_convertible_v void visit(std::string_view k, T &) { XLOGF(DBG3, "string visit({})", k); } template void visit(std::string_view k, T &v) { XLOGF(DBG3, "strongtyped visit({})", k); visit(k, v.toUnderType()); } template void visit(std::string_view k, T &v) { XLOGF(DBG3, "WithReadableSerdeMethod visit({})", k); auto serialized = serde::SerdeMethod::serdeToReadable(v); visit(k, serialized); } template void visit(std::string_view k, T &v) { XLOGF(DBG3, "WithSerdeMethod visit({})", k); auto serialized = serde::SerdeMethod::serdeTo(v); visit(k, serialized); } template void visit(std::string_view k, T &v) { XLOGF(DBG3, "WithReadableSerdeMemberMethod visit({})", k); auto serialized = v.serdeToReadable(); visit(k, serialized); } template void visit(std::string_view k, T &v) { XLOGF(DBG3, "WithSerdeMemberMethod visit({})", k); auto serialized = v.serdeTo(); visit(k, serialized); } template void visit(std::string_view k, T &val) { XLOGF(DBG3, "serdetype visit({})", k); BaseObjectVisitor::visit(k, val); } template requires is_variant_v void visit(std::string_view k, T &val) { XLOGF(DBG3, "variant visit({})", k); BaseObjectVisitor::visit(k, val); } template requires is_vector_v || is_set_v void visit(std::string_view k, T &val) { XLOGF(DBG3, "container visit({})", k); BaseObjectVisitor::visit(k, val); } template requires is_optional_v void visit(std::string_view k, T &val) { XLOGF(DBG3, "container visit({})", k); BaseObjectVisitor::visit(k, val); } }; TEST(TestSerdeObjectVisitor, ChunkId) { storage::ChunkId chunkId; DebugObjectVisitor visitor; visitor.visit("chunkId", chunkId); } TEST(TestSerdeObjectVisitor, ChunkMeta) { storage::ChunkMeta chunkmeta; DebugObjectVisitor visitor; visitor.visit("chunkmeta", chunkmeta); } TEST(TestSerdeObjectVisitor, InodeId) { meta::InodeId inodeId; DebugObjectVisitor visitor; visitor.visit("inodeId", inodeId); } TEST(TestSerdeObjectVisitor, Inode) { DebugObjectVisitor visitor; meta::Inode inode; visitor.visit("inode", inode); } } // namespace hf3fs::analytics