41 PluginError(
const std::string& path,
const std::string& what) :
Error(what), plugin_path_(path) {}
42 PluginError(
const std::string& path,
const char* what) :
Error(what), plugin_path_(path) {}
44 template <
typename... Args>
45 PluginError(
const std::string& path,
const char* format,
const Args&... args)
46 :
Error(format, args...), plugin_path_(path) {}
48 virtual ~PluginError() noexcept =
default;
55 const std::string&
plugin_path()
const {
return plugin_path_; }
58 std::string plugin_path_;
128 std::string
path()
const {
return path_; }
133 std::string
name()
const {
return name_; }
138 std::string
type()
const {
return manifest_.plugin_type; }
143 std::string
type_version()
const {
return manifest_.plugin_type_version; }
148 std::string required_type_version()
const;
158 bool is_builtin()
const;
163 bool is_type_known()
const;
171 bool is_compatible()
const;
178 template <
typename F>
179 std::unique_ptr<F>
make()
const {
180 if (!is_compatible()) {
181 throw PluginError(path(),
"cannot make factory from incompatible plugin");
184 auto f = std::unique_ptr<F>(
dynamic_cast<F*
>(createf_()));
189 friend void to_json(Json& j,
const Plugin& p) {
205 std::function<ModelFactory*()> createf_;
211 template <
typename F>
212 std::shared_ptr<Plugin> make_plugin() {
214 BASE_CLOE_FACTORY(F)::PLUGIN_TYPE,
215 BASE_CLOE_FACTORY(F)::PLUGIN_API_VERSION,
219 auto fn = []() {
return new F(); };
220 return std::make_shared<Plugin>(manifest, fn);
std::string name() const
Definition: plugin.hpp:133
std::unique_ptr< F > make() const
Definition: plugin.hpp:179
Definition: plugin.hpp:39
Definition: plugin.hpp:61
std::string path() const
Definition: plugin.hpp:128
Definition: coordinator.hpp:36
Definition: schema.hpp:178
bool is_type_known() const
Definition: plugin.cpp:172
Definition: plugin.hpp:151
bool is_compatible() const
Definition: plugin.cpp:174
Definition: model.hpp:414
std::string type_version() const
Definition: plugin.hpp:143
const std::string & plugin_path() const
Definition: plugin.hpp:55
std::string type() const
Definition: plugin.hpp:138