1010
1111#include " typetraits.h"
1212
13+ void removeOuterSpaces (std::string& value) {
14+ const auto start = value.find_first_not_of (' ' );
15+ const auto end = value.find_last_not_of (' ' );
16+ value = value.substr (start, end - start + 1 );
17+ }
18+
1319bool hasEncapsulatedTokens (const std::string& str, char start, char end) {
1420 if (str.empty ()) {
1521 return false ;
@@ -72,6 +78,7 @@ std::vector<std::string> splitIgnoreBrackets(const std::string& str,
7278
7379template <typename T>
7480std::enable_if_t <std::is_same_v<char , T>, T> parse (std::string& value) {
81+ removeOuterSpaces (value);
7582 if (value.size () != 3 || !isCharFormatOk (value)) {
7683 std::stringstream ss;
7784 ss << " Error: Invalid char format. Must be of length 3 and contain "
@@ -83,26 +90,30 @@ std::enable_if_t<std::is_same_v<char, T>, T> parse(std::string& value) {
8390
8491template <typename T>
8592std::enable_if_t <std::is_same_v<std::string, T>, T> parse (std::string& value) {
93+ removeOuterSpaces (value);
8694 if (!isStringFormatOk (value)) {
8795 std::stringstream ss;
88- ss << " Error: Invalid string format. Must contain \" s. String: "
89- << value;
96+ ss << " Error: Invalid string format. The input string must be enclosed "
97+ " in quotes. Current value: " << value;
9098 throw std::runtime_error (ss.str ());
9199 }
92100 return removeQuotes (value);
93101}
94102
95103template <typename T>
96104std::enable_if_t <std::is_integral_v<T>, T> parse (const std::string& value) {
105+ std::string valueCopy = value;
106+ removeOuterSpaces (valueCopy);
97107 T ret{};
98- std::stringstream ss (value );
108+ std::stringstream ss (valueCopy );
99109 ss >> ret;
100110 return ret;
101111}
102112
103113template <typename T>
104114std::enable_if_t <is_vector_type<T>::value, T> parse (auto && value) {
105115 using element_type = typename T::value_type;
116+ removeOuterSpaces (value);
106117 T vec;
107118 if (!isArrayFormatOk (value)) {
108119 std::stringstream ss;
0 commit comments