bdrck 0.9.0

Generic common foundational utilities.
Documentation
#include <iostream>
#include <sstream>

#include "bdrck/params/Command.hpp"
#include "bdrck/params/Option.hpp"
#include "bdrck/params/parseAndExecute.hpp"

namespace
{
void echoStdin(bool out, bool err)
{
	std::ostringstream oss;
	oss << std::cin.rdbuf();

	if(out)
		std::cout << oss.str();

	if(err)
		std::cerr << oss.str();
}

const std::initializer_list<bdrck::params::Option> TEST_ECHO_COMMAND_OPTIONS{
        bdrck::params::Option::flag("stdout", "Echo stdin to stdout.", '1'),
        bdrck::params::Option::flag("stderr", "Echo stdin to stderr.", '2'),
        bdrck::params::Option::required("exitcode", "The exit code to return.",
                                        'e', "0")};
}

int main(int argc, char **argv)
{
	int exitCode = 0;

	bdrck::params::parseAndExecute(
	        argc, argv,
	        bdrck::params::Command(
	                "test-echo", "Echo stdin to stdout and/or stderr",
	                [&exitCode](bdrck::params::OptionsMap const &options,
	                            bdrck::params::FlagsMap const &flags,
	                            bdrck::params::ArgumentsMap const &) {
		                exitCode = std::stoi(options.at("exitcode"));
		                echoStdin(flags.at("stdout"),
		                          flags.at("stderr"));
		        },
	                TEST_ECHO_COMMAND_OPTIONS));

	return exitCode;
}