diff --git a/include/boost/redis/adapter/any_adapter.hpp b/include/boost/redis/adapter/any_adapter.hpp index fec2111a..55961434 100644 --- a/include/boost/redis/adapter/any_adapter.hpp +++ b/include/boost/redis/adapter/any_adapter.hpp @@ -10,7 +10,7 @@ #include #include -#include +#include #include #include #include @@ -18,6 +18,14 @@ namespace boost::redis { +namespace detail { + +// Forward decl +template +class connection_base; + +} + class any_adapter { using fn_type = std::function const&, system::error_code&)>; @@ -36,12 +44,12 @@ class any_adapter return { std::move(adapter), size }; } + template + friend class detail::connection_base; + public: template >> explicit any_adapter(T& response) : impl_(create_impl(response)) {} - - // TODO: make this private - auto get_impl() && { return std::move(impl_); } }; } diff --git a/include/boost/redis/detail/connection_base.hpp b/include/boost/redis/detail/connection_base.hpp index d530378f..d6dd808d 100644 --- a/include/boost/redis/detail/connection_base.hpp +++ b/include/boost/redis/detail/connection_base.hpp @@ -445,9 +445,9 @@ public: } template - auto async_exec(request const& req, any_adapter adapter, CompletionToken&& token) + auto async_exec(request const& req, any_adapter&& adapter, CompletionToken&& token) { - auto adapter_impl = std::move(adapter).get_impl(); + auto& adapter_impl = adapter.impl_; BOOST_ASSERT_MSG(req.get_expected_responses() <= adapter_impl.supported_response_size, "Request and response have incompatible sizes."); auto info = std::make_shared(req, std::move(adapter_impl.adapt_fn), get_executor());