#include <userver/concurrent/variable.hpp>
struct Message {
std::string name;
std::string message;
};
Message result;
result.name = json["name"].As<std::string>();
result.message = json["message"].As<std::string>();
return result;
}
json["name"] = value.name;
json["message"] = value.message;
return json.ExtractValue();
}
public:
using HttpHandlerJsonBase::HttpHandlerJsonBase;
Value HandleRequestJsonThrow(const HttpRequest& request, const Value& json, RequestContext&) const override {
if (request.GetMethod() == server::http::HttpMethod::kPost) {
auto message = json.As<Message>();
auto locked_data = messages_.Lock();
locked_data->push_back(std::move(message));
return {};
}
std::vector<Message> snapshot;
{
auto locked_data = messages_.Lock();
snapshot = *locked_data;
}
return formats::json::ValueBuilder(snapshot).ExtractValue();
}
private:
mutable concurrent::Variable<std::vector<Message>> messages_;
};
int main(int argc, char* argv[]) {
.
Append<MessagesHandler>(
"handler-messages")
.Append<components::FsCache>("fs-cache-main")
}