1 #pragma once
2 
3 #include "interfaces/json_storage.hpp"
4 #include "interfaces/report.hpp"
5 #include "interfaces/report_manager.hpp"
6 #include "interfaces/types.hpp"
7 
8 #include <boost/asio/spawn.hpp>
9 
10 #include <chrono>
11 #include <memory>
12 #include <optional>
13 
14 namespace interfaces
15 {
16 
17 class ReportFactory
18 {
19   public:
20     virtual ~ReportFactory() = default;
21 
22     virtual std::unique_ptr<interfaces::Report> make(
23         std::optional<std::reference_wrapper<boost::asio::yield_context>> yield,
24         const std::string& name, const std::string& reportingType,
25         bool emitsReadingsSignal, bool logToMetricReportsCollection,
26         std::chrono::milliseconds period, const ReadingParameters& metricParams,
27         ReportManager& reportManager, JsonStorage& reportStorage) const = 0;
28 };
29 
30 } // namespace interfaces
31