blob: 369f682a31790c6c1f666c44431eba3582f13ea5 [file] [log] [blame]
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "mojo/public/cpp/base/proto_wrapper_mojom_traits.h"
#include <limits>
#include "base/check_op.h"
#include "mojo/public/cpp/base/big_buffer.h"
#include "mojo/public/cpp/base/proto_wrapper.h"
#include "mojo/public/mojom/base/proto_wrapper.mojom-shared.h"
namespace mojo {
const std::string&
StructTraits<mojo_base::mojom::ProtoWrapperDataView, mojo_base::ProtoWrapper>::
proto_name(const mojo_base::ProtoWrapper& wrapper) {
CHECK(wrapper.is_valid());
return wrapper.proto_name_;
}
mojo_base::BigBuffer& StructTraits<
mojo_base::mojom::ProtoWrapperDataView,
mojo_base::ProtoWrapper>::smuggled(mojo_base::ProtoWrapper& wrapper) {
CHECK(wrapper.is_valid());
return wrapper.bytes_.value();
}
bool StructTraits<
mojo_base::mojom::ProtoWrapperDataView,
mojo_base::ProtoWrapper>::Read(mojo_base::mojom::ProtoWrapperDataView data,
mojo_base::ProtoWrapper* wrapper) {
std::string proto_name;
if (!data.ReadProtoName(&proto_name)) {
return false;
}
if (proto_name.empty()) {
return false;
}
mojo_base::BigBuffer smuggled;
if (!data.ReadSmuggled(&smuggled)) {
return false;
}
if (smuggled.size() > std::numeric_limits<int>::max()) {
return false;
}
wrapper->proto_name_ = std::move(proto_name);
wrapper->bytes_ = std::move(smuggled);
return true;
}
} // namespace mojo