blob: ce8a22933b5f5e8a250c207ab8d14571454c2e42 [file] [log] [blame]
// 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.
#ifndef MOJO_PUBLIC_CPP_BINDINGS_TESTS_STRUCT_WITH_TRAITS_IMPL_H_
#define MOJO_PUBLIC_CPP_BINDINGS_TESTS_STRUCT_WITH_TRAITS_IMPL_H_
#include <stdint.h>
#include <map>
#include <set>
#include <string>
#include <vector>
#include "base/strings/string_piece.h"
#include "mojo/public/cpp/system/handle.h"
namespace mojo {
namespace test {
struct NestedStructWithTraitsImpl {
public:
NestedStructWithTraitsImpl();
explicit NestedStructWithTraitsImpl(int32_t in_value);
bool operator==(const NestedStructWithTraitsImpl& other) const {
return value == other.value;
}
int32_t value = 0;
};
enum class EnumWithTraitsImpl { CUSTOM_VALUE_0 = 10, CUSTOM_VALUE_1 = 11 };
// A type which knows how to look like a mojo::test::StructWithTraits mojom type
// by way of mojo::StructTraits.
class StructWithTraitsImpl {
public:
StructWithTraitsImpl();
~StructWithTraitsImpl();
StructWithTraitsImpl(const StructWithTraitsImpl& other);
void set_enum(EnumWithTraitsImpl value) { enum_ = value; }
EnumWithTraitsImpl get_enum() const { return enum_; }
void set_bool(bool value) { bool_ = value; }
bool get_bool() const { return bool_; }
void set_uint32(uint32_t value) { uint32_ = value; }
uint32_t get_uint32() const { return uint32_; }
void set_uint64(uint64_t value) { uint64_ = value; }
uint64_t get_uint64() const { return uint64_; }
void set_string(std::string value) { string_ = value; }
base::StringPiece get_string_as_string_piece() const { return string_; }
const std::string& get_string() const { return string_; }
const std::vector<std::string>& get_string_array() const {
return string_array_;
}
std::vector<std::string>& get_mutable_string_array() { return string_array_; }
const std::set<std::string>& get_string_set() const {
return string_set_;
}
std::set<std::string>& get_mutable_string_set() { return string_set_; }
const NestedStructWithTraitsImpl& get_struct() const { return struct_; }
NestedStructWithTraitsImpl& get_mutable_struct() { return struct_; }
const std::vector<NestedStructWithTraitsImpl>& get_struct_array() const {
return struct_array_;
}
std::vector<NestedStructWithTraitsImpl>& get_mutable_struct_array() {
return struct_array_;
}
const std::map<std::string, NestedStructWithTraitsImpl>& get_struct_map()
const {
return struct_map_;
}
std::map<std::string, NestedStructWithTraitsImpl>& get_mutable_struct_map() {
return struct_map_;
}
private:
EnumWithTraitsImpl enum_ = EnumWithTraitsImpl::CUSTOM_VALUE_0;
bool bool_ = false;
uint32_t uint32_ = 0;
uint64_t uint64_ = 0;
std::string string_;
std::vector<std::string> string_array_;
std::set<std::string> string_set_;
NestedStructWithTraitsImpl struct_;
std::vector<NestedStructWithTraitsImpl> struct_array_;
std::map<std::string, NestedStructWithTraitsImpl> struct_map_;
};
// A type which corresponds nominally to the
// mojo::test::StructWithUnreachableTraits mojom type. Used to test that said
// type is never serialized, i.e. objects of this type are simply copied into
// a message as-is when written to an intra-process interface.
struct StructWithUnreachableTraitsImpl {
int32_t magic_number = 0;
};
// A type which knows how to look like a mojo::test::TrivialStructWithTraits
// mojom type by way of mojo::StructTraits.
struct TrivialStructWithTraitsImpl {
int32_t value;
};
// A type which knows how to look like a mojo::test::MoveOnlyStructWithTraits
// mojom type by way of mojo::StructTraits.
class MoveOnlyStructWithTraitsImpl {
public:
MoveOnlyStructWithTraitsImpl();
MoveOnlyStructWithTraitsImpl(MoveOnlyStructWithTraitsImpl&& other);
~MoveOnlyStructWithTraitsImpl();
ScopedHandle& get_mutable_handle() { return handle_; }
MoveOnlyStructWithTraitsImpl& operator=(MoveOnlyStructWithTraitsImpl&& other);
private:
ScopedHandle handle_;
DISALLOW_COPY_AND_ASSIGN(MoveOnlyStructWithTraitsImpl);
};
class UnionWithTraitsBase {
public:
enum class Type { INT32, STRUCT };
virtual ~UnionWithTraitsBase() {}
Type type() const { return type_; }
protected:
Type type_ = Type::INT32;
};
class UnionWithTraitsInt32 : public UnionWithTraitsBase {
public:
UnionWithTraitsInt32() {}
explicit UnionWithTraitsInt32(int32_t value) : value_(value) {}
~UnionWithTraitsInt32() override;
int32_t value() const { return value_; }
void set_value(int32_t value) { value_ = value; }
private:
int32_t value_ = 0;
};
class UnionWithTraitsStruct : public UnionWithTraitsBase {
public:
UnionWithTraitsStruct() { type_ = Type::STRUCT; }
explicit UnionWithTraitsStruct(int32_t value) : struct_(value) {
type_ = Type::STRUCT;
}
~UnionWithTraitsStruct() override;
NestedStructWithTraitsImpl& get_mutable_struct() { return struct_; }
const NestedStructWithTraitsImpl& get_struct() const { return struct_; }
private:
NestedStructWithTraitsImpl struct_;
};
} // namespace test
} // namespace mojo
#endif // MOJO_PUBLIC_CPP_BINDINGS_TESTS_STRUCT_WITH_TRAITS_IMPL_H_