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

library json_xdr_unittest;

struct RequiredData {
  string @string;
  bool @bool;
  int8 @int8;
  int16 @int16;
  int32 @int32;
  int64 @int64;
  uint8 @uint8;
  uint16 @uint16;
  uint32 @uint32;
  uint64 @uint64;
  float32 @float32;
  float64 @float64;
  Struct @struct;
  Enum @enum;
  Union @union;
};

struct OptionalData {
  string? @string;
  Struct? @struct;
  Union? @union;
};

struct RequiredRepeatedRequiredData {
  vector<string> @string;
  vector<bool> @bool;
  vector<int8> @int8;
  vector<int16> @int16;
  vector<int32> @int32;
  vector<int64> @int64;
  vector<uint8> @uint8;
  vector<uint16> @uint16;
  vector<uint32> @uint32;
  vector<uint64> @uint64;
  vector<float32> @float32;
  vector<float64> @float64;
  vector<Struct> @struct;
  vector<Enum> @enum;
  vector<Union>? @union;
};

struct RequiredRepeatedOptionalData {
  vector<string?> @string;
  vector<Struct?> @struct;
  vector<Union?>? @union;
};

// NOTE(mesch): According to jeffbrown, optional vector typed fields are going
// away.

struct OptionalRepeatedRequiredData {
  vector<string>? @string;
  vector<bool>? @bool;
  vector<int8>? @int8;
  vector<int16>? @int16;
  vector<int32>? @int32;
  vector<int64>? @int64;
  vector<uint8>? @uint8;
  vector<uint16>? @uint16;
  vector<uint32>? @uint32;
  vector<uint64>? @uint64;
  vector<float32>? @float32;
  vector<float64>? @float64;
  vector<Struct>? @struct;
  vector<Enum>? @enum;
  vector<Union>? @union;
};

struct OptionalRepeatedOptionalData {
  vector<string?>? @string;
  vector<Struct?>? @struct;
  vector<Union?>? @union;
};

// The purpose of this struct is coverage for struct valued fields above. The
// field exists only so we have something to be checked to be there. Other types
// of fields of structs are covered above, not here.
struct Struct {
  int32 item;
};

enum Enum {
  ZERO = 0;
  ONE = 1;
  TWO = 2;
};


// NOTE(mesch): Can't use @struct, FIDL-130.
union Union {
  int32 @int32;
  string @string;
};
