Aktualizr
C++ SOTA Client
All Classes Namespaces Files Functions Variables Enumerations Enumerator Pages
packagemanagerfactory.h
1 #ifndef PACKAGEMANAGERFACTORY_H_
2 #define PACKAGEMANAGERFACTORY_H_
3 
4 #include "config/config.h"
5 #include "package_manager/packagemanagerinterface.h"
6 #include "storage/invstorage.h"
7 
8 using PackageManagerBuilder =
9  std::function<PackageManagerInterface*(const PackageConfig&, const BootloaderConfig&,
10  const std::shared_ptr<INvStorage>&, const std::shared_ptr<HttpInterface>&)>;
11 
13  public:
14  static bool registerPackageManager(const char* name, PackageManagerBuilder builder);
15  static std::shared_ptr<PackageManagerInterface> makePackageManager(const PackageConfig& pconfig,
16  const BootloaderConfig& bconfig,
17  const std::shared_ptr<INvStorage>& storage,
18  const std::shared_ptr<HttpInterface>& http);
19 };
20 
21 // macro to auto-register a package manager
22 // note that static library users will have to call `registerPackageManager` manually
23 
24 #define AUTO_REGISTER_PACKAGE_MANAGER(name, clsname) \
25  class clsname##_PkgMRegister_ { \
26  public: \
27  clsname##_PkgMRegister_() { \
28  PackageManagerFactory::registerPackageManager( \
29  name, [](const PackageConfig& pconfig, const BootloaderConfig& bconfig, \
30  const std::shared_ptr<INvStorage>& storage, const std::shared_ptr<HttpInterface>& http) { \
31  return new clsname(pconfig, bconfig, storage, http); \
32  }); \
33  } \
34  }; \
35  static clsname##_PkgMRegister_ clsname##_register_
36 
37 #endif // PACKAGEMANAGERFACTORY_H_