diff --git a/example/cpp20_chat_room.cpp b/example/cpp20_chat_room.cpp index e765865e..4a820d52 100644 --- a/example/cpp20_chat_room.cpp +++ b/example/cpp20_chat_room.cpp @@ -33,7 +33,7 @@ using boost::asio::redirect_error; using boost::asio::use_awaitable; using boost::redis::config; using boost::redis::connection; -using boost::redis::generic_response; +using boost::redis::generic_flat_response; using boost::redis::ignore; using boost::redis::request; using boost::system::error_code; @@ -47,7 +47,7 @@ auto receiver(std::shared_ptr conn) -> awaitable request req; req.push("SUBSCRIBE", "channel"); - generic_response resp; + generic_flat_response resp; conn->set_receive_response(resp); while (conn->will_reconnect()) { diff --git a/example/cpp20_streams.cpp b/example/cpp20_streams.cpp index 1cef143f..14c14087 100644 --- a/example/cpp20_streams.cpp +++ b/example/cpp20_streams.cpp @@ -23,7 +23,7 @@ namespace net = boost::asio; using boost::redis::config; -using boost::redis::generic_response; +using boost::redis::generic_flat_response; using boost::redis::operation; using boost::redis::request; using boost::redis::connection; @@ -33,7 +33,7 @@ auto stream_reader(std::shared_ptr conn) -> net::awaitable { std::string redisStreamKey_; request req; - generic_response resp; + generic_flat_response resp; std::string stream_id{"$"}; std::string const field = "myfield"; @@ -51,7 +51,7 @@ auto stream_reader(std::shared_ptr conn) -> net::awaitable // The following approach was taken in order to be able to // deal with the responses, as generated by redis in the case // that there are multiple stream 'records' within a single - // generic_response. The nesting and number of values in + // generic_flat_response. The nesting and number of values in // resp.value() are different, depending on the contents // of the stream in redis. Uncomment the above commented-out // code for examples while running the XADD command. diff --git a/include/boost/redis/adapter/detail/adapters.hpp b/include/boost/redis/adapter/detail/adapters.hpp index fa3fa482..37727cd2 100644 --- a/include/boost/redis/adapter/detail/adapters.hpp +++ b/include/boost/redis/adapter/detail/adapters.hpp @@ -138,26 +138,6 @@ void boost_redis_from_bulk(T& t, resp3::basic_node const& node, system:: from_bulk_impl::apply(t, node, ec); } -//================================================ - -template -inline auto prepare_done(T*) noexcept -{ - return [] { }; -} - -template <> -inline auto prepare_done(generic_flat_response* resp) noexcept -{ - return [resp] { - if (resp->has_value()) { - resp->value().set_view(); - } - }; -} - -//================================================ - template class general_aggregate { private: @@ -205,6 +185,15 @@ public: explicit general_aggregate(result* c = nullptr) : result_(c) { } + + void on_init() { } + void on_done() + { + if (result_->has_value()) { + result_->value().set_view(); + } + } + template void operator()(resp3::basic_node const& nd, system::error_code&) { diff --git a/include/boost/redis/response.hpp b/include/boost/redis/response.hpp index 3053bbae..350d864f 100644 --- a/include/boost/redis/response.hpp +++ b/include/boost/redis/response.hpp @@ -64,6 +64,7 @@ public: std::vector const& view() const { return view_; } std::vector& view() { return view_; } +private: void set_view() { for (auto& node : view_) { @@ -74,7 +75,6 @@ public: } } -private: template friend class adapter::detail::general_aggregate;