#pragma once #include namespace Aws::S3 { class S3Client; } // namespace Aws::S3 namespace scwx::provider { /** * @brief AWS Level 2 Data Provider */ class AwsLevel2ChunksDataProvider : public NexradDataProvider { public: explicit AwsLevel2ChunksDataProvider(const std::string& radarSite); explicit AwsLevel2ChunksDataProvider(const std::string& radarSite, const std::string& bucketName, const std::string& region); ~AwsLevel2ChunksDataProvider() override; AwsLevel2ChunksDataProvider(const AwsLevel2ChunksDataProvider&) = delete; AwsLevel2ChunksDataProvider& operator=(const AwsLevel2ChunksDataProvider&) = delete; AwsLevel2ChunksDataProvider(AwsLevel2ChunksDataProvider&&) noexcept; AwsLevel2ChunksDataProvider& operator=(AwsLevel2ChunksDataProvider&&) noexcept; [[nodiscard]] std::chrono::system_clock::time_point GetTimePointByKey(const std::string& key) const override; [[nodiscard]] size_t cache_size() const override; [[nodiscard]] std::chrono::system_clock::time_point last_modified() const override; [[nodiscard]] std::chrono::seconds update_period() const override; std::string FindKey(std::chrono::system_clock::time_point time) override; std::string FindLatestKey() override; std::chrono::system_clock::time_point FindLatestTime() override; std::vector GetTimePointsByDate(std::chrono::system_clock::time_point date) override; std::tuple ListObjects(std::chrono::system_clock::time_point date) override; std::shared_ptr LoadObjectByKey(const std::string& key) override; std::shared_ptr LoadObjectByTime(std::chrono::system_clock::time_point time) override; std::shared_ptr LoadLatestObject() override; std::shared_ptr LoadSecondLatestObject() override; std::pair Refresh() override; void RequestAvailableProducts() override; std::vector GetAvailableProducts() override; private: class Impl; std::unique_ptr p; }; } // namespace scwx::provider