// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

module v23proxy.tests.transcoder_testcases;

import "mojo/public/interfaces/bindings/tests/test_unions.mojom";

struct UnnamedPrimitiveTestStruct {
    uint32 A;
    string B;
    bool C;
    float D;
};

struct VarietyOfBitSizesStruct {
 bool A;
 uint8 B;
 uint16 C;
 uint32 D;
 uint64 E;
 string F;
 array<int8> H;
 map<string, bool> I;
 int32 J;
 int16 K;
 int8 L;
 bool M;
 bool N;
 uint32 O;
};

struct PodUnionWrapper {
  mojo.test.PodUnion pod_union;
};


struct ObjectUnionWrapper {
  mojo.test.ObjectUnion object_union;
};

enum TestEnum {
    A, B, C
};

struct TestBasicStruct {
  TestEnum TestEnum;
  int32 a;
};

struct TestCyclicStruct {
    TestEnum TestEnum;
    TestCyclicStruct? TestCyclicStruct;
    int32 a;
};
