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)) {}
134 InlineSchema(std::string desc, std::string format,
bool required =
true)
135 : type_(fable::JsonType::string)
136 , required_(required)
137 , usage_(std::move(format))
138 , desc_(std::move(desc)) {}
159 bool is_enabled()
const {
return !(required_ && type_ == fable::JsonType::null); }
194 std::string
usage(
const std::string& name)
const;
198 bool required_{
true};
199 std::string usage_{};
225 : name_(std::move(name)), schema_(std::move(desc)), inline_(true) {}
231 TriggerSchema(std::string name, std::string desc, fable::schema::PropertyList<> props)
232 : name_(std::move(name)), schema_(std::move(desc), std::move(props)), inline_(false) {}
239 : name_(std::move(name)), schema_(std::move(s)), inline_(false) {
248 fable::schema::PropertyList<> props)
249 : name_(std::move(name))
250 , schema_(std::move(desc), std::move(props))
251 , inline_(std::move(usage)) {}
258 : name_(std::move(name)), schema_(std::move(init)), inline_(std::move(usage)) {
262 const std::string& name()
const {
return name_; }
263 const std::string& description()
const {
return schema_.
description(); }
264 std::string usage_inline()
const {
return inline_.
usage(name_); }
271 InlineSchema inline_;
289 template <
typename T>
292 using Entity::Entity;
313 virtual std::unique_ptr<T>
make(
const Conf& c)
const = 0;
328 virtual std::unique_ptr<T>
make(
const std::string& s)
const {
334 {
"name", this->
name()},
336 return this->
make(c);
339 "cannot create " + this->
name() +
" from '" + s +
"'");
372 {Source::FILESYSTEM,
"filesystem"},
373 {Source::NETWORK,
"network"},
374 {Source::MODEL,
"model"},
375 {Source::TRIGGER,
"trigger"},
376 {Source::INSTANCE,
"instance"},
388 inline
bool source_is_transient(Source s) {
389 return (s != Source::FILESYSTEM && s != Source::NETWORK);
398 Trigger(
const std::string& label,
Source s, EventPtr&& e, ActionPtr&& a);
399 TriggerPtr clone()
const;
401 const std::string& label()
const {
return label_; }
402 Source source()
const {
return source_; }
403 Duration since()
const {
return since_; }
404 void set_since(
Duration t) { since_ = t; }
405 const Event& event()
const {
return *event_; }
406 Event& event() {
return *event_; }
407 const Action& action()
const {
return *action_; }
408 Action& action() {
return *action_; }
410 bool is_significant()
const;
411 bool is_transient()
const {
return source_is_transient(source_) || is_conceal(); }
412 bool is_conceal()
const {
return conceal_; }
413 void set_conceal(
bool value =
true);
414 bool is_sticky()
const {
return sticky_; }
415 void set_sticky(
bool value =
true);
425 bool conceal_{
false};
438 virtual ActionPtr make_action(
const Conf& c)
const = 0;
439 virtual EventPtr make_event(
const Conf& c)
const = 0;
440 virtual TriggerPtr make_trigger(
const Conf& c)
const = 0;
442 virtual void insert_trigger(
const Conf& c) = 0;
443 virtual void insert_trigger(TriggerPtr&& t) = 0;
454 void insert_trigger(
const std::string& label, EventPtr&& e, ActionPtr&& a);
480 using Entity::Entity;
481 virtual ~
Event() noexcept =
default;
498 Logger
logger()
const {
return logger::get(
"cloe/event/" +
name()); }
507 using EventFactory = TriggerFactory<Event>;
508 using EventFactoryPtr = std::unique_ptr<EventFactory>;
535 virtual ~
Callback() noexcept =
default;
572 explicit AliasCallback(std::shared_ptr<Callback> owner) : owner_(owner) {}
578 void emplace(TriggerPtr&& t,
const Sync& s)
override { owner_->emplace(std::move(t), s); }
586 std::shared_ptr<Callback> owner_;
609 using Entity::Entity;
610 virtual ~
Action() noexcept =
default;
617 virtual ActionPtr
clone()
const = 0;
646 Logger
logger()
const {
return logger::get(
"cloe/action/" +
name()); }
654 using ActionFactory = TriggerFactory<Action>;
655 using ActionFactoryPtr = std::unique_ptr<ActionFactory>;
Definition: trigger.hpp:607
Logger logger() const
Definition: trigger.hpp:646
virtual void operator()(const Sync &, TriggerRegistrar &)=0
virtual void to_json(fable::Json &j) const =0
virtual ActionPtr clone() const =0
virtual bool is_significant() const
Definition: trigger.hpp:636
Definition: trigger.hpp:570
void emplace(TriggerPtr &&t, const Sync &s) override
Definition: trigger.hpp:578
void to_json(fable::Json &) const override
Definition: trigger.hpp:583
Definition: trigger.hpp:533
void execute(TriggerPtr &&t, const Sync &s)
Definition: trigger.cpp:111
virtual void emplace(TriggerPtr &&t, const Sync &s)=0
void set_executer(CallbackExecuter exe)
Definition: trigger.hpp:540
virtual void to_json(fable::Json &j) const =0
Definition: entity.hpp:50
const std::string & description() const
Definition: entity.hpp:90
const std::string & name() const
Definition: entity.hpp:67
Definition: trigger.hpp:478
virtual EventPtr clone() const =0
Logger logger() const
Definition: trigger.hpp:498
virtual void to_json(fable::Json &) const =0
Definition: trigger.hpp:60
Definition: trigger.hpp:290
virtual std::unique_ptr< T > make(const std::string &s) const
Definition: trigger.hpp:328
virtual fable::Json json_schema() const
Definition: trigger.hpp:306
virtual TriggerSchema schema() const
Definition: trigger.hpp:301
virtual std::unique_ptr< T > make(const Conf &c) const =0
Definition: trigger.hpp:73
Definition: trigger.hpp:433
Definition: trigger.hpp:396
Definition: schema.hpp:173
Json usage() const override
Definition: schema.hpp:253
const std::string & description() const override
Definition: schema.hpp:251
void set_description(std::string s) override
Definition: schema.hpp:252
std::chrono::nanoseconds Duration
Definition: cloe_fwd.hpp:36
#define ENUM_SERIALIZATION(xType, xMap)
Definition: enum.hpp:51
nlohmann::json Json
Definition: fable_fwd.hpp:35
nlohmann::json::value_t JsonType
Definition: json.hpp:78
Definition: trigger.hpp:87
InlineSchema(std::string desc)
Definition: trigger.hpp:102
const std::string & description() const
Definition: trigger.hpp:143
InlineSchema(bool enabled)
Definition: trigger.hpp:97
std::string usage(const std::string &name) const
Definition: trigger.cpp:42
InlineSchema(std::string desc, std::string format, bool required=true)
Definition: trigger.hpp:134
bool is_required() const
Definition: trigger.hpp:170
InlineSchema(std::string desc, fable::JsonType type, bool required=true)
bool is_enabled() const
Definition: trigger.hpp:159
fable::JsonType type() const
Definition: trigger.hpp:151
Definition: trigger.hpp:207
TriggerSchema(std::string name, std::string desc, Schema s)
Definition: trigger.hpp:238
TriggerSchema(std::string name, std::string desc, fable::schema::PropertyList<> props)
Definition: trigger.hpp:231
TriggerSchema(std::string name, std::string desc, InlineSchema usage, Schema init)
Definition: trigger.hpp:257
TriggerSchema(std::string name, std::string desc)
Definition: trigger.hpp:224
TriggerSchema(std::string name, std::string desc, InlineSchema usage, fable::schema::PropertyList<> props)
Definition: trigger.hpp:247
std::function< void(TriggerPtr &&, const Sync &)> CallbackExecuter
Definition: trigger.hpp:513
Source
Definition: trigger.hpp:351
@ INSTANCE
Triggers that are instance of a sticky trigger.
@ MODEL
Triggers that originate from models, such as a simulator binding.
@ FILESYSTEM
Triggers that originate from the filesystem, such as stack files.