7#include <boost/redis/connection.hpp>
9#include <boost/asio/co_spawn.hpp>
10#include <boost/asio/detached.hpp>
16#if defined(BOOST_ASIO_HAS_CO_AWAIT)
18namespace asio = boost::asio;
25using boost::asio::awaitable;
26using boost::asio::detached;
27using boost::asio::consign;
30std::ostream&
operator<<(std::ostream& os, std::optional<T>
const& opt)
33 std::cout << opt.value();
40void print(std::map<std::string, std::string>
const& cont)
42 for (
auto const& e : cont)
43 std::cout << e.first <<
": " << e.second <<
"\n";
47void print(std::vector<T>
const& cont)
49 for (
auto const& e : cont)
50 std::cout << e <<
" ";
55auto store(std::shared_ptr<connection> conn) -> awaitable<void>
57 std::vector<int> vec{1, 2, 3, 4, 5, 6};
59 std::map<std::string, std::string>
map{
66 req.push_range(
"RPUSH",
"rpush-key", vec);
67 req.push_range(
"HSET",
"hset-key", map);
68 req.push(
"SET",
"key",
"value");
70 co_await conn->async_exec(req, ignore);
73auto hgetall(std::shared_ptr<connection> conn) -> awaitable<void>
77 req.push(
"HGETALL",
"hset-key");
80 response<std::map<std::string, std::string>> resp;
83 co_await conn->async_exec(req, resp);
85 print(std::get<0>(resp).value());
88auto mget(std::shared_ptr<connection> conn) -> awaitable<void>
92 req.push(
"MGET",
"key",
"non-existing-key");
95 response<std::vector<std::optional<std::string>>> resp;
98 co_await conn->async_exec(req, resp);
100 print(std::get<0>(resp).value());
104auto transaction(std::shared_ptr<connection> conn) -> awaitable<void>
108 req.push(
"LRANGE",
"rpush-key", 0, -1);
109 req.push(
"HGETALL",
"hset-key");
110 req.push(
"MGET",
"key",
"non-existing-key");
119 std::optional<std::vector<int>>,
120 std::optional<std::map<std::string, std::string>>,
121 std::optional<std::vector<std::optional<std::string>>>>
125 co_await conn->async_exec(req, resp);
127 print(std::get<0>(std::get<4>(resp).value()).value().value());
128 print(std::get<1>(std::get<4>(resp).value()).value().value());
129 print(std::get<2>(std::get<4>(resp).value()).value().value());
133awaitable<void> co_main(config cfg)
135 auto conn = std::make_shared<connection>(
co_await asio::this_coro::executor);
136 conn->async_run(cfg, consign(detached, conn));
138 co_await store(conn);
139 co_await transaction(conn);
140 co_await hgetall(conn);
A basic_connection that type erases the executor.
ignore_t ignore
Global ignore object.
auto operator<<(std::ostream &os, type t) -> std::ostream &
Writes the type to the output stream.
std::decay_t< decltype(std::ignore)> ignore_t
Type used to ignore responses.
std::tuple< adapter::result< Ts >... > response
Response with compile-time size.
Configure parameters used by the connection classes.