write.hpp 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. /* Copyright (c) 2018-2024 Marcelo Zimbres Silva (mzimbres@gmail.com)
  2. *
  3. * Distributed under the Boost Software License, Version 1.0. (See
  4. * accompanying file LICENSE.txt)
  5. */
  6. #ifndef BOOST_REDIS_WRITE_HPP
  7. #define BOOST_REDIS_WRITE_HPP
  8. #include <boost/redis/request.hpp>
  9. #include <boost/asio/write.hpp>
  10. namespace boost::redis::detail {
  11. /** @brief Writes a request synchronously.
  12. *
  13. * @param stream Stream to write the request to.
  14. * @param req Request to write.
  15. */
  16. template <class SyncWriteStream>
  17. auto write(SyncWriteStream& stream, request const& req)
  18. {
  19. return asio::write(stream, asio::buffer(req.payload()));
  20. }
  21. template <class SyncWriteStream>
  22. auto write(SyncWriteStream& stream, request const& req, system::error_code& ec)
  23. {
  24. return asio::write(stream, asio::buffer(req.payload()), ec);
  25. }
  26. /** @brief Writes a request asynchronously.
  27. *
  28. * @param stream Stream to write the request to.
  29. * @param req Request to write.
  30. * @param token Asio completion token.
  31. */
  32. template <
  33. class AsyncWriteStream,
  34. class CompletionToken =
  35. asio::default_completion_token_t<typename AsyncWriteStream::executor_type> >
  36. auto async_write(
  37. AsyncWriteStream& stream,
  38. request const& req,
  39. CompletionToken&& token =
  40. asio::default_completion_token_t<typename AsyncWriteStream::executor_type>{})
  41. {
  42. return asio::async_write(stream, asio::buffer(req.payload()), token);
  43. }
  44. } // namespace boost::redis::detail
  45. #endif // BOOST_REDIS_WRITE_HPP