26#ifndef MYSQLROUTER_CONFIG_SECTION_PRINTER_INCLUDED 
   27#define MYSQLROUTER_CONFIG_SECTION_PRINTER_INCLUDED 
   29#include "harness_export.h" 
   46      std::ostream &ostream,
 
   47      const std::map<std::string, std::string> &config_cmdln_options,
 
   48      const std::string §ion_name)
 
   50        config_cmdln_options_(config_cmdln_options),
 
   51        section_name_(section_name) {
 
   52    auto section_name_lc = section_name;
 
   54                   section_name_lc.begin(), ::
tolower);
 
   56    used_sections_.insert(section_name_lc);
 
   60                                 bool force_empty = 
false) {
 
   61    std::string key_s(
key);
 
   62    std::string cmdln_option_key = section_name_ + 
"." + key_s;
 
   64                   cmdln_option_key.begin(), ::
tolower);
 
   67    if (config_cmdln_options_.contains(cmdln_option_key)) {
 
   68      section_options_.emplace_back(
key,
 
   69                                    config_cmdln_options_.at(cmdln_option_key));
 
   71      used_cmdln_options_.insert(key_s);
 
   72    } 
else if (!
value.empty() || force_empty) {
 
   73      section_options_.emplace_back(
key, 
value);
 
   83    for (
const auto &cmdln_option : config_cmdln_options_) {
 
   84      const auto &cmdln_option_key = cmdln_option.first;
 
   85      const auto dot = cmdln_option_key.find(
'.');
 
   86      if (dot == std::string::npos) 
continue;
 
   87      const std::string section = cmdln_option_key.substr(0, dot);
 
   89      std::string section_name_lowerc = section_name_;
 
   90      std::transform(section_name_lowerc.begin(), section_name_lowerc.end(),
 
   91                     section_name_lowerc.begin(), ::
tolower);
 
   93      if (section != section_name_lowerc) 
continue;
 
   95      const std::string option =
 
   96          cmdln_option_key.substr(dot + 1, cmdln_option_key.length() - dot - 1);
 
   98      if (!used_cmdln_options_.contains(option))
 
   99        section_options_.emplace_back(option, cmdln_option.second);
 
  106      std::ostream &ostream,
 
  107      const std::map<std::string, std::string> &config_cmdln_options) {
 
  108    std::string current_section;
 
  109    std::vector<ConfigBuilder::kv_type> section_options;
 
  111    for (
const auto &cmdln_option : config_cmdln_options) {
 
  112      const auto &cmdln_option_key = cmdln_option.first;
 
  113      const auto dot = cmdln_option_key.find(
'.');
 
  115      assert(dot != std::string::npos);
 
  116      const std::string section_name = cmdln_option_key.substr(0, dot);
 
  121      if (section_name == 
"mysql_rest_service") {
 
  125      if (used_sections_.contains(section_name)) {
 
  129      if (section_name != current_section) {
 
  130        if (!current_section.empty()) {
 
  134        current_section = section_name;
 
  135        section_options.clear();
 
  138      const std::string option =
 
  139          cmdln_option_key.substr(dot + 1, cmdln_option_key.length() - dot - 1);
 
  141      section_options.emplace_back(option, cmdln_option.second);
 
  144    if (!current_section.empty()) {
 
static std::string build_section(const std::string §ion, const std::initializer_list< kv_type > &pairs)
build a config file section from key-value pairs.
Definition: config_builder.h:50
 
Definition: config_section_printer.h:43
 
const std::map< std::string, std::string > & config_cmdln_options_
Definition: config_section_printer.h:151
 
static std::set< std::string > used_sections_
Definition: config_section_printer.h:157
 
static void add_remaining_sections(std::ostream &ostream, const std::map< std::string, std::string > &config_cmdln_options)
Definition: config_section_printer.h:105
 
ConfigSectionPrinter & add_line(std::string_view key, const std::string &value, bool force_empty=false)
Definition: config_section_printer.h:59
 
std::set< std::string > used_cmdln_options_
Definition: config_section_printer.h:156
 
std::vector< ConfigBuilder::kv_type > section_options_
Definition: config_section_printer.h:154
 
const std::string section_name_
Definition: config_section_printer.h:152
 
ConfigSectionPrinter(std::ostream &ostream, const std::map< std::string, std::string > &config_cmdln_options, const std::string §ion_name)
Definition: config_section_printer.h:45
 
std::ostream & ostream_
Definition: config_section_printer.h:150
 
~ConfigSectionPrinter()
Definition: config_section_printer.h:79
 
ValueType value(const std::optional< ValueType > &v)
Definition: gtid.h:83
 
char tolower(const char &ch)
Definition: parsing_helpers.h:41
 
std::basic_string< Char > transform(std::basic_string_view< Char > s, F fun)
Definition: utils_string.h:53
 
required string key
Definition: replication_asynchronous_connection_failover.proto:60