mirror of
https://github.com/mhx/dwarfs.git
synced 2025-09-09 04:19:10 -04:00
refactor(metadata): factor out dump()
and json methods
This commit is contained in:
parent
eecf24acd8
commit
719588be13
@ -66,6 +66,8 @@ struct metadata_options;
|
||||
|
||||
namespace internal {
|
||||
|
||||
class metadata_v2_data;
|
||||
|
||||
class metadata_v2 {
|
||||
public:
|
||||
metadata_v2() = default;
|
||||
@ -80,24 +82,6 @@ class metadata_v2 {
|
||||
|
||||
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(); }
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
metadata_v2_data const& internal_data() const {
|
||||
return impl_->internal_data();
|
||||
}
|
||||
|
||||
class impl {
|
||||
public:
|
||||
virtual ~impl() = default;
|
||||
|
||||
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 void
|
||||
@ -263,12 +239,33 @@ class metadata_v2 {
|
||||
|
||||
virtual std::vector<size_t>
|
||||
get_block_numbers_by_category(std::string_view category) const = 0;
|
||||
|
||||
virtual metadata_v2_data const& internal_data() const = 0;
|
||||
};
|
||||
|
||||
private:
|
||||
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 reader
|
||||
} // namespace dwarfs
|
||||
|
@ -648,7 +648,7 @@ void filesystem_<LoggerPolicy>::dump(std::ostream& os,
|
||||
history_.dump(os);
|
||||
}
|
||||
|
||||
meta_.dump(
|
||||
metadata_v2_utils(meta_).dump(
|
||||
os, opts, get_info(opts), [&](std::string const& indent, uint32_t inode) {
|
||||
std::error_code 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;
|
||||
}
|
||||
|
||||
template <typename LoggerPolicy>
|
||||
nlohmann::json filesystem_<LoggerPolicy>::metadata_as_json() const {
|
||||
return meta_.as_json();
|
||||
return metadata_v2_utils(meta_).as_json();
|
||||
}
|
||||
|
||||
template <typename LoggerPolicy>
|
||||
std::string
|
||||
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>
|
||||
|
@ -2214,24 +2214,6 @@ class metadata_ final : public metadata_v2::impl {
|
||||
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(); }
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
metadata_v2_data const& internal_data() const override { return data_; }
|
||||
|
||||
private:
|
||||
LOG_PROXY_DECL(LoggerPolicy);
|
||||
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(
|
||||
logger& lgr, std::span<uint8_t const> schema, std::span<uint8_t const> data,
|
||||
metadata_options const& options, int inode_offset,
|
||||
|
Loading…
x
Reference in New Issue
Block a user