mirror of
				https://github.com/ciphervance/supercell-wx.git
				synced 2025-11-04 09:20:05 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			80 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
#pragma once
 | 
						|
 | 
						|
#include <scwx/awips/text_product_file.hpp>
 | 
						|
#include <scwx/types/iem_types.hpp>
 | 
						|
#include <scwx/util/logger.hpp>
 | 
						|
 | 
						|
#include <memory>
 | 
						|
#include <string>
 | 
						|
#include <vector>
 | 
						|
 | 
						|
#include <boost/outcome/result.hpp>
 | 
						|
#include <cpr/session.h>
 | 
						|
#include <range/v3/range/concepts.hpp>
 | 
						|
 | 
						|
#if defined(_MSC_VER)
 | 
						|
#   pragma warning(push)
 | 
						|
#   pragma warning(disable : 4702)
 | 
						|
#endif
 | 
						|
 | 
						|
#if defined(_MSC_VER)
 | 
						|
#   pragma warning(pop)
 | 
						|
#endif
 | 
						|
 | 
						|
namespace scwx::provider
 | 
						|
{
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief Warnings Provider
 | 
						|
 */
 | 
						|
class IemApiProvider
 | 
						|
{
 | 
						|
public:
 | 
						|
   explicit IemApiProvider();
 | 
						|
   ~IemApiProvider();
 | 
						|
 | 
						|
   IemApiProvider(const IemApiProvider&)            = delete;
 | 
						|
   IemApiProvider& operator=(const IemApiProvider&) = delete;
 | 
						|
 | 
						|
   IemApiProvider(IemApiProvider&&) noexcept;
 | 
						|
   IemApiProvider& operator=(IemApiProvider&&) noexcept;
 | 
						|
 | 
						|
   static boost::outcome_v2::result<std::vector<types::iem::AfosEntry>>
 | 
						|
   ListTextProducts(std::chrono::sys_days           date,
 | 
						|
                    std::optional<std::string_view> cccc = {},
 | 
						|
                    std::optional<std::string_view> pil  = {});
 | 
						|
 | 
						|
   template<ranges::forward_range DateRange,
 | 
						|
            ranges::forward_range CcccRange,
 | 
						|
            ranges::forward_range PilRange>
 | 
						|
      requires std::same_as<ranges::range_value_t<DateRange>,
 | 
						|
                            std::chrono::sys_days> &&
 | 
						|
               std::same_as<ranges::range_value_t<CcccRange>,
 | 
						|
                            std::string_view> &&
 | 
						|
               std::same_as<ranges::range_value_t<PilRange>, std::string_view>
 | 
						|
   static boost::outcome_v2::result<std::vector<types::iem::AfosEntry>>
 | 
						|
   ListTextProducts(DateRange dates, CcccRange ccccs, PilRange pils);
 | 
						|
 | 
						|
   template<ranges::forward_range Range>
 | 
						|
      requires std::same_as<ranges::range_value_t<Range>, std::string>
 | 
						|
   static std::vector<std::shared_ptr<awips::TextProductFile>>
 | 
						|
   LoadTextProducts(const Range& textProducts);
 | 
						|
 | 
						|
private:
 | 
						|
   class Impl;
 | 
						|
   std::unique_ptr<Impl> p;
 | 
						|
 | 
						|
   static boost::outcome_v2::result<std::vector<types::iem::AfosEntry>>
 | 
						|
   ProcessTextProductLists(std::vector<cpr::AsyncResponse>& asyncResponses);
 | 
						|
   static std::vector<std::shared_ptr<awips::TextProductFile>>
 | 
						|
   ProcessTextProductFiles(
 | 
						|
      std::vector<std::pair<std::string, cpr::AsyncResponse>>& asyncResponses);
 | 
						|
 | 
						|
   static const std::shared_ptr<spdlog::logger> logger_;
 | 
						|
 | 
						|
   static const std::string kBaseUrl_;
 | 
						|
   static const std::string kListNwsTextProductsEndpoint_;
 | 
						|
   static const std::string kNwsTextProductEndpoint_;
 | 
						|
};
 | 
						|
 | 
						|
} // namespace scwx::provider
 |