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