1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "mojo/public/cpp/bindings/lib/native_struct_serialization.h"
6
7 #include "mojo/public/cpp/bindings/lib/serialization.h"
8
9 namespace mojo {
10 namespace internal {
11
12 // static
PrepareToSerialize(const NativeStructPtr & input,SerializationContext * context)13 size_t UnmappedNativeStructSerializerImpl::PrepareToSerialize(
14 const NativeStructPtr& input,
15 SerializationContext* context) {
16 if (!input)
17 return 0;
18 return internal::PrepareToSerialize<Array<uint8_t>>(input->data, context);
19 }
20
21 // static
Serialize(const NativeStructPtr & input,Buffer * buffer,NativeStruct_Data ** output,SerializationContext * context)22 void UnmappedNativeStructSerializerImpl::Serialize(
23 const NativeStructPtr& input,
24 Buffer* buffer,
25 NativeStruct_Data** output,
26 SerializationContext* context) {
27 if (!input) {
28 *output = nullptr;
29 return;
30 }
31
32 Array_Data<uint8_t>* data = nullptr;
33 const ContainerValidateParams params(0, false, nullptr);
34 internal::Serialize<Array<uint8_t>>(input->data, buffer, &data, ¶ms,
35 context);
36 *output = reinterpret_cast<NativeStruct_Data*>(data);
37 }
38
39 // static
Deserialize(NativeStruct_Data * input,NativeStructPtr * output,SerializationContext * context)40 bool UnmappedNativeStructSerializerImpl::Deserialize(
41 NativeStruct_Data* input,
42 NativeStructPtr* output,
43 SerializationContext* context) {
44 Array_Data<uint8_t>* data = reinterpret_cast<Array_Data<uint8_t>*>(input);
45
46 NativeStructPtr result(NativeStruct::New());
47 if (!internal::Deserialize<Array<uint8_t>>(data, &result->data, context)) {
48 output = nullptr;
49 return false;
50 }
51 if (!result->data)
52 *output = nullptr;
53 else
54 result.Swap(output);
55 return true;
56 }
57
58 } // namespace internal
59 } // namespace mojo
60