#pragma once #include #include namespace scwx { namespace provider { /** * @brief AWS NEXRAD Data Provider */ class AwsNexradDataProvider : public NexradDataProvider { public: explicit AwsNexradDataProvider(const std::string& radarSite, const std::string& bucketName, const std::string& region); virtual ~AwsNexradDataProvider(); AwsNexradDataProvider(const AwsNexradDataProvider&) = delete; AwsNexradDataProvider& operator=(const AwsNexradDataProvider&) = delete; AwsNexradDataProvider(AwsNexradDataProvider&&) noexcept; AwsNexradDataProvider& operator=(AwsNexradDataProvider&&) noexcept; size_t cache_size() const override; std::chrono::system_clock::time_point last_modified() const override; std::chrono::seconds update_period() const override; std::string FindKey(std::chrono::system_clock::time_point time) override; std::string FindLatestKey() override; std::vector GetTimePointsByDate(std::chrono::system_clock::time_point date) override; std::pair ListObjects(std::chrono::system_clock::time_point date) override; std::shared_ptr LoadObjectByKey(const std::string& key) override; std::pair Refresh() override; protected: std::shared_ptr client(); virtual std::string GetPrefix(std::chrono::system_clock::time_point date) = 0; private: class Impl; std::unique_ptr p; }; } // namespace provider } // namespace scwx