0
0
Fork 0
mirror of https://github.com/matrix-construct/construct synced 2024-06-02 18:18:56 +02:00

ircd::rfc3986: Add form_encode() composer from json::members.

This commit is contained in:
Jason Volk 2018-12-06 16:27:05 -08:00
parent e4922772f4
commit 2caf425fde
2 changed files with 28 additions and 0 deletions

View file

@ -34,6 +34,8 @@ namespace ircd::rfc3986
string_view encode(const string_view &url, const mutable_buffer &);
string_view decode(const string_view &url, const mutable_buffer &);
string_view form_encode(const mutable_buffer &out, const json::members &);
}
namespace ircd

View file

@ -158,6 +158,32 @@ catch(const qi::expectation_failure<const char *> &e)
};
}
ircd::string_view
ircd::rfc3986::form_encode(const mutable_buffer &out,
const json::members &members)
{
window_buffer buf{out};
const auto append{[&buf](const json::member &member)
{
consume(buf, size(encode(member.first, buf)));
consume(buf, copy(buf, "="_sv));
consume(buf, size(encode(member.second, buf)));
}};
auto it(begin(members));
if(it != end(members))
{
append(*it);
for(++it; it != end(members); ++it)
{
consume(buf, copy(buf, "&"_sv));
append(*it);
}
}
return buf.completed();
}
struct ircd::rfc3986::encoder
:karma::grammar<char *, const string_view &>
{