// Copyright 2016 The Chromium 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 mojo.test;

// TODO(yzshen): Rename *WithTraits* types to something more readable.

struct NestedStructWithTraits {
  int32 value;
};

enum EnumWithTraits {
  VALUE_0,
  VALUE_1
};

struct StructWithTraits {
  EnumWithTraits f_enum;
  bool f_bool;
  uint32 f_uint32;
  uint64 f_uint64;
  string f_string;
  string f_string2;
  array<string> f_string_array;
  array<string> f_string_set;
  NestedStructWithTraits f_struct;
  array<NestedStructWithTraits> f_struct_array;
  map<string, NestedStructWithTraits> f_struct_map;
};

// Test that this container can be cloned.
struct StructWithTraitsContainer {
  StructWithTraits f_struct;
};

// Maps to a pass-by-value trivial struct.
struct TrivialStructWithTraits {
  int32 value;
};

// Maps to a move-only struct.
struct MoveOnlyStructWithTraits {
  handle f_handle;
};

// The custom type for MoveOnlyStructWithTraits is not clonable. Test that
// this container can compile as long as Clone() is not used.
struct MoveOnlyStructWithTraitsContainer {
  MoveOnlyStructWithTraits f_struct;
};

struct StructWithTraitsForUniquePtr {
  int32 f_int32;
};

union UnionWithTraits {
  int32 f_int32;
  NestedStructWithTraits f_struct;
};

interface TraitsTestService {
  EchoStructWithTraits(StructWithTraits s) => (StructWithTraits passed);

  EchoTrivialStructWithTraits(TrivialStructWithTraits s) =>
      (TrivialStructWithTraits passed);

  EchoMoveOnlyStructWithTraits(MoveOnlyStructWithTraits s) =>
      (MoveOnlyStructWithTraits passed);

  EchoNullableMoveOnlyStructWithTraits(MoveOnlyStructWithTraits? s) =>
      (MoveOnlyStructWithTraits? passed);

  EchoEnumWithTraits(EnumWithTraits e) => (EnumWithTraits passed);

  EchoStructWithTraitsForUniquePtr(StructWithTraitsForUniquePtr e) => (
      StructWithTraitsForUniquePtr passed);

  EchoNullableStructWithTraitsForUniquePtr(StructWithTraitsForUniquePtr? e) => (
      StructWithTraitsForUniquePtr? passed);

  EchoUnionWithTraits(UnionWithTraits u) => (UnionWithTraits passed);
};
