Newer
Older
#include <ftl/configurable.hpp>
using ftl::Configurable;
using std::string;
using std::map;
using std::list;
using std::function;
using ftl::config::json_t;
extern nlohmann::json null_json;
Configurable::Configurable() : config_(null_json) {}
void Configurable::required(const char *f, const std::vector<std::tuple<std::string, std::string, std::string>> &r) {
bool diderror = false;
for (auto i : r) {
auto [name, desc, type] = i;
auto ent = get<json_t>(name);
if (!ent || (*ent).type_name() != type) {
LOG(ERROR) << "Missing required option in \"" << f << "\": \"" << name << "\" - " << desc;
//LOG(ERROR) << " Got type " << (*ent).type_name() << " but expected " << type;
diderror = true;
}
}
if (diderror) LOG(FATAL) << "Cannot continue without required option";
}
void Configurable::_trigger(const string &name) {
auto ix = observers_.find(name);
if (ix != observers_.end()) {
for (auto &f : (*ix).second) {
try {
} catch(...) {
LOG(ERROR) << "Exception in event handler for '" << name << "'";
}
}
}
}
void Configurable::on(const string &prop, function<void(const ftl::config::Event&)> f) {
auto ix = observers_.find(prop);
if (ix == observers_.end()) {
observers_[prop] = {f};
} else {
(*ix).second.push_back(f);
}
}
void Configurable::__changeURI(const string &uri, Configurable *cfg) {
}