Mercurial > irccd
comparison 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 |
comparison
equal
deleted
inserted
replaced
849:64f8f82ab110 | 850:688f28dd3241 |
---|---|
123 | 123 |
124 // }}} | 124 // }}} |
125 | 125 |
126 // {{{ usage | 126 // {{{ usage |
127 | 127 |
128 [[noreturn]] | |
128 void usage() | 129 void usage() |
129 { | 130 { |
130 std::cerr << "usage: irccd-test [-c config] plugin-name" << std::endl; | 131 std::cerr << "usage: irccd-test [-c config] plugin-name" << std::endl; |
131 std::exit(1); | 132 std::exit(1); |
132 } | 133 } |
591 | 592 |
592 #endif | 593 #endif |
593 | 594 |
594 // {{{ load_plugins | 595 // {{{ load_plugins |
595 | 596 |
596 void load_plugins(int argc, char** argv) | 597 void load_plugins(const options::pack& result) |
597 { | 598 { |
598 if (argc <= 0) | 599 const auto& [ args, _ ] = result; |
600 | |
601 if (args.size() != 1U) | |
599 usage(); | 602 usage(); |
600 | 603 // NOTREACHED |
601 daemon->get_plugins().load("test", boost::filesystem::exists(argv[0]) ? argv[0] : ""); | 604 |
605 daemon->get_plugins().load("test", boost::filesystem::exists(args[0]) ? args[0] : ""); | |
602 plugin = daemon->get_plugins().get("test"); | 606 plugin = daemon->get_plugins().get("test"); |
603 } | 607 } |
604 | 608 |
605 // }}} | 609 // }}} |
606 | 610 |
607 // {{{ load_config | 611 // {{{ load_config |
608 | 612 |
609 auto load_config(const option::result& result) -> config | 613 auto load_config(const options::pack& result) -> config |
610 { | 614 { |
611 auto it = result.find("-c"); | 615 const auto& [ _, options ] = result; |
612 | 616 |
613 if (it != result.end() || (it = result.find("--config")) != result.end()) | 617 if (const auto it = options.find('c'); it != options.end()) |
614 return config(it->second); | 618 return config(it->second); |
615 | 619 |
616 auto cfg = config::search("irccd.conf"); | 620 return config::search("irccd.conf").value_or(config()); |
617 | 621 } |
618 return *cfg; | 622 |
619 } | 623 // }}} |
620 | 624 |
621 // }}} | 625 // {{{ load_cli |
622 | 626 |
623 // {{{ load_options | 627 auto load_cli(int argc, char** argv) -> options::pack |
624 | 628 { |
625 void load_options(int& argc, char**& argv) | |
626 { | |
627 static const option::options def{ | |
628 { "-c", true }, | |
629 { "--config", true } | |
630 }; | |
631 | |
632 try { | 629 try { |
633 daemon->set_config(load_config(option::read(argc, argv, def))); | 630 return options::parse(argc, argv, "c:"); |
634 } catch (const std::exception& ex) { | 631 } catch (const std::exception& ex) { |
635 throw std::runtime_error(str(format("%1%") % ex.what())); | 632 std::cerr << "abort: " << ex.what() << std::endl; |
633 usage(); | |
634 // NOTREACHED | |
636 } | 635 } |
637 } | 636 } |
638 | 637 |
639 // }}} | 638 // }}} |
640 | 639 |
652 loader->get_modules().push_back(f()); | 651 loader->get_modules().push_back(f()); |
653 | 652 |
654 daemon->get_plugins().add_loader(std::move(loader)); | 653 daemon->get_plugins().add_loader(std::move(loader)); |
655 #endif | 654 #endif |
656 | 655 |
657 load_options(argc, argv); | 656 const auto pack = load_cli(argc, argv); |
658 load_plugins(argc, argv); | 657 |
658 puts("ARGS"); | |
659 for (const auto& a : std::get<0>(pack)) | |
660 std::cout << a << std::endl; | |
661 puts("OPTIONS"); | |
662 for (const auto& [k,v] : std::get<1>(pack)) | |
663 std::cout << k << " = " << v << std::endl; | |
664 | |
665 load_config(pack); | |
666 load_plugins(pack); | |
659 } | 667 } |
660 | 668 |
661 // }}} | 669 // }}} |
662 | 670 |
663 } // !namespace | 671 } // !namespace |