chromium/mojo/public/interfaces/bindings/tests/struct_with_traits.mojom

// Copyright 2016 The Chromium Authors
// 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;
};

struct StructWithUnreachableTraits {
  bool ignore_me;
};

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

interface TestUnserializedStruct {
  PassUnserializedStruct(StructWithUnreachableTraits s)
      => (StructWithUnreachableTraits passed);
};

// Test that specifying default value for a typemapped enum field works.
struct EnumWithTraitsContainer {
  EnumWithTraits f_field = EnumWithTraits.VALUE_1;
};

struct StructForceSerialize {
  int32 value;
};

struct StructNestedForceSerialize {
  StructForceSerialize force;
};

interface ForceSerializeTester {
  SendForceSerializedStruct(StructForceSerialize s)
      => (StructForceSerialize passed);
  SendNestedForceSerializedStruct(StructNestedForceSerialize s)
      => (StructNestedForceSerialize passed);
};