From be79f58808c5356fcf9fdda8a462cd96eee87080 Mon Sep 17 00:00:00 2001 From: Marcelo Zimbres Date: Sun, 3 Apr 2022 20:51:08 +0200 Subject: [PATCH] Simplifies the serializer. --- aedis/adapter/response_traits.hpp | 2 +- aedis/generic/client.hpp | 8 ++++---- aedis/redis/client.hpp | 3 +++ aedis/redis/command.hpp | 11 ----------- aedis/redis/receiver_base.hpp | 3 +++ aedis/resp3/detail/read_ops.hpp | 7 +++++++ aedis/resp3/read.hpp | 14 ++------------ aedis/resp3/serializer.hpp | 24 +++++++++++++++++------- aedis/sentinel/client.hpp | 3 +++ aedis/sentinel/receiver_base.hpp | 3 +++ examples/low_level/adapter.cpp | 2 +- examples/low_level/async_intro.cpp | 2 +- examples/low_level/subscriber.cpp | 6 +++--- examples/low_level/sync_intro.cpp | 2 +- tests/online.cpp | 2 +- tools/commands.cpp | 2 +- 16 files changed, 51 insertions(+), 43 deletions(-) diff --git a/aedis/adapter/response_traits.hpp b/aedis/adapter/response_traits.hpp index 7d7ffb32..f1fecb5b 100644 --- a/aedis/adapter/response_traits.hpp +++ b/aedis/adapter/response_traits.hpp @@ -62,7 +62,7 @@ template <> struct response_traits { using response_type = void; - using adapter_type = resp3::ignore_response; + using adapter_type = resp3::detail::ignore_response; static auto adapt() noexcept { return adapter_type{}; } }; diff --git a/aedis/generic/client.hpp b/aedis/generic/client.hpp index 43f71742..9c476f56 100644 --- a/aedis/generic/client.hpp +++ b/aedis/generic/client.hpp @@ -23,7 +23,7 @@ namespace aedis { namespace generic { -/** \brief A high level redis client. +/** \brief A high level resp3 client. * \ingroup any * * This Redis client keeps a connection to the database open and @@ -191,7 +191,7 @@ public: { auto const can_write = prepare_next(); - resp3::serializer sr(requests_); + resp3::serializer sr(requests_); auto const before = std::size(requests_); sr.push(cmd, args...); auto const after = std::size(requests_); @@ -217,7 +217,7 @@ public: auto const can_write = prepare_next(); - resp3::serializer sr(requests_); + resp3::serializer sr(requests_); auto const before = std::size(requests_); sr.push_range2(cmd, key, begin, end); auto const after = std::size(requests_); @@ -243,7 +243,7 @@ public: auto const can_write = prepare_next(); - resp3::serializer sr(requests_); + resp3::serializer sr(requests_); auto const before = std::size(requests_); sr.push_range2(cmd, begin, end); auto const after = std::size(requests_); diff --git a/aedis/redis/client.hpp b/aedis/redis/client.hpp index 863322fb..5557fc07 100644 --- a/aedis/redis/client.hpp +++ b/aedis/redis/client.hpp @@ -13,6 +13,9 @@ namespace aedis { namespace redis { +/** @brief Convenience typedef for redis clients. + * @ingroup any + */ template using client = generic::client; diff --git a/aedis/redis/command.hpp b/aedis/redis/command.hpp index cf08f57c..27148183 100644 --- a/aedis/redis/command.hpp +++ b/aedis/redis/command.hpp @@ -456,16 +456,5 @@ std::ostream& operator<<(std::ostream& os, command c); */ bool has_push_response(command cmd); -/** \brief Creates a serializer for a \c std::string. - * \ingroup any - * \param storage The string. - */ -template -resp3::serializer -make_serializer(std::basic_string& storage) -{ - return resp3::serializer, command>(storage); -} - } // redis } // aedis diff --git a/aedis/redis/receiver_base.hpp b/aedis/redis/receiver_base.hpp index dc888a21..5b8776e4 100644 --- a/aedis/redis/receiver_base.hpp +++ b/aedis/redis/receiver_base.hpp @@ -13,6 +13,9 @@ namespace aedis { namespace redis { +/** @brief Convenience typedef for the Redis receiver_base. + * @ingroup any + */ template using receiver_base = generic::receiver_base; diff --git a/aedis/resp3/detail/read_ops.hpp b/aedis/resp3/detail/read_ops.hpp index b5f77720..e55d1a2e 100644 --- a/aedis/resp3/detail/read_ops.hpp +++ b/aedis/resp3/detail/read_ops.hpp @@ -22,6 +22,13 @@ namespace detail { #include +struct ignore_response { + void + operator()( + resp3::type, std::size_t, std::size_t, char const*, std::size_t, + boost::system::error_code&) { } +}; + template < class AsyncReadStream, class DynamicBuffer, diff --git a/aedis/resp3/read.hpp b/aedis/resp3/read.hpp index f406618e..541cf80b 100644 --- a/aedis/resp3/read.hpp +++ b/aedis/resp3/read.hpp @@ -86,16 +86,6 @@ read( return consumed; } -/** \brief Adapter that ignores responses. - * \ingroup any - */ -struct ignore_response { - void - operator()( - resp3::type, std::size_t, std::size_t, char const*, std::size_t, - boost::system::error_code&) { } -}; - /** \brief Reads the reponse to a command. * \ingroup functions * @@ -111,7 +101,7 @@ struct ignore_response { template< class SyncReadStream, class DynamicBuffer, - class ResponseAdapter = ignore_response> + class ResponseAdapter = detail::ignore_response> std::size_t read( SyncReadStream& stream, @@ -150,7 +140,7 @@ read( template < class AsyncReadStream, class DynamicBuffer, - class ResponseAdapter = ignore_response, + class ResponseAdapter = detail::ignore_response, class CompletionToken = boost::asio::default_completion_token_t > auto async_read( diff --git a/aedis/resp3/serializer.hpp b/aedis/resp3/serializer.hpp index 42eeb066..05f186f9 100644 --- a/aedis/resp3/serializer.hpp +++ b/aedis/resp3/serializer.hpp @@ -44,7 +44,7 @@ namespace resp3 { // // NOTE: For some commands like hset it would be a good idea to assert // the value type is a pair. -template +template class serializer { private: Storage* request_; @@ -74,7 +74,7 @@ public: * \param args The arguments of the Redis command. * */ - template + template void push(Command cmd, Ts const&... args) { auto constexpr pack_size = sizeof...(Ts); @@ -104,7 +104,7 @@ public: * \param begin Iterator to the begin of the range. * \param end Iterator to the end of the range. */ - template + template void push_range2(Command cmd, Key const& key, ForwardIterator begin, ForwardIterator end) { using value_type = typename std::iterator_traits::value_type; @@ -139,7 +139,7 @@ public: * \param begin Iterator to the begin of the range. * \param end Iterator to the end of the range. */ - template + template void push_range2(Command cmd, ForwardIterator begin, ForwardIterator end) { using value_type = typename std::iterator_traits::value_type; @@ -158,7 +158,7 @@ public: /** \brief Sends a range. */ - template + template void push_range(Command cmd, Key const& key, Range const& range) { using std::begin; @@ -168,15 +168,25 @@ public: /** \brief Sends a range. */ - template + template void push_range(Command cmd, Range const& range) { using std::begin; using std::end; push_range2(cmd, begin(range), end(range)); } - }; +/** \brief Creates a serializer for Sentinel commands. + * \ingroup any + * \param storage The string. + */ +template +serializer> +make_serializer(std::basic_string& storage) +{ + return serializer>(storage); +} + } // resp3 } // aedis diff --git a/aedis/sentinel/client.hpp b/aedis/sentinel/client.hpp index cbaa9ff2..177dd4bf 100644 --- a/aedis/sentinel/client.hpp +++ b/aedis/sentinel/client.hpp @@ -13,6 +13,9 @@ namespace aedis { namespace sentinel { +/** @brief Convenience typedef for Redis sentinel clients. + * @ingroup any + */ template using client = generic::client; diff --git a/aedis/sentinel/receiver_base.hpp b/aedis/sentinel/receiver_base.hpp index 8cce51bb..4368d216 100644 --- a/aedis/sentinel/receiver_base.hpp +++ b/aedis/sentinel/receiver_base.hpp @@ -13,6 +13,9 @@ namespace aedis { namespace sentinel { +/** @brief Convenience typedef for the Redis sentinel receiver_base. + * @ingroup any + */ template using receiver_base = generic::receiver_base; diff --git a/examples/low_level/adapter.cpp b/examples/low_level/adapter.cpp index 672d2dcf..117f7553 100644 --- a/examples/low_level/adapter.cpp +++ b/examples/low_level/adapter.cpp @@ -18,7 +18,7 @@ namespace net = boost::asio; namespace resp3 = aedis::resp3; using aedis::redis::command; -using aedis::redis::make_serializer; +using aedis::resp3::make_serializer; using net::ip::tcp; using net::write; using net::buffer; diff --git a/examples/low_level/async_intro.cpp b/examples/low_level/async_intro.cpp index f1167cd6..cb4dfad2 100644 --- a/examples/low_level/async_intro.cpp +++ b/examples/low_level/async_intro.cpp @@ -18,7 +18,7 @@ namespace net = boost::asio; namespace resp3 = aedis::resp3; using aedis::redis::command; -using aedis::redis::make_serializer; +using aedis::resp3::make_serializer; using aedis::adapter::adapt; using net::ip::tcp; using net::write; diff --git a/examples/low_level/subscriber.cpp b/examples/low_level/subscriber.cpp index 7a5cf91b..8311dcbf 100644 --- a/examples/low_level/subscriber.cpp +++ b/examples/low_level/subscriber.cpp @@ -17,10 +17,10 @@ namespace net = boost::asio; namespace resp3 = aedis::resp3; -using aedis::redis::command; -using aedis::redis::make_serializer; -using aedis::adapter::adapt; +using aedis::resp3::make_serializer; using aedis::resp3::node; +using aedis::redis::command; +using aedis::adapter::adapt; using net::ip::tcp; using net::write; using net::buffer; diff --git a/examples/low_level/sync_intro.cpp b/examples/low_level/sync_intro.cpp index 07af9327..88beac75 100644 --- a/examples/low_level/sync_intro.cpp +++ b/examples/low_level/sync_intro.cpp @@ -17,7 +17,7 @@ namespace net = boost::asio; namespace resp3 = aedis::resp3; using aedis::redis::command; -using aedis::redis::make_serializer; +using aedis::resp3::make_serializer; using aedis::adapter::adapt; using net::dynamic_buffer; using net::ip::tcp; diff --git a/tests/online.cpp b/tests/online.cpp index bc590f0b..0a42f3bd 100644 --- a/tests/online.cpp +++ b/tests/online.cpp @@ -25,7 +25,7 @@ namespace net = boost::asio; namespace resp3 = aedis::resp3; using aedis::redis::command; -using aedis::redis::make_serializer; +using aedis::resp3::make_serializer; using aedis::adapter::adapt; using node_type = aedis::resp3::node; using tcp = net::ip::tcp; diff --git a/tools/commands.cpp b/tools/commands.cpp index 4445a99e..88be05e0 100644 --- a/tools/commands.cpp +++ b/tools/commands.cpp @@ -18,7 +18,7 @@ namespace net = boost::asio; namespace resp3 = aedis::resp3; using aedis::redis::command; -using aedis::redis::make_serializer; +using aedis::resp3::make_serializer; using aedis::resp3::node; using aedis::adapter::adapt; using net::ip::tcp;