https://github.com/siddiqsoft/string2map
Header only C++17 library to parse a string containing delimited key-value pairs into a map container including the feature to convert from std::string to std::wstring and vice-versa.
https://github.com/siddiqsoft/string2map
cpp http-header-parser key-value map parse string tokenize winhttp
Last synced: 10 months ago
JSON representation
Header only C++17 library to parse a string containing delimited key-value pairs into a map container including the feature to convert from std::string to std::wstring and vice-versa.
- Host: GitHub
- URL: https://github.com/siddiqsoft/string2map
- Owner: SiddiqSoft
- License: bsd-3-clause
- Created: 2020-11-04T10:13:04.000Z (about 5 years ago)
- Default Branch: main
- Last Pushed: 2025-01-16T02:52:00.000Z (about 1 year ago)
- Last Synced: 2025-04-14T23:42:00.002Z (10 months ago)
- Topics: cpp, http-header-parser, key-value, map, parse, string, tokenize, winhttp
- Language: C++
- Homepage:
- Size: 96.7 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# string2map and string2vector
[](https://github.com/SiddiqSoft/string2map/actions/workflows/codeql-analysis.yml)
[](https://dev.azure.com/siddiqsoft/siddiqsoft/_build/latest?definitionId=3&branchName=main)




Simple C++17 library to aid in the parsing of HTTP headers into a STL map-type container.
## Objective
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: `string` or `wstring`.
- Destination container type: `map`, `multimap`, `unordered_map`.
## API
```cpp
namespace siddiqsoft::string2map
{
template >
R parse(T& src, const T& keyDelimiter, const T& valueDelimiter, const T& terminalDelimiter= T{}) noexcept(false)
}
```
typename | Type | Comment
---------|-----------|--------------
`T` | `string` or `wstring` | Type of the source string
`D` | `string` or `wstring` | Type of the destination string (used in the container)
`R` | `map`, `unordered_map`, `multimap` | Generally type is container
```cpp
namespace siddiqsoft::string2vector
{
template
std::vector parse(const T& src, const T& keyDelimiter)
}
```
typename | Type | Comment
---------|-----------|--------------
`T` | `string` or `wstring` | Type of the source string
## Usage
Get it from [nuget](https://www.nuget.org/packages/string2map/) or you can submodule it.
```cpp
#include
#include
#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 // 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(sampleStr);
EXPECT_EQ(4, kv.size());
}
```
© 2020 Siddiq Software LLC. All rights reserved. Refer to [LICENSE](LICENSE).