elura-cli 0.2.2

Project scaffold generator for Elura applications
#include "elura/elr2.hpp"

#include <cassert>
#include <string>
#include <vector>

int main() {
  elura::Frame request;
  request.kind = elura::FrameKind::Request;
  request.route = 100;
  request.request_id = 7;
  request.sequence = 11;
  request.payload = {'h', 'e', 'l', 'l', 'o'};
  const std::vector<std::uint8_t> expected = {
      0x45, 0x4c, 0x52, 0x32, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00,
      0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00,
      0x00, 0x0b, 0x00, 0x00, 0x00, 0x05, 0x68, 0x65, 0x6c, 0x6c, 0x6f};
  const auto encoded = elura::encode_frame(request);
  assert(encoded == expected);
  const auto decoded = elura::decode_frame(encoded);
  assert(decoded.route == 100 && decoded.request_id == 7 && decoded.payload == request.payload);

  elura::StreamDecoder stream;
  stream.append(encoded.data(), 10);
  elura::Frame streamed;
  assert(!stream.next(streamed));
  stream.append(encoded.data() + 10, encoded.size() - 10);
  assert(stream.next(streamed));
  assert(streamed.payload == request.payload && stream.buffered() == 0);

  auto wrong_version = encoded;
  wrong_version[5] = 3;
  bool rejected_wrong_version = false;
  try {
    (void)elura::decode_frame(wrong_version);
  } catch (const elura::ProtocolError&) {
    rejected_wrong_version = true;
  }
  assert(rejected_wrong_version);

  const elura::SessionControl control{
      elura::SessionControlAction::AccountVersionChanged, "credentials rotated"};
  const auto control_bytes = elura::encode_session_control(control);
  const std::vector<std::uint8_t> expected_control = {
      0x08, 0x02, 0x12, 0x13, 'c', 'r', 'e', 'd', 'e', 'n', 't', 'i', 'a', 'l', 's',
      ' ',  'r',  'o',  't',  'a',  't',  'e',  'd'};
  assert(control_bytes == expected_control);
  const auto decoded_control = elura::decode_session_control(control_bytes);
  assert(decoded_control.action == control.action && decoded_control.reason == control.reason);
  return 0;
}