Mercurial > irccd
diff irccd-test/main.cpp @ 850:688f28dd3241
irccd: remove short options, closes #1673
While here, use a brand new home made option parsing.
author | David Demelier <markand@malikania.fr> |
---|---|
date | Tue, 16 Jul 2019 20:49:36 +0200 |
parents | 1399755352e7 |
children | eac2cc421f49 |
line wrap: on
line diff
--- a/irccd-test/main.cpp Wed Jul 10 20:45:00 2019 +0200 +++ b/irccd-test/main.cpp Tue Jul 16 20:49:36 2019 +0200 @@ -125,6 +125,7 @@ // {{{ usage +[[noreturn]] void usage() { std::cerr << "usage: irccd-test [-c config] plugin-name" << std::endl; @@ -593,12 +594,15 @@ // {{{ load_plugins -void load_plugins(int argc, char** argv) +void load_plugins(const options::pack& result) { - if (argc <= 0) + const auto& [ args, _ ] = result; + + if (args.size() != 1U) usage(); + // NOTREACHED - daemon->get_plugins().load("test", boost::filesystem::exists(argv[0]) ? argv[0] : ""); + daemon->get_plugins().load("test", boost::filesystem::exists(args[0]) ? args[0] : ""); plugin = daemon->get_plugins().get("test"); } @@ -606,33 +610,28 @@ // {{{ load_config -auto load_config(const option::result& result) -> config +auto load_config(const options::pack& result) -> config { - auto it = result.find("-c"); + const auto& [ _, options ] = result; - if (it != result.end() || (it = result.find("--config")) != result.end()) + if (const auto it = options.find('c'); it != options.end()) return config(it->second); - auto cfg = config::search("irccd.conf"); - - return *cfg; + return config::search("irccd.conf").value_or(config()); } // }}} -// {{{ load_options +// {{{ load_cli -void load_options(int& argc, char**& argv) +auto load_cli(int argc, char** argv) -> options::pack { - static const option::options def{ - { "-c", true }, - { "--config", true } - }; - try { - daemon->set_config(load_config(option::read(argc, argv, def))); + return options::parse(argc, argv, "c:"); } catch (const std::exception& ex) { - throw std::runtime_error(str(format("%1%") % ex.what())); + std::cerr << "abort: " << ex.what() << std::endl; + usage(); + // NOTREACHED } } @@ -654,8 +653,17 @@ daemon->get_plugins().add_loader(std::move(loader)); #endif - load_options(argc, argv); - load_plugins(argc, argv); + const auto pack = load_cli(argc, argv); + + puts("ARGS"); + for (const auto& a : std::get<0>(pack)) + std::cout << a << std::endl; + puts("OPTIONS"); + for (const auto& [k,v] : std::get<1>(pack)) + std::cout << k << " = " << v << std::endl; + + load_config(pack); + load_plugins(pack); } // }}}