1645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// Copyright 2016 The Chromium Authors. All rights reserved.
2645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// Use of this source code is governed by a BSD-style license that can be
3645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// found in the LICENSE file.
4645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
5645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#ifndef MOJO_PUBLIC_CPP_BINDINGS_TESTS_STRUCT_WITH_TRAITS_IMPL_H_
6645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#define MOJO_PUBLIC_CPP_BINDINGS_TESTS_STRUCT_WITH_TRAITS_IMPL_H_
7645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
8645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#include <stdint.h>
9645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
10645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#include <map>
11645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#include <string>
12645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#include <vector>
13645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
14645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#include "base/strings/string_piece.h"
15645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#include "mojo/public/cpp/system/handle.h"
16645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
17645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chaveznamespace mojo {
18645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chaveznamespace test {
19645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
20645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezstruct NestedStructWithTraitsImpl {
21645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez public:
22645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  NestedStructWithTraitsImpl();
23645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  explicit NestedStructWithTraitsImpl(int32_t in_value);
24645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
25645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  bool operator==(const NestedStructWithTraitsImpl& other) const {
26645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    return value == other.value;
27645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  }
28645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
29645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  int32_t value = 0;
30645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez};
31645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
32645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezenum class EnumWithTraitsImpl { CUSTOM_VALUE_0 = 10, CUSTOM_VALUE_1 = 11 };
33645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
34645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// A type which knows how to look like a mojo::test::StructWithTraits mojom type
35645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// by way of mojo::StructTraits.
36645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezclass StructWithTraitsImpl {
37645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez public:
38645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  StructWithTraitsImpl();
39645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  ~StructWithTraitsImpl();
40645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
41645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  StructWithTraitsImpl(const StructWithTraitsImpl& other);
42645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
43645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  void set_enum(EnumWithTraitsImpl value) { enum_ = value; }
44645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  EnumWithTraitsImpl get_enum() const { return enum_; }
45645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
46645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  void set_bool(bool value) { bool_ = value; }
47645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  bool get_bool() const { return bool_; }
48645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
49645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  void set_uint32(uint32_t value) { uint32_ = value; }
50645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  uint32_t get_uint32() const { return uint32_; }
51645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
52645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  void set_uint64(uint64_t value) { uint64_ = value; }
53645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  uint64_t get_uint64() const { return uint64_; }
54645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
55645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  void set_string(std::string value) { string_ = value; }
56645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  base::StringPiece get_string_as_string_piece() const { return string_; }
57645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  const std::string& get_string() const { return string_; }
58645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
59645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  const std::vector<std::string>& get_string_array() const {
60645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    return string_array_;
61645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  }
62645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  std::vector<std::string>& get_mutable_string_array() { return string_array_; }
63645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
64645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  const NestedStructWithTraitsImpl& get_struct() const { return struct_; }
65645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  NestedStructWithTraitsImpl& get_mutable_struct() { return struct_; }
66645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
67645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  const std::vector<NestedStructWithTraitsImpl>& get_struct_array() const {
68645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    return struct_array_;
69645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  }
70645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  std::vector<NestedStructWithTraitsImpl>& get_mutable_struct_array() {
71645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    return struct_array_;
72645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  }
73645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
74645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  const std::map<std::string, NestedStructWithTraitsImpl>& get_struct_map()
75645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez      const {
76645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    return struct_map_;
77645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  }
78645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  std::map<std::string, NestedStructWithTraitsImpl>& get_mutable_struct_map() {
79645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    return struct_map_;
80645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  }
81645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
82645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez private:
83645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  EnumWithTraitsImpl enum_ = EnumWithTraitsImpl::CUSTOM_VALUE_0;
84645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  bool bool_ = false;
85645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  uint32_t uint32_ = 0;
86645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  uint64_t uint64_ = 0;
87645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  std::string string_;
88645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  std::vector<std::string> string_array_;
89645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  NestedStructWithTraitsImpl struct_;
90645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  std::vector<NestedStructWithTraitsImpl> struct_array_;
91645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  std::map<std::string, NestedStructWithTraitsImpl> struct_map_;
92645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez};
93645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
94645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// A type which knows how to look like a mojo::test::PassByValueStructWithTraits
95645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// mojom type by way of mojo::StructTraits.
96645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezclass PassByValueStructWithTraitsImpl {
97645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez public:
98645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  PassByValueStructWithTraitsImpl();
99645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  PassByValueStructWithTraitsImpl(PassByValueStructWithTraitsImpl&& other);
100645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  ~PassByValueStructWithTraitsImpl();
101645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
102645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  ScopedHandle& get_mutable_handle() { return handle_; }
103645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
104645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez private:
105645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  ScopedHandle handle_;
106645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  DISALLOW_COPY_AND_ASSIGN(PassByValueStructWithTraitsImpl);
107645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez};
108645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
109645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez}  // namespace test
110645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez}  // namespace mojo
111645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
112645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#endif  // MOJO_PUBLIC_CPP_BINDINGS_TESTS_STRUCT_WITH_TRAITS_IMPL_H_
113