28 #ifndef CLOE_TRIGGER_HPP_ 29 #define CLOE_TRIGGER_HPP_ 47 using EventPtr = std::unique_ptr<Event>;
48 using EventPtrs = std::vector<EventPtr>;
50 using ActionPtr = std::unique_ptr<Action>;
51 using ActionPtrs = std::vector<ActionPtr>;
53 using TriggerPtr = std::unique_ptr<Trigger>;
54 using TriggerPtrs = std::vector<TriggerPtr>;
78 const Conf& conf()
const {
return conf_; }
102 explicit InlineSchema(std::string&& desc) : required_(false), desc_(
std::move(desc)) {}
109 InlineSchema(std::string&& desc, JsonType type,
bool required =
true);
134 InlineSchema(std::string&& desc, std::string&& format,
bool required =
true)
135 : type_(JsonType::string)
136 , required_(required)
137 , usage_(
std::move(format))
138 , desc_(
std::move(desc)) {}
151 JsonType
type()
const {
return type_; }
159 bool is_enabled()
const {
return !(required_ && type_ == JsonType::null); }
194 std::string usage(
const std::string& name)
const;
197 JsonType type_{JsonType::null};
198 bool required_{
true};
199 std::string usage_{};
225 : name_(name), schema_(
std::string(desc)), inline_(true) {}
232 fable::schema::PropertyList<> props)
233 : name_(name), schema_(
std::string(desc), props), inline_(false) {}
240 : name_(name), schema_(
std::move(s)), inline_(false) {
241 schema_.set_description(desc);
249 fable::schema::PropertyList<> props)
250 : name_(name), schema_(
std::string(desc), props), inline_(
std::move(usage)) {}
258 : name_(name), schema_(
std::move(init)), inline_(
std::move(usage)) {
259 schema_.set_description(desc);
268 : name_(name), schema_(init), inline_(
std::move(usage)) {
269 schema_.set_description(desc);
272 const std::string& name()
const {
return name_; }
273 const std::string& description()
const {
return schema_.description(); }
274 std::string usage_inline()
const {
return inline_.usage(name_); }
275 Json usage()
const {
return schema_.usage(); }
276 Json json_schema()
const;
299 template <
typename T>
302 using Entity::Entity;
316 virtual Json
json_schema()
const {
return this->schema().json_schema(); }
323 virtual std::unique_ptr<T> make(
const Conf& c)
const = 0;
338 virtual std::unique_ptr<T>
make(
const std::string& s)
const {
344 {
"name", this->name()},
346 return this->make(c);
348 throw TriggerInvalid(
Conf{Json{s}},
"cannot create " + this->name() +
" from '" + s +
"'");
381 {Source::FILESYSTEM,
"filesystem"},
382 {Source::NETWORK,
"network"},
383 {Source::MODEL,
"model"},
384 {Source::TRIGGER,
"trigger"},
385 {Source::INSTANCE,
"instance"},
397 inline bool source_is_transient(
Source s) {
398 return (s != Source::FILESYSTEM && s != Source::NETWORK);
407 Trigger(
const std::string& label,
Source s, EventPtr&& e, ActionPtr&& a);
408 TriggerPtr clone()
const;
410 const std::string& label()
const {
return label_; }
411 Source source()
const {
return source_; }
412 Duration since()
const {
return since_; }
413 void set_since(
Duration t) { since_ = t; }
414 const Event& event()
const {
return *event_; }
415 Event& event() {
return *event_; }
416 const Action& action()
const {
return *action_; }
417 Action& action() {
return *action_; }
419 bool is_significant()
const;
420 bool is_transient()
const {
return source_is_transient(source_) || is_conceal(); }
421 bool is_conceal()
const {
return conceal_; }
422 void set_conceal(
bool value =
true);
423 bool is_sticky()
const {
return sticky_; }
424 void set_sticky(
bool value =
true);
426 friend void to_json(Json& j,
const Trigger& t);
434 bool conceal_{
false};
447 virtual ActionPtr make_action(
const Conf& c)
const = 0;
448 virtual EventPtr make_event(
const Conf& c)
const = 0;
449 virtual TriggerPtr make_trigger(
const Conf& c)
const = 0;
451 virtual void insert_trigger(
const Conf& c) = 0;
452 virtual void insert_trigger(TriggerPtr&& t) = 0;
463 void insert_trigger(
const std::string& label, EventPtr&& e, ActionPtr&& a);
489 using Entity::Entity;
490 virtual ~
Event() noexcept =
default;
497 virtual EventPtr clone()
const = 0;
503 virtual void to_json(Json&)
const = 0;
504 friend void to_json(Json& j,
const Event& e);
507 Logger
logger()
const {
return logger::get(
"cloe/event/" + name()); }
517 using EventFactoryPtr = std::unique_ptr<EventFactory>;
544 virtual ~
Callback() noexcept =
default;
554 virtual void emplace(TriggerPtr&& t,
const Sync& s) = 0;
559 virtual void to_json(Json& j)
const = 0;
567 void execute(TriggerPtr&& t,
const Sync& s);
581 explicit AliasCallback(std::shared_ptr<Callback> owner) : owner_(owner) {}
587 void emplace(TriggerPtr&& t,
const Sync& s)
override { owner_->emplace(std::move(t), s); }
595 std::shared_ptr<Callback> owner_;
618 using Entity::Entity;
619 virtual ~
Action() noexcept =
default;
626 virtual ActionPtr clone()
const = 0;
651 virtual void to_json(Json& j)
const = 0;
652 friend void to_json(Json& j,
const Action& a);
655 Logger
logger()
const {
return logger::get(
"cloe/action/" + name()); }
664 using ActionFactoryPtr = std::unique_ptr<ActionFactory>;
667 #endif // CLOE_TRIGGER_HPP_
virtual void to_json(Json &j) const =0
InlineSchema(std::string &&desc, std::string &&format, bool required=true)
Definition: trigger.hpp:134
Definition: trigger.hpp:73
bool is_enabled() const
Definition: trigger.hpp:159
InlineSchema(std::string &&desc)
Definition: trigger.hpp:102
virtual bool is_significant() const
Definition: trigger.hpp:645
virtual TriggerSchema schema() const
Definition: trigger.hpp:311
Definition: trigger.hpp:579
virtual Json json_schema() const
Definition: trigger.hpp:316
virtual std::unique_ptr< T > make(const std::string &s) const
Definition: trigger.hpp:338
Definition: trigger.hpp:442
Definition: trigger.hpp:405
void to_json(Json &) const override
Definition: trigger.hpp:592
Definition: trigger.hpp:616
Source
Definition: trigger.hpp:360
Definition: coordinator.hpp:36
TriggerSchema(const std::string &name, const std::string &desc, InlineSchema &&usage, Schema &&init)
Definition: trigger.hpp:256
std::chrono::nanoseconds Duration
Definition: duration.hpp:45
void emplace(TriggerPtr &&t, const Sync &s) override
Definition: trigger.hpp:587
Definition: trigger.hpp:60
TriggerSchema(const std::string &name, const std::string &desc, fable::schema::PropertyList<> props)
Definition: trigger.hpp:231
Definition: trigger.hpp:487
Definition: schema.hpp:178
Definition: enum_test.cpp:29
std::function< void(TriggerPtr &&, const Sync &)> CallbackExecuter
Definition: trigger.hpp:522
Definition: trigger.hpp:300
#define ENUM_SERIALIZATION(xType, xMap)
Definition: enum.hpp:52
Definition: entity.hpp:51
JsonType type() const
Definition: trigger.hpp:151
void set_executer(CallbackExecuter exe)
Definition: trigger.hpp:549
TriggerSchema(const std::string &name, const std::string &desc, InlineSchema &&usage, const Schema &init)
Definition: trigger.hpp:266
const std::string & description() const
Definition: trigger.hpp:143
bool is_required() const
Definition: trigger.hpp:170
TriggerSchema(const std::string &name, const std::string &desc, InlineSchema &&usage, fable::schema::PropertyList<> props)
Definition: trigger.hpp:248
Definition: trigger.hpp:542
TriggerSchema(const std::string &name, const std::string &desc)
Definition: trigger.hpp:224
InlineSchema(bool enabled)
Definition: trigger.hpp:97
Definition: trigger.hpp:87
TriggerSchema(const std::string &name, const std::string &desc, Schema &&s)
Definition: trigger.hpp:239
Definition: trigger.hpp:207