mountcontrol/cxx/tests/configfile_test.cpp
2025-02-26 09:51:21 +03:00

63 lines
1.4 KiB
C++

#include <iostream>
#include "../comm_server_configfile.h"
int main(int argc, char* argv[])
{
if (argc < 2) {
std::cout << "Usage: " << argv[0] << " cfg_filename\n";
return 1;
}
auto print_cfg = [](auto const& cfg) {
for (auto& [key, v] : cfg.config()) {
std::cout << key;
if (auto v_str = std::get_if<1>(&v)) {
std::cout << " = " << *v_str;
} else if (auto v_vec = std::get_if<2>(&v)) {
std::cout << " = ";
for (auto& el : *v_vec) {
std::cout << "<" << el << "> ";
}
}
std::cout << "\n";
}
};
mcc::MccConfigfile cfg;
std::string str = R"--(key_no_val
# comment example
scalar_key = scalar-value
vec_key = 1,2,3 , 345, 4576, 79
)--";
std::stringstream ist;
ist << str;
cfg.load(ist);
std::cout << "From input stream: \n";
print_cfg(cfg);
cfg["vec_key"] = std::vector<std::string>{"10", "20", "30"};
cfg["new_key"] = "new-key-value";
cfg.save(std::string_view{argv[1]});
auto ec = cfg.load(std::string_view{argv[1]});
if (ec) {
std::cout << "ERR: " << ec.message() << "\n";
return 1;
}
std::cout << "\n\nFrom file (edited):\n";
print_cfg(cfg);
return 0;
}