| // Copyright 2018 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 "ipc/message_mojom_traits.h" | 
 |  | 
 | namespace mojo { | 
 |  | 
 | // static | 
 | base::span<const uint8_t> | 
 | StructTraits<IPC::mojom::MessageDataView, IPC::MessageView>::bytes( | 
 |     IPC::MessageView& view) { | 
 |   return view.bytes(); | 
 | } | 
 |  | 
 | // static | 
 | absl::optional<std::vector<mojo::native::SerializedHandlePtr>> | 
 | StructTraits<IPC::mojom::MessageDataView, IPC::MessageView>::handles( | 
 |     IPC::MessageView& view) { | 
 |   return view.TakeHandles(); | 
 | } | 
 |  | 
 | // static | 
 | bool StructTraits<IPC::mojom::MessageDataView, IPC::MessageView>::Read( | 
 |     IPC::mojom::MessageDataView data, | 
 |     IPC::MessageView* out) { | 
 |   mojo::ArrayDataView<uint8_t> bytes; | 
 |   data.GetBytesDataView(&bytes); | 
 |  | 
 |   absl::optional<std::vector<mojo::native::SerializedHandlePtr>> handles; | 
 |   if (!data.ReadHandles(&handles)) | 
 |     return false; | 
 |  | 
 |   *out = IPC::MessageView(bytes, std::move(handles)); | 
 |   return true; | 
 | } | 
 |  | 
 | }  // namespace mojo |