34 namespace po = boost::program_options;
65 const std::vector<std::string>& values,
68 po::validators::check_first_occurrence(v);
69 const string& s = po::validators::get_single_string(values);
74 throw po::validation_error(po::validation_error::invalid_option_value);
79 const std::vector<std::string>& values,
82 po::validators::check_first_occurrence(v);
83 const string& s = po::validators::get_single_string(values);
88 throw po::validation_error(po::validation_error::invalid_option_value);
97 po::options_description general(
"General Options");
99 (
"help",
"print help message")
100 (
"version,v",
"print version string")
101 (
"debug,d",
"print debugging info")
102 (
"stack,q",
"print stack debugging info")
108 po::options_description server(
"MongoDB Server Options");
111 "MongoDB server host name: <host>[:port]")
113 "MongoDB server port number.")
117 po::options_description oformat(
"Output Format Options");
118 oformat.add_options()
120 "Output Style: {dotted,tree,json,jsonpacked}.")
122 "BSON Type: {none,name,desc,code,all}.")
123 (
"scalarfirst,f", po::value<bool>(&
scalarFirst)->default_value(
false),
124 "Output scalar objects elements before any embedded objects or arrays.")
128 po::options_description hidden(
"Hidden options");
131 "Database and collection names concatenated with a '.' between them, i.e., \"mydb.mycollection\".")
138 po::options_description cmdline_options;
139 cmdline_options.add(general).add(server).add(oformat).add(hidden);
141 po::options_description config_file_options;
142 config_file_options.add(server).add(oformat).add(hidden);
144 po::options_description visible(
"\n\nSyntax:\n\tmongotype [<options>] <db.collection> [<query>] [<projection>]\n\nOptions");
145 visible.add(general).add(server).add(oformat);
147 po::positional_options_description p;
148 p.add(
"dbcollection", 1);
152 store(po::command_line_parser(ac, av).options(cmdline_options).positional(p).run(),
vm);
156 cout <<
"Parameters After Command Line:\n" << *
this <<
"\n";
162 store(parse_config_file(ifs, config_file_options),
vm);
167 if (
vm.count(
"version")) {
172 if (
vm.count(
"help")) {
173 cout << visible <<
"\n";
177 if (
vm.count(
"dbcollection") == 0) {
178 cout << po::invalid_syntax(po::invalid_syntax::missing_parameter,
"<db.collection>").what() << visible <<
"\n";
185 cout <<
"Parameters After Config File:\n" << *
this <<
"\n";
190 cerr << e.what() <<
"\n";
197 os <<
"valid:" << p.
valid <<
"\n";
199 os <<
"host:" << p.
host <<
"\n";
200 os <<
"port:" << p.
port <<
"\n";
201 os <<
"style:" << p.
style <<
"\n";
202 os <<
"typeMask:" << p.
typeMask <<
"\n";