#include "client.hpp"
-#include <ccache/util/assertions.hpp>
#include <ccache/util/expected.hpp>
#include <ccache/util/format.hpp>
m_request_start_time = std::chrono::steady_clock::now();
- TRY(send_u8(k_request_get));
- TRY(send_key(key));
+ util::Bytes msg;
+ msg.reserve(2 + key.size());
+ msg.push_back(k_request_get);
+ msg.push_back(static_cast<uint8_t>(key.size()));
+ msg.insert(msg.end(), key.data(), key.size());
+ TRY(send_bytes(msg));
return receive_response_get();
}
m_request_start_time = std::chrono::steady_clock::now();
uint8_t flag_byte = flags.overwrite ? 0x01 : 0x00;
- TRY(send_u8(k_request_put));
- TRY(send_key(key));
- TRY(send_u8(flag_byte));
- TRY(send_value(value));
+ uint64_t value_len = value.size();
+ uint8_t len_bytes[sizeof(uint64_t)];
+ std::memcpy(len_bytes, &value_len, sizeof(uint64_t)); // host byte order
+ util::Bytes header;
+ header.reserve(1 + 1 + key.size() + 1 + sizeof(uint64_t));
+ header.push_back(k_request_put);
+ header.push_back(static_cast<uint8_t>(key.size()));
+ header.insert(header.end(), key.data(), key.size());
+ header.push_back(flag_byte);
+ header.insert(header.end(), len_bytes, sizeof(uint64_t));
+ TRY(send_bytes(header));
+ TRY(send_bytes(value));
return receive_response_bool();
}
m_request_start_time = std::chrono::steady_clock::now();
- TRY(send_u8(k_request_remove));
- TRY(send_key(key));
+ util::Bytes msg;
+ msg.reserve(2 + key.size());
+ msg.push_back(k_request_remove);
+ msg.push_back(static_cast<uint8_t>(key.size()));
+ msg.insert(msg.end(), key.data(), key.size());
+ TRY(send_bytes(msg));
return receive_response_bool();
}
m_request_start_time = std::chrono::steady_clock::now();
- TRY(send_u8(k_request_stop));
+ const uint8_t msg[] = {k_request_stop};
+ TRY(send_bytes(msg));
return receive_response_void();
}
return value;
}
-tl::expected<void, Client::Error>
-Client::send_u8(uint8_t value)
-{
- return send_bytes({&value, 1});
-}
-
-tl::expected<void, Client::Error>
-Client::send_u64(uint64_t value)
-{
- uint8_t buffer[sizeof(uint64_t)];
- std::memcpy(buffer, &value, sizeof(uint64_t)); // host byte order
- return send_bytes(buffer);
-}
-
-tl::expected<void, Client::Error>
-Client::send_key(std::span<const uint8_t> key)
-{
- DEBUG_ASSERT(key.size() < 256);
- auto key_len = static_cast<uint8_t>(key.size());
- TRY(send_u8(key_len));
- TRY(send_bytes(key));
- return {};
-}
-
-tl::expected<void, Client::Error>
-Client::send_value(std::span<const uint8_t> value)
-{
- TRY(send_u64(value.size()));
- TRY(send_bytes(value));
- return {};
-}
-
tl::expected<std::optional<util::Bytes>, Client::Error>
Client::receive_response_get()
{
tl::expected<util::Bytes, Error> receive_bytes(size_t count);
tl::expected<uint8_t, Error> receive_u8();
tl::expected<uint64_t, Error> receive_u64();
- tl::expected<void, Error> send_u8(uint8_t value);
- tl::expected<void, Error> send_u64(uint64_t value);
- tl::expected<void, Error> send_key(std::span<const uint8_t> key);
- tl::expected<void, Error> send_value(std::span<const uint8_t> value);
tl::expected<std::optional<util::Bytes>, Error> receive_response_get();
tl::expected<bool, Error> receive_response_bool();
tl::expected<void, Error> receive_response_void();