mirror of
https://github.com/matrix-construct/construct
synced 2024-11-17 07:20:55 +01:00
modules/client/versions: Generate response content dynamically.
This commit is contained in:
parent
17925b2bd9
commit
f9dbd306d6
1 changed files with 89 additions and 14 deletions
|
@ -8,16 +8,26 @@
|
||||||
// copyright notice and this permission notice is present in all copies. The
|
// copyright notice and this permission notice is present in all copies. The
|
||||||
// full license for this software is available in the LICENSE file.
|
// full license for this software is available in the LICENSE file.
|
||||||
|
|
||||||
using namespace ircd;
|
namespace ircd::m::client_versions
|
||||||
|
{
|
||||||
|
static void append_unstable_features(client &, resource::request &, json::stack &);
|
||||||
|
static void append_versions(client &, resource::request &, json::stack &);
|
||||||
|
static resource::response get(client &, resource::request &);
|
||||||
|
|
||||||
mapi::header
|
extern conf::item<bool> m_lazy_load_members;
|
||||||
|
extern conf::item<std::string> versions;
|
||||||
|
extern resource::method method_get;
|
||||||
|
extern resource resource;
|
||||||
|
}
|
||||||
|
|
||||||
|
ircd::mapi::header
|
||||||
IRCD_MODULE
|
IRCD_MODULE
|
||||||
{
|
{
|
||||||
"Client 2.1 :Versions"
|
"Client 2.1 :Versions"
|
||||||
};
|
};
|
||||||
|
|
||||||
resource
|
decltype(ircd::m::client_versions::resource)
|
||||||
versions_resource
|
ircd::m::client_versions::resource
|
||||||
{
|
{
|
||||||
"/_matrix/client/versions",
|
"/_matrix/client/versions",
|
||||||
{
|
{
|
||||||
|
@ -25,23 +35,88 @@ versions_resource
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
resource::response
|
decltype(ircd::m::client_versions::method_get)
|
||||||
get_versions(client &client,
|
ircd::m::client_versions::method_get
|
||||||
resource::request &request)
|
|
||||||
{
|
{
|
||||||
static const json::object object
|
resource, "GET", get
|
||||||
|
};
|
||||||
|
|
||||||
|
ircd::resource::response
|
||||||
|
ircd::m::client_versions::get(client &client,
|
||||||
|
resource::request &request)
|
||||||
|
{
|
||||||
|
char buf[512];
|
||||||
|
json::stack out{buf};
|
||||||
{
|
{
|
||||||
R"({"versions":["r0.3.0","r0.4.0","r0.5.0"]})"
|
json::stack::object top{out};
|
||||||
};
|
append_versions(client, request, out);
|
||||||
|
append_unstable_features(client, request, out);
|
||||||
|
}
|
||||||
|
|
||||||
return resource::response
|
return resource::response
|
||||||
{
|
{
|
||||||
client, object
|
client, json::object
|
||||||
|
{
|
||||||
|
out.completed()
|
||||||
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
resource::method
|
/// Note this conf item doesn't persist to and from the database, which means
|
||||||
getter
|
/// it assumes its default value on every startup.
|
||||||
|
decltype(ircd::m::client_versions::versions)
|
||||||
|
ircd::m::client_versions::versions
|
||||||
{
|
{
|
||||||
versions_resource, "GET", get_versions
|
{ "name", "ircd.m.client.versions.versions" },
|
||||||
|
{ "default", "r0.3.0 r0.4.0 r0.5.0" },
|
||||||
|
{ "persist", false },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void
|
||||||
|
ircd::m::client_versions::append_versions(client &client,
|
||||||
|
resource::request &request,
|
||||||
|
json::stack &out)
|
||||||
|
{
|
||||||
|
json::stack::array array
|
||||||
|
{
|
||||||
|
out, "versions"
|
||||||
|
};
|
||||||
|
|
||||||
|
const string_view &list
|
||||||
|
{
|
||||||
|
versions
|
||||||
|
};
|
||||||
|
|
||||||
|
tokens(list, ' ', [&array]
|
||||||
|
(const string_view &version)
|
||||||
|
{
|
||||||
|
array.append(version);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
decltype(ircd::m::client_versions::m_lazy_load_members)
|
||||||
|
ircd::m::client_versions::m_lazy_load_members
|
||||||
|
{
|
||||||
|
{ "name", "ircd.m.client.versions.m_lazy_load_members" },
|
||||||
|
{ "default", true, },
|
||||||
|
};
|
||||||
|
|
||||||
|
void
|
||||||
|
ircd::m::client_versions::append_unstable_features(client &client,
|
||||||
|
resource::request &request,
|
||||||
|
json::stack &out)
|
||||||
|
{
|
||||||
|
json::stack::object object
|
||||||
|
{
|
||||||
|
out, "unstable_features"
|
||||||
|
};
|
||||||
|
|
||||||
|
// m.lazy_load_members
|
||||||
|
json::stack::member
|
||||||
|
{
|
||||||
|
out, "m.lazy_load_members", json::value
|
||||||
|
{
|
||||||
|
bool(m_lazy_load_members)
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue