#include "storage.hpp" #include #define TYPES ::yycc::carton::binstore::types #define CFG ::yycc::carton::binstore::configuration #define SERDES ::yycc::carton::binstore::serializer namespace yycc::carton::binstore::storage { #pragma region Storage Class Storage::Storage(CFG::Configuration&& cfg) : cfg(std::move(cfg)), raws() {} Storage::~Storage() {} TYPES::BinstoreResult Storage::load_from_file(const std::filesystem::path& fpath, LoadStrategy strategy) { std::ifstream fs(fpath, std::ios::binary); if (fs.is_open()) { auto rv = this->load(fs, strategy); fs.close(); return rv; } else { return std::unexpected(TYPES::BinstoreError::Io); } } TYPES::BinstoreResult Storage::load(std::istream& s, LoadStrategy strategy) { return TYPES::BinstoreResult(); } TYPES::BinstoreResult Storage::save_into_file(const std::filesystem::path& fpath) { std::ofstream fs(fpath, std::ios::binary); if (fs.is_open()) { auto rv = this->save(fs); fs.close(); return rv; } else { return std::unexpected(TYPES::BinstoreError::Io); } } TYPES::BinstoreResult Storage::save(std::ostream& s) { return TYPES::BinstoreResult(); } bool Storage::has_setting(TYPES::Token token) const { return this->cfg.get_settings().has_setting(token); } bool Storage::is_setting_stored(TYPES::Token token) const { if (!this->has_setting(token)) throw std::logic_error("given setting token is invalid"); return this->raws.contains(token); } const TYPES::ByteArray& Storage::get_raw_value(TYPES::Token token) const { if (!this->has_setting(token)) throw std::logic_error("given setting token is invalid"); auto finder = this->raws.find(token); if (finder != this->raws.end()) { return finder->second; } else { throw std::logic_error("given setting has not been stored yet"); } } void Storage::set_raw_value(TYPES::Token token, TYPES::ByteArray&& ba) { if (!this->has_setting(token)) throw std::logic_error("given setting token is invalid"); this->raws.insert_or_assign(token, std::move(ba)); } #pragma endregion } // namespace yycc::carton::binstore::storage