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 |