src/CLIParser.h
branchv_0
changeset 12 0a297eb46ba1
parent 10 3e1608320b6c
child 15 e7f05d7c4336
equal deleted inserted replaced
11:f12594938a03 12:0a297eb46ba1
    38 	string_t readNext(std::vector<string_t> arguments, int& i) {
    38 	string_t readNext(std::vector<string_t> arguments, int& i) {
    39 		if (i < arguments.size()) return arguments[i++];
    39 		if (i < arguments.size()) return arguments[i++];
    40 		else throw relpipe::cli::RelpipeCLIException(L"Missing CLI argument" + (i > 0 ? (L" after " + arguments[i - 1]) : L""), relpipe::cli::CLI::EXIT_CODE_BAD_CLI_ARGUMENTS);
    40 		else throw relpipe::cli::RelpipeCLIException(L"Missing CLI argument" + (i > 0 ? (L" after " + arguments[i - 1]) : L""), relpipe::cli::CLI::EXIT_CODE_BAD_CLI_ARGUMENTS);
    41 	}
    41 	}
    42 
    42 
    43 	void addField(Configuration& c, string_t& group, string_t& name, std::vector<string_t>& aliases, std::map<string_t, string_t>& options) {
    43 	void addField(Configuration& c, string_t& group, string_t& name, std::vector<string_t>& aliases, std::vector<string_t>& options) {
    44 		if (group.size()) {
    44 		if (group.size()) {
    45 			c.fields.push_back(RequestedField(group, name, aliases, options));
    45 			c.fields.push_back(RequestedField(group, name, aliases, options));
    46 			group.clear();
    46 			group.clear();
    47 			name.clear();
    47 			name.clear();
    48 			aliases.clear();
    48 			aliases.clear();
    75 			// c.fields.push_back(RequestedField(RequestedField::GROUP_XATTR, L"user.xdg.origin.url"));
    75 			// c.fields.push_back(RequestedField(RequestedField::GROUP_XATTR, L"user.xdg.origin.url"));
    76 		} else {
    76 		} else {
    77 			string_t currentGroup;
    77 			string_t currentGroup;
    78 			string_t currentName;
    78 			string_t currentName;
    79 			std::vector<string_t> currentAliases;
    79 			std::vector<string_t> currentAliases;
    80 			std::map<string_t, string_t> currentOptions;
    80 			std::vector<string_t> currentOptions;
    81 
    81 
    82 			for (int i = 0; i < arguments.size();) {
    82 			for (int i = 0; i < arguments.size();) {
    83 				string_t option = readNext(arguments, i);
    83 				string_t option = readNext(arguments, i);
    84 
    84 
    85 				if (option == CLIParser::OPTION_FILE || option == CLIParser::OPTION_XATTR) {
    85 				if (option == CLIParser::OPTION_FILE || option == CLIParser::OPTION_XATTR) {
    87 					currentGroup = option.substr(2); // cut off --
    87 					currentGroup = option.substr(2); // cut off --
    88 					currentName = readNext(arguments, i);
    88 					currentName = readNext(arguments, i);
    89 				} else if (option == OPTION_AS) {
    89 				} else if (option == OPTION_AS) {
    90 					currentAliases.push_back(readNext(arguments, i));
    90 					currentAliases.push_back(readNext(arguments, i));
    91 				} else if (option == OPTION_OPTION) {
    91 				} else if (option == OPTION_OPTION) {
    92 					string_t key = readNext(arguments, i);
    92 					currentOptions.push_back(readNext(arguments, i));
    93 					string_t value = readNext(arguments, i);
    93 					currentOptions.push_back(readNext(arguments, i));
    94 					currentOptions[key] = value;
       
    95 				} else {
    94 				} else {
    96 					throw relpipe::cli::RelpipeCLIException(L"Unsupported CLI option: " + option, relpipe::cli::CLI::EXIT_CODE_BAD_CLI_ARGUMENTS);
    95 					throw relpipe::cli::RelpipeCLIException(L"Unsupported CLI option: " + option, relpipe::cli::CLI::EXIT_CODE_BAD_CLI_ARGUMENTS);
    97 				}
    96 				}
    98 			}
    97 			}
    99 			
    98 
   100 			addField(c, currentGroup, currentName, currentAliases, currentOptions); // last field
    99 			addField(c, currentGroup, currentName, currentAliases, currentOptions); // last field
   101 		}
   100 		}
   102 		return c;
   101 		return c;
   103 	}
   102 	}
   104 
   103