1
0

callback.h 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. #ifndef CPR_CALLBACK_H
  2. #define CPR_CALLBACK_H
  3. #include "cprtypes.h"
  4. #include <functional>
  5. #include <utility>
  6. namespace cpr {
  7. class ReadCallback {
  8. public:
  9. ReadCallback() = default;
  10. // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions)
  11. ReadCallback(std::function<bool(char* buffer, size_t& size, intptr_t userdata)> p_callback, intptr_t p_userdata = 0) : userdata(p_userdata), size{-1}, callback{std::move(p_callback)} {}
  12. ReadCallback(cpr_off_t p_size, std::function<bool(char* buffer, size_t& size, intptr_t userdata)> p_callback, intptr_t p_userdata = 0) : userdata(p_userdata), size{p_size}, callback{std::move(p_callback)} {}
  13. bool operator()(char* buffer, size_t& buffer_size) const {
  14. return callback(buffer, buffer_size, userdata);
  15. }
  16. intptr_t userdata;
  17. cpr_off_t size{};
  18. std::function<bool(char* buffer, size_t& size, intptr_t userdata)> callback;
  19. };
  20. class HeaderCallback {
  21. public:
  22. HeaderCallback() = default;
  23. // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions)
  24. HeaderCallback(std::function<bool(std::string header, intptr_t userdata)> p_callback, intptr_t p_userdata = 0) : userdata(p_userdata), callback(std::move(p_callback)) {}
  25. bool operator()(std::string header) const {
  26. return callback(std::move(header), userdata);
  27. }
  28. intptr_t userdata;
  29. std::function<bool(std::string header, intptr_t userdata)> callback;
  30. };
  31. class WriteCallback {
  32. public:
  33. WriteCallback() = default;
  34. // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions)
  35. WriteCallback(std::function<bool(std::string data, intptr_t userdata)> p_callback, intptr_t p_userdata = 0) : userdata(p_userdata), callback(std::move(p_callback)) {}
  36. bool operator()(std::string data) const {
  37. return callback(std::move(data), userdata);
  38. }
  39. intptr_t userdata;
  40. std::function<bool(std::string data, intptr_t userdata)> callback;
  41. };
  42. class ProgressCallback {
  43. public:
  44. ProgressCallback() = default;
  45. // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions)
  46. ProgressCallback(std::function<bool(cpr_off_t downloadTotal, cpr_off_t downloadNow, cpr_off_t uploadTotal, cpr_off_t uploadNow, intptr_t userdata)> p_callback, intptr_t p_userdata = 0) : userdata(p_userdata), callback(std::move(p_callback)) {}
  47. bool operator()(cpr_off_t downloadTotal, cpr_off_t downloadNow, cpr_off_t uploadTotal, cpr_off_t uploadNow) const {
  48. return callback(downloadTotal, downloadNow, uploadTotal, uploadNow, userdata);
  49. }
  50. intptr_t userdata;
  51. std::function<bool(cpr_off_t downloadTotal, cpr_off_t downloadNow, cpr_off_t uploadTotal, cpr_off_t uploadNow, intptr_t userdata)> callback;
  52. };
  53. class DebugCallback {
  54. public:
  55. enum class InfoType {
  56. TEXT = 0,
  57. HEADER_IN = 1,
  58. HEADER_OUT = 2,
  59. DATA_IN = 3,
  60. DATA_OUT = 4,
  61. SSL_DATA_IN = 5,
  62. SSL_DATA_OUT = 6,
  63. };
  64. DebugCallback() = default;
  65. // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions)
  66. DebugCallback(std::function<void(InfoType type, std::string data, intptr_t userdata)> p_callback, intptr_t p_userdata = 0) : userdata(p_userdata), callback(std::move(p_callback)) {}
  67. void operator()(InfoType type, std::string data) const {
  68. callback(type, std::move(data), userdata);
  69. }
  70. intptr_t userdata;
  71. std::function<void(InfoType type, std::string data, intptr_t userdata)> callback;
  72. };
  73. } // namespace cpr
  74. #endif