diff --git a/examples/test/main.cpp b/examples/test/main.cpp index bc1affc..6492d5e 100644 --- a/examples/test/main.cpp +++ b/examples/test/main.cpp @@ -1,15 +1,49 @@ + #include #include -#include +#include #include -#include +#include +#include using argument = argument_parser::builder::argument<>; +using argument_parser::parsing_traits::hint_type; + auto echo(std::string const& s) -> void { std::cout << s << '\n'; } +using namespace argument_parser::parsing_traits; + +constexpr hint_type vector_purpose_hint = "vector of "; + +template +class parser_trait> { + public: + static std::vector parse(std::string const& s) { + std::vector result; + std::stringstream ss(s); + + for (std::string line; std::getline(ss, line, ',');) { + T item = parser_trait::parse(line); + result.push_back(item); + } + return result; + } + + ARGPARSE_TRAIT_FORMAT_HINT = concat< + hint_provider<&parser_trait::format_hint>, + hint_provider<&comma>, + hint_provider<&parser_trait::format_hint> + >; + + ARGPARSE_TRAIT_PURPOSE_HINT = concat< + hint_provider<&vector_purpose_hint>, + hint_provider<&parser_trait::purpose_hint> + >; +}; + auto main() -> int { argument_parser::v2::parser parser(false); @@ -17,7 +51,6 @@ auto main() -> int { .positional("count") .position(0) .help_text("How many times to repeat the action.") - .required() .action([](int const& count) { std::cout << "count action configured for " << count << '\n'; }) @@ -35,11 +68,11 @@ auto main() -> int { .help_text("Store a boolean flag.") .build(parser); - argument::start() - .long_argument("output") - .help_text("Store a string value.") - .store() - .build(parser); + // argument::start() + // .long_argument("regex") + // .help_text("Store a regex value.") + // .store>() + // .build(parser); argument::start() .short_argument("e") @@ -48,6 +81,16 @@ auto main() -> int { .action(echo) .build(parser); + argument::start() + .long_argument("vecstr") + .short_argument("vs") + .action>([](std::vector const& vecstr) { + for (auto const& str : vecstr) { + std::cout << str << '\n'; + } + }) + .build(parser); + parser.handle_arguments({ &argument_parser::conventions::gnu_argument_convention });