• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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, &params,
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