Redid fat_strings.cpp to be harder to mess up the json formatting
This commit is contained in:
parent
7f4ffbf2ed
commit
913a9f6430
@ -28,7 +28,7 @@
|
|||||||
#include "matrix/upload_info.hpp"
|
#include "matrix/upload_info.hpp"
|
||||||
|
|
||||||
namespace matrix::json{
|
namespace matrix::json{
|
||||||
raii::string _empty(void);
|
raii::static_string _empty(void);
|
||||||
|
|
||||||
raii::string _image_body(const uploaded_image& image);
|
raii::string _image_body(const uploaded_image& image);
|
||||||
raii::string _video_body(const uploaded_video& video);
|
raii::string _video_body(const uploaded_video& video);
|
||||||
|
|||||||
@ -5,6 +5,10 @@
|
|||||||
|
|
||||||
namespace matrix::json{
|
namespace matrix::json{
|
||||||
|
|
||||||
|
constexpr raii::static_string True(void){return "true"_ss;}
|
||||||
|
constexpr raii::static_string False(void){return "false"_ss;}
|
||||||
|
constexpr raii::static_string reason(void){return "reason"_ss;}
|
||||||
|
|
||||||
namespace message{
|
namespace message{
|
||||||
constexpr raii::static_string body(void){return "body"_ss;}
|
constexpr raii::static_string body(void){return "body"_ss;}
|
||||||
constexpr raii::static_string info(void){return "info"_ss;}
|
constexpr raii::static_string info(void){return "info"_ss;}
|
||||||
@ -31,10 +35,17 @@ namespace matrix::json{
|
|||||||
constexpr raii::static_string identifier(void){return "identifier"_ss;}
|
constexpr raii::static_string identifier(void){return "identifier"_ss;}
|
||||||
constexpr raii::static_string password(void){return "password"_ss;}
|
constexpr raii::static_string password(void){return "password"_ss;}
|
||||||
constexpr raii::static_string newpassword(void){return "new_password"_ss;}
|
constexpr raii::static_string newpassword(void){return "new_password"_ss;}
|
||||||
|
constexpr raii::static_string auth(void){return "auth"_ss;}
|
||||||
|
namespace authbody{
|
||||||
|
constexpr raii::static_string type(void){return auth::type();}
|
||||||
|
constexpr raii::static_string session(void){return "session"_ss;}
|
||||||
|
constexpr raii::static_string user(void){return "user"_ss;}
|
||||||
|
constexpr raii::static_string password(void){return auth::password();}
|
||||||
|
}
|
||||||
namespace identifierbody{
|
namespace identifierbody{
|
||||||
constexpr raii::static_string type(void){return auth::type();}
|
constexpr raii::static_string type(void){return auth::type();}
|
||||||
constexpr raii::static_string user(void){return "user"_ss;}
|
constexpr raii::static_string session(void){return auth::authbody::session();}
|
||||||
constexpr raii::static_string session(void){return "session"_ss;}
|
constexpr raii::static_string user(void){return auth::authbody::user();}
|
||||||
constexpr raii::static_string password(void){return auth::password();}
|
constexpr raii::static_string password(void){return auth::password();}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -43,14 +54,19 @@ namespace matrix::json{
|
|||||||
constexpr raii::static_string joined(void){return "joined"_ss;}
|
constexpr raii::static_string joined(void){return "joined"_ss;}
|
||||||
constexpr raii::static_string eventid(void){return "event_id"_ss;}
|
constexpr raii::static_string eventid(void){return "event_id"_ss;}
|
||||||
constexpr raii::static_string chunk(void){return "chunk"_ss;}
|
constexpr raii::static_string chunk(void){return "chunk"_ss;}
|
||||||
|
constexpr raii::static_string newversion(void){return "new_version"_ss;}
|
||||||
}
|
}
|
||||||
namespace client{
|
namespace client{
|
||||||
constexpr raii::static_string presence(void){return "presence"_ss;}
|
constexpr raii::static_string presence(void){return "presence"_ss;}
|
||||||
constexpr raii::static_string dispname(void){return "displayname"_ss;}
|
constexpr raii::static_string displayname(void){return "displayname"_ss;}
|
||||||
constexpr raii::static_string avatarurl(void){return "avatar_url"_ss;}
|
constexpr raii::static_string avatarurl(void){return "avatar_url"_ss;}
|
||||||
constexpr raii::static_string roomid(void){return "room_id"_ss;}
|
constexpr raii::static_string roomid(void){return "room_id"_ss;}
|
||||||
constexpr raii::static_string joinedrooms(void){return "joined_rooms"_ss;}
|
constexpr raii::static_string joinedrooms(void){return "joined_rooms"_ss;}
|
||||||
constexpr raii::static_string contenturi(void){return "content_uri"_ss;}
|
constexpr raii::static_string contenturi(void){return "content_uri"_ss;}
|
||||||
|
constexpr raii::static_string name(void){return "name"_ss;}
|
||||||
|
constexpr raii::static_string roomaliasname(void){return "room_alias_name"_ss;}
|
||||||
|
constexpr raii::static_string typing(void){return "typing"_ss;}
|
||||||
|
constexpr raii::static_string timeout(void){return "timeout"_ss;}
|
||||||
}
|
}
|
||||||
namespace session{
|
namespace session{
|
||||||
constexpr raii::static_string session(void){return "session"_ss;}
|
constexpr raii::static_string session(void){return "session"_ss;}
|
||||||
|
|||||||
5
makefile
5
makefile
@ -23,6 +23,7 @@ OBJDIR::=obj
|
|||||||
DEPDIR::=$(OBJDIR)/dep
|
DEPDIR::=$(OBJDIR)/dep
|
||||||
LIBDIR::=lib
|
LIBDIR::=lib
|
||||||
INCLUDE_DIRS::=include
|
INCLUDE_DIRS::=include
|
||||||
|
EXTRA_WARNINGS:=-Wduplicated-branches -Wduplicated-cond -Wextra-semi -Wfloat-equal -Wlogical-op -Wnoexcept -Wnon-virtual-dtor -Wuseless-cast
|
||||||
CXXFLAGS::=-std=c++17 -Wall -pedantic -Wextra
|
CXXFLAGS::=-std=c++17 -Wall -pedantic -Wextra
|
||||||
EXT::=cpp
|
EXT::=cpp
|
||||||
MAIN_LIBRARY::=rmatrix
|
MAIN_LIBRARY::=rmatrix
|
||||||
@ -64,9 +65,9 @@ ifeq ($(RELEASE),1)
|
|||||||
CXXFLAGS+=-O2 -Wno-strict-aliasing
|
CXXFLAGS+=-O2 -Wno-strict-aliasing
|
||||||
else ifeq ($(MEMCHK),1)
|
else ifeq ($(MEMCHK),1)
|
||||||
LDFLAGS+=-fsanitize=address -fno-omit-frame-pointer -fno-optimize-sibling-calls
|
LDFLAGS+=-fsanitize=address -fno-omit-frame-pointer -fno-optimize-sibling-calls
|
||||||
CXXFLAGS+=-O0 -fsanitize=address -fno-omit-frame-pointer -fno-optimize-sibling-calls
|
CXXFLAGS+=-O0 -g3 -ggdb -fsanitize=address -fno-omit-frame-pointer -fno-optimize-sibling-calls
|
||||||
else
|
else
|
||||||
CXXFLAGS+=-O0 -g
|
CXXFLAGS+=-O0 -g3 -ggdb
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -49,7 +49,7 @@ namespace matrix{
|
|||||||
|
|
||||||
//networked getter
|
//networked getter
|
||||||
netreturn<raii::rjp_string> client::get_display_name(void)const{
|
netreturn<raii::rjp_string> client::get_display_name(void)const{
|
||||||
return _get_and_find(m_ses->urls.displayname(), json::client::dispname());
|
return _get_and_find(m_ses->urls.displayname(), json::client::displayname());
|
||||||
}
|
}
|
||||||
netreturn<raii::rjp_string> client::get_profile_picture(void)const{
|
netreturn<raii::rjp_string> client::get_profile_picture(void)const{
|
||||||
return _get_and_find(m_ses->urls.profile_picture(), json::client::avatarurl());
|
return _get_and_find(m_ses->urls.profile_picture(), json::client::avatarurl());
|
||||||
|
|||||||
@ -23,20 +23,41 @@
|
|||||||
#include "raii/util.hpp"
|
#include "raii/util.hpp"
|
||||||
|
|
||||||
namespace matrix::json{
|
namespace matrix::json{
|
||||||
static constexpr decltype(auto) quote(const raii::string_base& str){
|
static constexpr auto quote(const raii::string_base& str){
|
||||||
return "\"" + str + "\"";
|
return "\"" + str + "\"";
|
||||||
}
|
}
|
||||||
static constexpr decltype(auto) quotecomma(const raii::string_base& str){
|
static constexpr auto key(const raii::string_base& str){
|
||||||
return "\"" + str + "\",";
|
|
||||||
}
|
|
||||||
static constexpr decltype(auto) keyquote(const raii::string_base& str){
|
|
||||||
return "\"" + str + "\":";
|
return "\"" + str + "\":";
|
||||||
}
|
}
|
||||||
|
static constexpr raii::static_string open_brace(void){
|
||||||
raii::string _empty(void){
|
return "{"_ss;
|
||||||
return raii::string("{}");
|
}
|
||||||
|
static constexpr raii::static_string close_brace(void){
|
||||||
|
return "}"_ss;
|
||||||
|
}
|
||||||
|
static constexpr raii::static_string comma(void){
|
||||||
|
return ","_ss;
|
||||||
|
}
|
||||||
|
template<class Arg, class... Args>
|
||||||
|
static constexpr auto object_impl(Arg&& arg, Args&&... args){
|
||||||
|
if constexpr(sizeof...(args) > 0){
|
||||||
|
return arg + comma() + object_impl(std::forward<Args>(args)...);
|
||||||
|
}else{
|
||||||
|
return std::forward<Arg>(arg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
template<class... Args>
|
||||||
|
static constexpr auto object(Args&&... args){
|
||||||
|
return open_brace() + object_impl(std::forward<Args>(args)...) + close_brace();
|
||||||
|
}
|
||||||
|
template<class Str1, class Str2>
|
||||||
|
static constexpr auto member(Str1&& k, Str2&& value){
|
||||||
|
return key(k) + value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
raii::static_string _empty(void){
|
||||||
|
return "{}"_ss;
|
||||||
|
}
|
||||||
raii::string _image_body(const uploaded_image& image){
|
raii::string _image_body(const uploaded_image& image){
|
||||||
raii::string url = raii::json_escape(image.url());
|
raii::string url = raii::json_escape(image.url());
|
||||||
const raii::string_base* thumburl;
|
const raii::string_base* thumburl;
|
||||||
@ -45,173 +66,165 @@ namespace matrix::json{
|
|||||||
else
|
else
|
||||||
thumburl = &url;
|
thumburl = &url;
|
||||||
|
|
||||||
//compiler intensive
|
|
||||||
return raii::string(
|
return raii::string(
|
||||||
"{"
|
object(
|
||||||
"\"body\":\"" + raii::json_escape(image.name()) + "\","
|
member(json::message::body(), quote(raii::json_escape(image.name()))),
|
||||||
"\"info\":{"
|
member(json::message::info(), object(
|
||||||
"\"h\":" + raii::itostr(image.height()) + ","
|
member(json::message::infobody::height(), raii::itostr(image.height())),
|
||||||
"\"mimetype\":\"" + image.mimetype() + "\","
|
member(json::message::infobody::mimetype(), quote(image.mimetype())),
|
||||||
"\"size\":" + raii::itostr(image.size()) + ","
|
member(json::message::infobody::size(), raii::itostr(image.size())),
|
||||||
"\"thumnail_info\":{"
|
member(json::message::infobody::thumbinfo(), object(
|
||||||
"\"h\":" + raii::itostr(image.thumb_height()) + ","
|
member(json::message::infobody::thumbnail::height(), raii::itostr(image.thumb_height())),
|
||||||
"\"mimetype\":\"" + image.mimetype() + "\","
|
member(json::message::infobody::thumbnail::mimetype(), quote(image.thumb_mimetype())),
|
||||||
"\"size\":" + raii::itostr(image.thumb_size()) + ","
|
member(json::message::infobody::thumbnail::size(), raii::itostr(image.thumb_size())),
|
||||||
"\"w\":" + raii::itostr(image.thumb_width()) +
|
member(json::message::infobody::thumbnail::width(), raii::itostr(image.thumb_width()))
|
||||||
"},"
|
)),
|
||||||
"\"thumbnail_url\":\"" + (*thumburl) + "\","
|
member(json::message::infobody::thumburl(), quote(raii::json_escape(*thumburl))),
|
||||||
"\"w\":" + raii::itostr(image.width()) +
|
member(json::message::infobody::width(), raii::itostr(image.width()))
|
||||||
"},"
|
)),
|
||||||
"\"msgtype\":\"m.image\","
|
member(json::message::msgtype(), quote("m.image"_ss)),
|
||||||
"\"url\":\"" + url + "\""
|
member(json::message::url(), quote(raii::json_escape(url)))
|
||||||
"}");
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
raii::string _video_body(const uploaded_video& video){
|
raii::string _video_body(const uploaded_video& video){
|
||||||
return raii::string(
|
return raii::string(
|
||||||
"{"
|
object(
|
||||||
"\"body\":\"" + raii::json_escape(video.name()) + "\","
|
member(json::message::body(), quote(raii::json_escape(video.name()))),
|
||||||
"\"info\":{"
|
member(json::message::info(), object(
|
||||||
"\"h\":" + raii::itostr(video.height()) + ","
|
member(json::message::infobody::height(), raii::itostr(video.height())),
|
||||||
"\"mimetype\":\"" + video.mimetype() + "\","
|
member(json::message::infobody::mimetype(), quote(video.mimetype())),
|
||||||
"\"size\":" + raii::itostr(video.size()) + ","
|
member(json::message::infobody::size(), raii::itostr(video.size())),
|
||||||
"\"thumnail_info\":{"
|
member(json::message::infobody::thumbinfo(), object(
|
||||||
"\"h\":" + raii::itostr(video.thumb_height()) + ","
|
member(json::message::infobody::thumbnail::height(), raii::itostr(video.thumb_height())),
|
||||||
"\"mimetype\":\"image/jpeg\","
|
member(json::message::infobody::thumbnail::mimetype(), quote(video.thumb_mimetype())),
|
||||||
"\"size\":" + raii::itostr(video.thumb_size()) + ","
|
member(json::message::infobody::thumbnail::size(), raii::itostr(video.thumb_size())),
|
||||||
"\"w\":" + raii::itostr(video.thumb_width()) +
|
member(json::message::infobody::thumbnail::width(), raii::itostr(video.thumb_width()))
|
||||||
"},"
|
)),
|
||||||
"\"thumbnail_url\":\"" + video.thumb_url() + "\","
|
member(json::message::infobody::thumburl(), quote(raii::json_escape(video.thumb_url()))),
|
||||||
"\"w\":" + raii::itostr(video.width()) +
|
member(json::message::infobody::width(), raii::itostr(video.width()))
|
||||||
"},"
|
)),
|
||||||
"\"msgtype\":\"m.video\","
|
member(json::message::msgtype(), quote("m.video"_ss)),
|
||||||
"\"url\":\"" + raii::json_escape(video.url()) + "\""
|
member(json::message::url(), quote(raii::json_escape(video.url())))
|
||||||
"}");
|
));
|
||||||
}
|
}
|
||||||
raii::string _file_body(const uploaded_file& file){
|
raii::string _file_body(const uploaded_file& file){
|
||||||
return raii::string(
|
return raii::string(
|
||||||
"{"
|
object(
|
||||||
"\"body\":\"" + raii::json_escape(file.name()) + "\","
|
member(json::message::body(), quote(raii::json_escape(file.name()))),
|
||||||
"\"info\":{"
|
member(json::message::info(), object(
|
||||||
"\"size\":" + raii::itostr(file.size()) +
|
member(json::message::infobody::size(), raii::itostr(file.size()))
|
||||||
"},"
|
)),
|
||||||
"\"msgtype\":\"m.file\","
|
member(json::message::msgtype(), quote("m.file"_ss)),
|
||||||
"\"url\":\"" + raii::json_escape(file.url()) + "\""
|
member(json::message::url(), quote(raii::json_escape(file.url())))
|
||||||
"}");
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
raii::string _audio_body(const uploaded_audio& audio){
|
raii::string _audio_body(const uploaded_audio& audio){
|
||||||
return raii::string(
|
return raii::string(
|
||||||
"{"
|
object(
|
||||||
"\"body\":\"" + raii::json_escape(audio.name()) + "\","
|
member(json::message::body(), quote(raii::json_escape(audio.name()))),
|
||||||
"\"info\":{"
|
member(json::message::info(), object(
|
||||||
"\"mimetype\":\"" + raii::json_escape(audio.mimetype()) + "\","
|
member(json::message::infobody::mimetype(), quote(audio.mimetype())),
|
||||||
"\"size\":" + raii::itostr(audio.size()) +
|
member(json::message::infobody::size(), raii::itostr(audio.size()))
|
||||||
"},"
|
)),
|
||||||
"\"msgtype\":\"m.audio\","
|
member(json::message::msgtype(), quote("m.audio"_ss)),
|
||||||
"\"url\":\"" + raii::json_escape(audio.url()) + "\""
|
member(json::message::url(), quote(raii::json_escape(audio.url())))
|
||||||
"}");
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
raii::string _message_body(const raii::string_base& msg){
|
raii::string _message_body(const raii::string_base& msg){
|
||||||
return raii::string("{\"body\":\""_ss + raii::json_escape(msg) + "\",\"msgtype\":\"m.text\"}"_ss);
|
return raii::string(
|
||||||
|
object(
|
||||||
|
member(json::message::body(), quote(raii::json_escape(msg))),
|
||||||
|
member(json::message::msgtype(), quote("m.text"_ss))
|
||||||
|
));
|
||||||
}
|
}
|
||||||
raii::string _login_password(const raii::string_base& username, const raii::string_base& password){
|
raii::string _login_password(const raii::string_base& username, const raii::string_base& password){
|
||||||
return raii::string(
|
return raii::string(
|
||||||
"{"
|
object(
|
||||||
"\"type\":\"m.login.password\","
|
member(json::auth::type(), quote("m.login.password"_ss)),
|
||||||
"\"identifier\":{"
|
member(json::auth::identifier(), object(
|
||||||
"\"type\":\"m.id.user\","
|
member(json::auth::identifierbody::type(), quote("m.id.user"_ss)),
|
||||||
"\"user\":\"" + raii::json_escape(username) + "\""
|
member(json::auth::identifierbody::user(), quote(raii::json_escape(username)))
|
||||||
"},"
|
)),
|
||||||
"\"password\":\"" + raii::json_escape(password) + "\""
|
member(json::auth::password(), quote(raii::json_escape(password)))
|
||||||
"}"
|
));
|
||||||
);
|
|
||||||
}
|
}
|
||||||
raii::string _change_psk_password(const raii::string_base& userid, const raii::string_base& newpass, const raii::string_base& oldpass, const raii::string_base& session){
|
raii::string _change_psk_password(const raii::string_base& userid, const raii::string_base& newpass, const raii::string_base& oldpass, const raii::string_base& session){
|
||||||
return raii::string(
|
return raii::string(
|
||||||
"{"
|
object(
|
||||||
"\"new_password\":\"" + raii::json_escape(newpass) + "\","
|
member(json::auth::newpassword(), quote(raii::json_escape(newpass))),
|
||||||
"\"auth\":{"
|
member(json::auth::auth(), object(
|
||||||
"\"type\":\"m.login.password\","
|
member(json::auth::authbody::type(), quote("m.login.password"_ss)),
|
||||||
"\"session\":\"" + session + "\","
|
member(json::auth::authbody::session(), quote(session)),
|
||||||
"\"user\":\"" + raii::json_escape(userid) + "\","
|
member(json::auth::authbody::user(), quote(raii::json_escape(userid))),
|
||||||
"\"password\":\"" + raii::json_escape(oldpass) + "\""
|
member(json::auth::authbody::password(), quote(raii::json_escape(oldpass)))
|
||||||
"}"
|
))
|
||||||
"}");
|
));
|
||||||
}
|
}
|
||||||
raii::string _displayname_set(const raii::string_base& newname){
|
raii::string _displayname_set(const raii::string_base& newname){
|
||||||
return raii::string(
|
return raii::string(
|
||||||
"{"
|
object(
|
||||||
"\"displayname\":\"" + raii::json_escape(newname) + "\""
|
member(json::client::displayname(), quote(raii::json_escape(newname)))
|
||||||
"}"
|
));
|
||||||
);
|
|
||||||
}
|
}
|
||||||
raii::string _avatar_set(const raii::string_base& mediaurl){
|
raii::string _avatar_set(const raii::string_base& mediaurl){
|
||||||
return raii::string(
|
return raii::string(
|
||||||
"{"
|
object(
|
||||||
"\"avatar_url\":\"" + raii::json_escape(mediaurl) + "\""
|
member(json::client::avatarurl(), quote(raii::json_escape(mediaurl)))
|
||||||
"}"
|
));
|
||||||
);
|
|
||||||
}
|
}
|
||||||
raii::string _presence_set(const raii::string_base& status){
|
raii::string _presence_set(const raii::string_base& status){
|
||||||
return raii::string(
|
return raii::string(
|
||||||
"{"
|
object(
|
||||||
"\"presence\":\"" + status + "\""
|
member(json::client::presence(), quote(status))
|
||||||
"}"
|
));
|
||||||
);
|
|
||||||
}
|
}
|
||||||
raii::string _create_room(const raii::string_base& name, const raii::string_base& alias){
|
raii::string _create_room(const raii::string_base& name, const raii::string_base& alias){
|
||||||
if(alias){
|
if(alias){
|
||||||
return raii::string(
|
return raii::string(
|
||||||
"{"
|
object(
|
||||||
"\"name\":\"" + raii::json_escape(name) + "\","
|
member(json::client::name(), quote(raii::json_escape(name))),
|
||||||
"\"room_alias_name\":\"" + raii::json_escape(alias) + "\""
|
member(json::client::roomaliasname(), quote(raii::json_escape(alias)))
|
||||||
"}"
|
));
|
||||||
);
|
|
||||||
}else{
|
}else{
|
||||||
return raii::string(
|
return raii::string(
|
||||||
"{"
|
object(
|
||||||
"\"name\":\"" + raii::json_escape(name) + "\""
|
member(json::client::name(), quote(raii::json_escape(name)))
|
||||||
"}"
|
));
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
raii::string _userid(const raii::string_base& id){
|
raii::string _userid(const raii::string_base& id){
|
||||||
return raii::string(
|
return raii::string(
|
||||||
"{"
|
object(
|
||||||
"\"user_id\":\"" + raii::json_escape(id) + "\""
|
member(json::session::userid(), quote(raii::json_escape(id)))
|
||||||
"}"
|
));
|
||||||
);
|
|
||||||
}
|
}
|
||||||
raii::string _userid_reason(const raii::string_base& id, const raii::string_base& reason){
|
raii::string _userid_reason(const raii::string_base& id, const raii::string_base& reason){
|
||||||
return raii::string(
|
return raii::string(
|
||||||
"{"
|
object(
|
||||||
"\"user_id\":\"" + raii::json_escape(id) + "\","
|
member(json::session::userid(), quote(raii::json_escape(id))),
|
||||||
"\"reason\":\"" + raii::json_escape(reason) + "\""
|
member(json::reason(), quote(raii::json_escape(reason)))
|
||||||
"}"
|
));
|
||||||
);
|
|
||||||
}
|
}
|
||||||
raii::string _typing(bool active, int timeout){
|
raii::string _typing(bool active, int timeout){
|
||||||
return raii::string(
|
return raii::string(
|
||||||
"{"
|
object(
|
||||||
"\"typing\":" + (active ? "true"_ss : "false"_ss) + "\","
|
member(json::client::typing(), active ? json::True() : json::False()),
|
||||||
"\"timeout\":" + raii::itostr(timeout) +
|
member(json::client::timeout(), raii::itostr(timeout))
|
||||||
"}"
|
));
|
||||||
);
|
|
||||||
}
|
}
|
||||||
raii::string _redact(const raii::string_base& reason){
|
raii::string _redact(const raii::string_base& reason){
|
||||||
return raii::string(
|
return raii::string(
|
||||||
"{"
|
object(
|
||||||
"\"reason\":\"" + raii::json_escape(reason) + "\""
|
member(json::reason(), quote(raii::json_escape(reason)))
|
||||||
"}"
|
));
|
||||||
);
|
|
||||||
}
|
}
|
||||||
raii::string _room_upgrade(int version){
|
raii::string _room_upgrade(int version){
|
||||||
return raii::string(
|
return raii::string(
|
||||||
"{"
|
object(
|
||||||
"\"new_version\":\"" + raii::itostr(version) + "\""
|
member(json::rooms::newversion(), raii::itostr(version))
|
||||||
"}"
|
));
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user