#ifndef BIERGARTEN_PIPELINE_INCLUDES_JSON_HANDLING_JSON_LOADER_H_ #define BIERGARTEN_PIPELINE_INCLUDES_JSON_HANDLING_JSON_LOADER_H_ /** * @file json_handling/json_loader.h * @brief JSON-backed implementation of ICuratedDataService. */ #include #include #include #include "data_model/models.h" #include "services/curated_data/curated_data_service.h" /** * @brief Loads curated location, persona, and name data from JSON files. */ class JsonLoader final : public ICuratedDataService { struct cache { std::vector locations; std::vector personas; std::unordered_map forenames_by_country; std::unordered_map surnames_by_country; cache() = default; ~cache() = default; }; cache cache_; public: JsonLoader() = default; /** * @brief Parses a JSON array file and returns all location records. */ std::vector LoadLocations(const std::filesystem::path&) override; /** * @brief Parses a JSON array file and returns all persona records. */ std::vector LoadPersonas(const std::filesystem::path&) override; std::unordered_map LoadForenamesByCountry( const std::filesystem::path&) override; /** * @brief Parses a JSON file and returns all the forenames per country. */ std::unordered_map LoadSurnamesByCountry( const std::filesystem::path&) override; }; #endif // BIERGARTEN_PIPELINE_INCLUDES_JSON_HANDLING_JSON_LOADER_H_