module js_to_cpp {

// This struct encompasses all of the basic types, so that they
// may be sent from C++ to JS and back for validation.
struct EchoArgs {
  int64 si64;
  int32 si32;
  int16 si16;
  int8  si8;
  uint64 ui64;
  uint32 ui32;
  uint16 ui16;
  uint8  ui8;
  float float_val;
  float float_inf;
  float float_nan;
  double double_val;
  double double_inf;
  double double_nan;
  string? name;
  array<string>? string_array;
  handle<message_pipe>? message_handle;
  handle<data_pipe_consumer>? data_handle;
};

struct EchoArgsList {
  EchoArgsList? next;
  EchoArgs? item;
};

// Note: For messages which control test flow, pick numbers that are unlikely
// to be hit as a result of our deliberate corruption of response messages.
interface CppSide {
  // Sent for all tests to notify that the JS side is now ready.
  StartTest@88888888();

  // Indicates end for echo, bit-flip, and back-pointer tests.
  TestFinished@99999999();

  // Responses from specific tests.
  PingResponse();
  EchoResponse(EchoArgsList list);
  BitFlipResponse(EchoArgsList arg);
  BackPointerResponse(EchoArgsList arg);
};

[Client=CppSide]
interface JsSide {
  Ping();
  Echo(int32 numIterations, EchoArgs arg);
  BitFlip(EchoArgs arg);
  BackPointer(EchoArgs arg);
};

}
