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:
parent
e4922772f4
commit
2caf425fde
|
@ -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
|
||||
|
|
|
@ -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 &>
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue