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;
};

interface ForTesting {};

// 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);

  // Having an associated interface pointer in the message makes sure the
  // message header version 2 is tested.
  BitFlipResponse(EchoArgsList arg, associated ForTesting? not_used);

  BackPointerResponse(EchoArgsList arg);
};

interface JsSide {
  SetCppSide(CppSide cpp);

  Ping();
  Echo(int32 numIterations, EchoArgs arg);
  BitFlip(EchoArgs arg);
  BackPointer(EchoArgs arg);
};
