refactor(metadata): factor out dump() and json methods

This commit is contained in:
Marcus Holland-Moritz 2025-04-06 21:50:19 +02:00
parent eecf24acd8
commit 719588be13
3 changed files with 54 additions and 52 deletions

View File

@ -66,6 +66,8 @@ struct metadata_options;
namespace internal { namespace internal {
class metadata_v2_data;
class metadata_v2 { class metadata_v2 {
public: public:
metadata_v2() = default; metadata_v2() = default;
@ -80,24 +82,6 @@ class metadata_v2 {
void check_consistency() const { impl_->check_consistency(); } void check_consistency() const { impl_->check_consistency(); }
void
dump(std::ostream& os, fsinfo_options const& opts,
filesystem_info const* fsinfo,
std::function<void(std::string const&, uint32_t)> const& icb) const {
impl_->dump(os, opts, fsinfo, icb);
}
nlohmann::json info_as_json(fsinfo_options const& opts,
filesystem_info const* fsinfo) const {
return impl_->info_as_json(opts, fsinfo);
}
nlohmann::json as_json() const { return impl_->as_json(); }
std::string serialize_as_json(bool simple) const {
return impl_->serialize_as_json(simple);
}
size_t size() const { return impl_->size(); } size_t size() const { return impl_->size(); }
void walk(std::function<void(dir_entry_view)> const& func) const { void walk(std::function<void(dir_entry_view)> const& func) const {
@ -189,24 +173,16 @@ class metadata_v2 {
return impl_->get_block_numbers_by_category(category); return impl_->get_block_numbers_by_category(category);
} }
metadata_v2_data const& internal_data() const {
return impl_->internal_data();
}
class impl { class impl {
public: public:
virtual ~impl() = default; virtual ~impl() = default;
virtual void check_consistency() const = 0; virtual void check_consistency() const = 0;
virtual void dump(
std::ostream& os, fsinfo_options const& opts,
filesystem_info const* fsinfo,
std::function<void(std::string const&, uint32_t)> const& icb) const = 0;
virtual nlohmann::json
info_as_json(fsinfo_options const& opts,
filesystem_info const* fsinfo) const = 0;
virtual nlohmann::json as_json() const = 0;
virtual std::string serialize_as_json(bool simple) const = 0;
virtual size_t size() const = 0; virtual size_t size() const = 0;
virtual void virtual void
@ -263,12 +239,33 @@ class metadata_v2 {
virtual std::vector<size_t> virtual std::vector<size_t>
get_block_numbers_by_category(std::string_view category) const = 0; get_block_numbers_by_category(std::string_view category) const = 0;
virtual metadata_v2_data const& internal_data() const = 0;
}; };
private: private:
std::unique_ptr<impl> impl_; std::unique_ptr<impl> impl_;
}; };
class metadata_v2_utils {
public:
metadata_v2_utils(metadata_v2 const& meta);
void dump(std::ostream& os, fsinfo_options const& opts,
filesystem_info const* fsinfo,
std::function<void(std::string const&, uint32_t)> const& icb) const;
nlohmann::json
info_as_json(fsinfo_options const& opts, filesystem_info const* fsinfo) const;
nlohmann::json as_json() const;
std::string serialize_as_json(bool simple) const;
private:
metadata_v2_data const& data_;
};
} // namespace internal } // namespace internal
} // namespace reader } // namespace reader
} // namespace dwarfs } // namespace dwarfs

View File

@ -648,7 +648,7 @@ void filesystem_<LoggerPolicy>::dump(std::ostream& os,
history_.dump(os); history_.dump(os);
} }
meta_.dump( metadata_v2_utils(meta_).dump(
os, opts, get_info(opts), [&](std::string const& indent, uint32_t inode) { os, opts, get_info(opts), [&](std::string const& indent, uint32_t inode) {
std::error_code ec; std::error_code ec;
auto chunks = meta_.get_chunks(inode, ec); auto chunks = meta_.get_chunks(inode, ec);
@ -726,20 +726,20 @@ filesystem_<LoggerPolicy>::info_as_json(fsinfo_options const& opts) const {
} }
} }
info.update(meta_.info_as_json(opts, get_info(opts))); info.update(metadata_v2_utils(meta_).info_as_json(opts, get_info(opts)));
return info; return info;
} }
template <typename LoggerPolicy> template <typename LoggerPolicy>
nlohmann::json filesystem_<LoggerPolicy>::metadata_as_json() const { nlohmann::json filesystem_<LoggerPolicy>::metadata_as_json() const {
return meta_.as_json(); return metadata_v2_utils(meta_).as_json();
} }
template <typename LoggerPolicy> template <typename LoggerPolicy>
std::string std::string
filesystem_<LoggerPolicy>::serialize_metadata_as_json(bool simple) const { filesystem_<LoggerPolicy>::serialize_metadata_as_json(bool simple) const {
return meta_.serialize_as_json(simple); return metadata_v2_utils(meta_).serialize_as_json(simple);
} }
template <typename LoggerPolicy> template <typename LoggerPolicy>

View File

@ -2214,24 +2214,6 @@ class metadata_ final : public metadata_v2::impl {
data_.check_consistency(LOG_PROXY_ARG); data_.check_consistency(LOG_PROXY_ARG);
} }
void dump(std::ostream& os, fsinfo_options const& opts,
filesystem_info const* fsinfo,
std::function<void(std::string const&, uint32_t)> const& icb)
const override {
data_.dump(os, opts, fsinfo, icb);
}
nlohmann::json info_as_json(fsinfo_options const& opts,
filesystem_info const* fsinfo) const override {
return data_.info_as_json(opts, fsinfo);
}
nlohmann::json as_json() const override { return data_.as_json(); }
std::string serialize_as_json(bool simple) const override {
return data_.serialize_as_json(simple);
}
size_t size() const override { return data_.size(); } size_t size() const override { return data_.size(); }
void walk(std::function<void(dir_entry_view)> const& func) const override { void walk(std::function<void(dir_entry_view)> const& func) const override {
@ -2357,11 +2339,34 @@ class metadata_ final : public metadata_v2::impl {
return data_.get_block_numbers_by_category(category); return data_.get_block_numbers_by_category(category);
} }
metadata_v2_data const& internal_data() const override { return data_; }
private: private:
LOG_PROXY_DECL(LoggerPolicy); LOG_PROXY_DECL(LoggerPolicy);
metadata_v2_data const data_; metadata_v2_data const data_;
}; };
metadata_v2_utils::metadata_v2_utils(metadata_v2 const& meta)
: data_{meta.internal_data()} {}
void metadata_v2_utils::dump(
std::ostream& os, fsinfo_options const& opts, filesystem_info const* fsinfo,
std::function<void(std::string const&, uint32_t)> const& icb) const {
data_.dump(os, opts, fsinfo, icb);
}
nlohmann::json
metadata_v2_utils::info_as_json(fsinfo_options const& opts,
filesystem_info const* fsinfo) const {
return data_.info_as_json(opts, fsinfo);
}
nlohmann::json metadata_v2_utils::as_json() const { return data_.as_json(); }
std::string metadata_v2_utils::serialize_as_json(bool simple) const {
return data_.serialize_as_json(simple);
}
metadata_v2::metadata_v2( metadata_v2::metadata_v2(
logger& lgr, std::span<uint8_t const> schema, std::span<uint8_t const> data, logger& lgr, std::span<uint8_t const> schema, std::span<uint8_t const> data,
metadata_options const& options, int inode_offset, metadata_options const& options, int inode_offset,