1 #pragma once 2 3 #include "interfaces/json_storage.hpp" 4 5 class PersistentJsonStorage : public interfaces::JsonStorage 6 { 7 public: 8 explicit PersistentJsonStorage(const DirectoryPath& directory); 9 10 void store(const FilePath& subPath, const nlohmann::json& data) override; 11 bool remove(const FilePath& subPath) override; 12 bool exist(const FilePath& path) const override; 13 std::optional<nlohmann::json> load(const FilePath& subPath) const override; 14 std::vector<FilePath> list() const override; 15 16 private: 17 DirectoryPath directory; 18 19 static std::filesystem::path join(const std::filesystem::path&, 20 const std::filesystem::path&); 21 static void limitPermissions(const std::filesystem::path& path); 22 static void assertThatPathIsNotSymlink(const std::filesystem::path& path); 23 }; 24