Simple C++17 library to aid in the parsing of HTTP headers into a STL map-type container.
Convert the input string with the specified delimiters into a map of key-value pairs with the given input:
- std::[w]string
- Key delimiter (example: :,:,=,=)
- Value delimiter (end of the key-value pair element, example: CRLF)
- Destination output type for key/value: stringorwstring.
- Destination container type: map,multimap,unordered_map.
namespace siddiqsoft::string2map
{
    template <typename T, typename D = T, typename R = std::map<D, D>>
    R parse(T& src, const T& keyDelimiter, const T& valueDelimiter, const T& terminalDelimiter= T{}) noexcept(false)
}| typename | Type | Comment | 
|---|---|---|
| T | stringorwstring | Type of the source string | 
| D | stringorwstring | Type of the destination string (used in the container) | 
| R | map,unordered_map,multimap | Generally type is container<D,D> | 
namespace siddiqsoft::string2vector
{
    template <typename T>
    std::vector<T> parse(const T& src, const T& keyDelimiter)
}| typename | Type | Comment | 
|---|---|---|
| T | stringorwstring | Type of the source string | 
Get it from nuget or you can submodule it.
#include <string>
#include <map>
#include "siddiqsoft/string2map.hpp"
TEST(parse, Test_string2map)
{
    std::string sampleStr{ "Host: duplicate\r\n"
                    "Host: hostname.com\r\n"
                    "Content-Type: text\r\n"
                    "Content-Length: 99\r\n\r\n" };
    auto kvmap= siddiqsoft::string2map::parse<string,  // input string
                                              wstring, // transform to wstring
                                              map<wstring,wstring> // destination container
                                             >(sampleStr);
    // We expect only 3 items even though there is a duplicate key in the source string.
    // The std::map container ensures unique keys.
    EXPECT_EQ(3, kvmap.size());
}
TEST(parse, Test_string2vector)
{
    std::string sampleStr{ "/a/b/c/d" };
    auto kv= siddiqsoft::string2vector::parse<string>(sampleStr);
    EXPECT_EQ(4, kv.size());
}
© 2020 Siddiq Software LLC. All rights reserved. Refer to LICENSE.