15enum class RulesCheckErrorLevel { NOT_RUN, PASS, WARN, FAIL, DISABLED, CANCELLED };
57 virtual void load_from_json(
const json &j) = 0;
60 throw std::logic_error(
"import_rules not implemented");
64 virtual json serialize()
const = 0;
65 virtual std::vector<RuleID> get_rule_ids()
const = 0;
67 virtual const Rule &get_rule(RuleID
id)
const = 0;
68 Rule &get_rule(RuleID
id);
69 Rule &get_rule_nc(RuleID
id)
74 template <
typename T>
const T &get_rule_t()
const
76 return dynamic_cast<const T &
>(get_rule(T::id));
79 template <
typename T> T &get_rule_t()
81 return dynamic_cast<T &
>(get_rule(T::id));
84 virtual const Rule &get_rule(RuleID
id,
const UUID &uu)
const = 0;
85 Rule &get_rule(RuleID
id,
const UUID &uu);
87 template <
typename T>
const T &get_rule_t(
const UUID &uu)
const
89 return dynamic_cast<const T &
>(get_rule(T::id, uu));
91 template <
typename T> T &get_rule_t(
const UUID &uu)
93 return dynamic_cast<T &
>(get_rule(T::id, uu));
96 virtual std::map<UUID, const Rule *> get_rules(RuleID
id)
const = 0;
97 std::map<UUID, Rule *> get_rules(RuleID
id);
98 std::map<UUID, Rule *> get_rules_nc(RuleID
id)
100 return get_rules(
id);
103 template <
typename T = Rule> std::vector<const T *> get_rules_sorted(RuleID
id)
const
105 auto rs = get_rules(
id);
106 std::vector<const T *> rv;
107 rv.reserve(rs.size());
108 for (
auto &it : rs) {
109 rv.push_back(
dynamic_cast<const T *
>(it.second));
111 std::sort(rv.begin(), rv.end(), [](
auto a,
auto b) { return a->order < b->order; });
115 template <
typename T> std::vector<const T *> get_rules_sorted()
const
117 return get_rules_sorted<T>(T::id);
120 template <
typename T = Rule> std::vector<T *> get_rules_sorted(RuleID
id)
123 auto rs =
static_cast<const Rules *
>(
this)->get_rules_sorted<T>(
id);
124 r.reserve(rs.size());
125 std::transform(rs.begin(), rs.end(), std::back_inserter(r), [](
auto x) { return const_cast<T *>(x); });
129 template <
typename T> std::vector<T *> get_rules_sorted()
131 return get_rules_sorted<T>(T::id);
134 virtual void remove_rule(RuleID
id,
const UUID &uu) = 0;
135 template <
typename T> T &add_rule_t()
137 return dynamic_cast<T &
>(add_rule(T::id));
139 virtual Rule &add_rule(RuleID
id) = 0;
140 void move_rule(RuleID
id,
const UUID &uu,
int dir);
144 virtual bool can_export()
const
150 void fix_order(RuleID
id);