| 555 | } |
| 556 | |
| 557 | Rv<Directive::Handle> |
| 558 | Config::parse_directive(YAML::Node const &drtv_node) |
| 559 | { |
| 560 | if (drtv_node.IsMap()) { |
| 561 | return this->load_directive(drtv_node); |
| 562 | } else if (drtv_node.IsSequence()) { |
| 563 | Errata zret; |
| 564 | auto list{new DirectiveList}; |
| 565 | Directive::Handle drtv_list{list}; |
| 566 | for (auto child : drtv_node) { |
| 567 | auto &&[handle, errata]{this->load_directive(child)}; |
| 568 | if (errata.is_ok()) { |
| 569 | list->push_back(std::move(handle)); |
| 570 | } else { |
| 571 | errata.note(R"(While loading directives at {}.)", drtv_node.Mark()); |
| 572 | return std::move(errata); |
| 573 | } |
| 574 | } |
| 575 | return drtv_list; |
| 576 | } else if (drtv_node.IsNull()) { |
| 577 | return Directive::Handle(new NilDirective); |
| 578 | } |
| 579 | return Errata(S_ERROR, R"(Directive at {} is not an object or a sequence as required.)", drtv_node.Mark()); |
| 580 | } |
| 581 | |
| 582 | Errata |
| 583 | Config::load_top_level_directive(YAML::Node drtv_node) |