#ifndef UTILS_THRUSTCURVEAPI_H #define UTILS_THRUSTCURVEAPI_H /// \cond // C headers // C++ headers #include #include #include // 3rd party headers /// \endcond // qtrocket headers #include "utils/CurlConnection.h" #include "model/MotorModel.h" namespace utils { class ThrustcurveMetadata { public: ThrustcurveMetadata() = default; ~ThrustcurveMetadata() = default; ThrustcurveMetadata(const ThrustcurveMetadata&) = default; ThrustcurveMetadata(ThrustcurveMetadata&&) = default; ThrustcurveMetadata& operator=(const ThrustcurveMetadata&) = default; ThrustcurveMetadata& operator=(ThrustcurveMetadata&&) = default; //private: std::vector certOrgs; std::vector diameters; std::vector impulseClasses; std::map manufacturers; std::vector types; }; class SearchCriteria { public: SearchCriteria() = default; ~SearchCriteria() = default; SearchCriteria(const SearchCriteria&) = default; SearchCriteria(SearchCriteria&&) = default; SearchCriteria& operator=(const SearchCriteria&) = default; SearchCriteria& operator=(SearchCriteria&&) = default; void addCriteria(const std::string& name, const std::string& vaue); std::map criteria; }; /** * @brief This API for Thrustcurve.org - It will provide an interface for querying thrustcurve.org * for motor data * */ class ThrustCurveAPI { public: ThrustCurveAPI(); ~ThrustCurveAPI(); /** * @brief getThrustCurve will download the thrust data for the given Motor using the motorId * @param m MotorModel to populate */ model::MotorModel getMotorData(const std::string& motorId); /** * @brief getMetaData */ ThrustcurveMetadata getMetadata(); std::vector searchMotors(const SearchCriteria& c); private: const std::string hostname; CurlConnection curlConnection; std::optional getThrustCurve(const std::string& id); // no extra headers, but CurlConnection library wants them const std::vector extraHeaders{}; }; } // namespace utils #endif // UTILS_THRUSTCURVEAPI_H