MCPcopy Create free account
hub / github.com/apache/trafficserver / pre_load

Method pre_load

plugins/experimental/txn_box/plugin/src/query.cc:625–722  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

623}
624
625Errata
626Mod_query_filter::Case::pre_load(Config &cfg, YAML::Node cmp_node)
627{
628 unsigned action_count = 0;
629
630 if (!cmp_node.IsMap()) {
631 return Errata(S_ERROR, "List element at {} for {} modifier is not a comparison object.", cmp_node.Mark(), KEY);
632 }
633
634 if (auto do_node = cmp_node[Global::DO_KEY]; do_node) {
635 return Errata(S_ERROR, R"("{}" at line {} is not allowed in a modifier comparison.)", Global::DO_KEY, do_node.Mark());
636 }
637
638 YAML::Node drop_node = cmp_node[ACTION_DROP];
639 if (drop_node) {
640 _action = DROP;
641 cmp_node.remove(ACTION_DROP);
642 ++action_count;
643 }
644
645 if (YAML::Node pass_node = cmp_node[ACTION_PASS]; pass_node) {
646 _action = PASS;
647 cmp_node.remove(ACTION_PASS);
648 ++action_count;
649 }
650
651 if (YAML::Node replace_node = cmp_node[ACTION_REPLACE]; replace_node) {
652 Errata errata = this->parse_pair(cfg, replace_node, _replace);
653 if (!errata.is_ok()) {
654 errata.note("While parsing expression at {} for {} key in comparison at {}.", replace_node.Mark(), ACTION_REPLACE,
655 cmp_node.Mark());
656 return errata;
657 }
658 _action = REPLACE;
659 cmp_node.remove(ACTION_REPLACE);
660 ++action_count;
661 }
662
663 if (action_count > 1) {
664 return Errata(S_ERROR, "Only one of {}, {}, {} is allowed in the {} comparison at {}.", ACTION_REPLACE, ACTION_DROP,
665 ACTION_PASS, KEY, cmp_node.Mark());
666 }
667
668 YAML::Node opt_node = cmp_node[ACTION_OPT];
669 if (opt_node) {
670 if (!opt_node.IsMap()) {
671 return Errata(S_ERROR, R"("Value for "{}" at {} for "{}" modifier is not an object.)", ACTION_OPT, opt_node.Mark(), KEY);
672 }
673
674 if (YAML::Node vcmp_node = opt_node[OPT_VALUE]; vcmp_node) {
675 auto &&[vcmp, vcmp_errata]{Comparison::load(cfg, vcmp_node)};
676 if (!vcmp_errata.is_ok()) {
677 return std::move(vcmp_errata.note(R"(While parsing "{}" option for "{}" modifier)", OPT_VALUE, KEY));
678 }
679 _value_cmp = std::move(vcmp);
680 opt_node.remove(vcmp_node);
681 }
682

Callers 1

load_caseMethod · 0.45

Calls 8

parse_pairMethod · 0.95
ErrataClass · 0.85
loadFunction · 0.50
MarkMethod · 0.45
removeMethod · 0.45
is_okMethod · 0.45
noteMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected