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 +
"'");
375 {Source::FILESYSTEM,
"filesystem"},
376 {Source::NETWORK,
"network"},
377 {Source::MODEL,
"model"},
378 {Source::TRIGGER,
"trigger"},
379 {Source::INSTANCE,
"instance"},
380 {Source::LUA,
"lua"},
392 inline
bool source_is_transient(Source s) {
393 return (s != Source::FILESYSTEM && s != Source::NETWORK && s != Source::LUA);
402 Trigger(
const std::string& label,
Source s, EventPtr&& e, ActionPtr&& a);
403 TriggerPtr clone()
const;
405 const std::string& label()
const {
return label_; }
406 Source source()
const {
return source_; }
407 Duration since()
const {
return since_; }
408 void set_since(
Duration t) { since_ = t; }
409 const Event& event()
const {
return *event_; }
410 Event& event() {
return *event_; }
411 const Action& action()
const {
return *action_; }
412 Action& action() {
return *action_; }
414 bool is_significant()
const;
415 bool is_transient()
const {
return source_is_transient(source_) || is_conceal(); }
416 bool is_conceal()
const {
return conceal_; }
417 void set_conceal(
bool value =
true);
418 bool is_sticky()
const {
return sticky_; }
419 void set_sticky(
bool value =
true);
429 bool conceal_{
false};
442 virtual ActionPtr make_action(
const Conf& c)
const = 0;
443 virtual EventPtr make_event(
const Conf& c)
const = 0;
444 virtual TriggerPtr make_trigger(
const Conf& c)
const = 0;
446 virtual void insert_trigger(
const Conf& c) = 0;
447 virtual void insert_trigger(TriggerPtr&& t) = 0;
458 void insert_trigger(
const std::string& label, EventPtr&& e, ActionPtr&& a);
484 using Entity::Entity;
485 virtual ~
Event() noexcept =
default;
502 Logger
logger()
const {
return logger::get(
"cloe/event/" +
name()); }
511 using EventFactory = TriggerFactory<Event>;
512 using EventFactoryPtr = std::unique_ptr<EventFactory>;
547 virtual ~
Callback() noexcept =
default;
584 explicit AliasCallback(std::shared_ptr<Callback> owner) : owner_(owner) {}
590 void emplace(TriggerPtr&& t,
const Sync& s)
override { owner_->emplace(std::move(t), s); }
598 std::shared_ptr<Callback> owner_;
621 using Entity::Entity;
622 virtual ~
Action() noexcept =
default;
629 virtual ActionPtr
clone()
const = 0;
658 Logger
logger()
const {
return logger::get(
"cloe/action/" +
name()); }
666 using ActionFactory = TriggerFactory<Action>;
667 using ActionFactoryPtr = std::unique_ptr<ActionFactory>;
Definition: trigger.hpp:619
virtual CallbackResult operator()(const Sync &, TriggerRegistrar &)=0
Logger logger() const
Definition: trigger.hpp:658
virtual void to_json(fable::Json &j) const =0
virtual ActionPtr clone() const =0
virtual bool is_significant() const
Definition: trigger.hpp:648
Definition: trigger.hpp:582
void emplace(TriggerPtr &&t, const Sync &s) override
Definition: trigger.hpp:590
void to_json(fable::Json &) const override
Definition: trigger.hpp:595
Definition: trigger.hpp:545
virtual void emplace(TriggerPtr &&t, const Sync &s)=0
CallbackResult execute(TriggerPtr &&t, const Sync &s)
Definition: trigger.cpp:111
void set_executer(CallbackExecuter exe)
Definition: trigger.hpp:552
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:482
virtual EventPtr clone() const =0
Logger logger() const
Definition: trigger.hpp:502
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:437
Definition: trigger.hpp:400
Definition: schema.hpp:175
Json usage() const override
Definition: schema.hpp:255
const std::string & description() const override
Definition: schema.hpp:253
void set_description(std::string s) override
Definition: schema.hpp:254
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::detail::value_t JsonType
Definition: fable_fwd.hpp:37
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< CallbackResult(TriggerPtr &&, const Sync &)> CallbackExecuter
Definition: trigger.hpp:525
CallbackResult
Definition: trigger.hpp:514
@ Ok
Default, use standard behavior.
@ Unpin
Remove from callback if it was sticky.
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.
@ LUA
Triggers that originate from a Lua script.
@ FILESYSTEM
Triggers that originate from the filesystem, such as stack files.