opcode403_codec.cpp 1.0 KB

1234567891011121314151617181920212223242526272829303132
  1. #include <cstddef>
  2. #include <span>
  3. #include "../../encoding/byte_order.h"
  4. #include "opcode403.h"
  5. namespace sunrise::middleware::web_service::messages::opcode403 {
  6. namespace {
  7. /** The descriptor is one big-endian identity followed by a single alignment byte. */
  8. constexpr std::size_t kPayloadSize = encoding::kU64Size + 1U;
  9. } // namespace
  10. /** Parses the shared equip and unequip item-instance descriptor. */
  11. bool parse_request(const Message& message, Request& request) noexcept {
  12. request = {};
  13. if ((message.opcode != kOpcode && message.opcode != kUnequipOpcode)
  14. || message.payload.size() != kPayloadSize
  15. || message.payload[encoding::kU64Size] != std::byte{}) {
  16. return false;
  17. }
  18. request.instanceSoid = encoding::read_u64_be(
  19. std::span<const std::byte, encoding::kU64Size>{message.payload.data(), encoding::kU64Size});
  20. if (request.instanceSoid == 0) {
  21. request = {};
  22. return false;
  23. }
  24. return true;
  25. }
  26. } // namespace sunrise::middleware::web_service::messages::opcode403