blob: b11cc2317288088d92bbefe7f52e3acf39366d54 [file] [log] [blame]
// Copyright 2017 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.
#include "mojo/public/cpp/bindings/tests/test_native_types.h"
#include "base/macros.h"
#include "ipc/ipc_mojo_message_helper.h"
namespace mojo {
namespace test {
TestNativeStruct::TestNativeStruct() = default;
TestNativeStruct::TestNativeStruct(const std::string& message, int x, int y)
: message_(message), x_(x), y_(y) {}
TestNativeStruct::~TestNativeStruct() = default;
TestNativeStructWithAttachments::TestNativeStructWithAttachments() = default;
TestNativeStructWithAttachments::TestNativeStructWithAttachments(
TestNativeStructWithAttachments&& other) = default;
TestNativeStructWithAttachments::TestNativeStructWithAttachments(
const std::string& message,
mojo::ScopedMessagePipeHandle pipe)
: message_(message), pipe_(std::move(pipe)) {}
TestNativeStructWithAttachments::~TestNativeStructWithAttachments() = default;
TestNativeStructWithAttachments& TestNativeStructWithAttachments::operator=(
TestNativeStructWithAttachments&& other) = default;
} // namespace test
} // namespace mojo
namespace IPC {
// static
void ParamTraits<mojo::test::TestNativeStruct>::Write(base::Pickle* m,
const param_type& p) {
m->WriteString(p.message());
m->WriteInt(p.x());
m->WriteInt(p.y());
}
// static
bool ParamTraits<mojo::test::TestNativeStruct>::Read(const base::Pickle* m,
base::PickleIterator* iter,
param_type* r) {
std::string message;
if (!iter->ReadString(&message))
return false;
int x, y;
if (!iter->ReadInt(&x) || !iter->ReadInt(&y))
return false;
r->set_message(message);
r->set_x(x);
r->set_y(y);
return true;
}
// static
void ParamTraits<mojo::test::TestNativeStruct>::Log(const param_type& p,
std::string* l) {}
// static
void ParamTraits<mojo::test::TestNativeStructWithAttachments>::Write(
Message* m,
const param_type& p) {
m->WriteString(p.message());
IPC::MojoMessageHelper::WriteMessagePipeTo(m, p.PassPipe());
}
// static
bool ParamTraits<mojo::test::TestNativeStructWithAttachments>::Read(
const Message* m,
base::PickleIterator* iter,
param_type* r) {
std::string message;
if (!iter->ReadString(&message))
return false;
r->set_message(message);
mojo::ScopedMessagePipeHandle pipe;
if (!IPC::MojoMessageHelper::ReadMessagePipeFrom(m, iter, &pipe))
return false;
r->set_pipe(std::move(pipe));
return true;
}
// static
void ParamTraits<mojo::test::TestNativeStructWithAttachments>::Log(
const param_type& p,
std::string* l) {}
} // namespace IPC