xref: /aosp_15_r20/external/libchrome/mojo/public/cpp/base/ref_counted_memory_mojom_traits.cc (revision 635a864187cb8b6c713ff48b7e790a6b21769273)
1 // Copyright 2018 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/base/ref_counted_memory_mojom_traits.h"
6 
7 #include "mojo/public/cpp/base/big_buffer_mojom_traits.h"
8 
9 namespace mojo {
10 
11 // static
12 mojo_base::BigBuffer StructTraits<mojo_base::mojom::RefCountedMemoryDataView,
13                                   scoped_refptr<base::RefCountedMemory>>::
data(const scoped_refptr<base::RefCountedMemory> & in)14     data(const scoped_refptr<base::RefCountedMemory>& in) {
15   return mojo_base::BigBuffer(base::make_span(in->front(), in->size()));
16 }
17 
18 // static
19 bool StructTraits<mojo_base::mojom::RefCountedMemoryDataView,
20                   scoped_refptr<base::RefCountedMemory>>::
IsNull(const scoped_refptr<base::RefCountedMemory> & input)21     IsNull(const scoped_refptr<base::RefCountedMemory>& input) {
22   return !input.get();
23 }
24 
25 // static
26 void StructTraits<mojo_base::mojom::RefCountedMemoryDataView,
27                   scoped_refptr<base::RefCountedMemory>>::
SetToNull(scoped_refptr<base::RefCountedMemory> * out)28     SetToNull(scoped_refptr<base::RefCountedMemory>* out) {
29   *out = scoped_refptr<base::RefCountedMemory>();
30 }
31 
32 // static
33 bool StructTraits<mojo_base::mojom::RefCountedMemoryDataView,
34                   scoped_refptr<base::RefCountedMemory>>::
Read(mojo_base::mojom::RefCountedMemoryDataView data,scoped_refptr<base::RefCountedMemory> * out)35     Read(mojo_base::mojom::RefCountedMemoryDataView data,
36          scoped_refptr<base::RefCountedMemory>* out) {
37   mojo_base::BigBuffer buffer;
38   if (!data.ReadData(&buffer))
39     return false;
40 
41   *out =
42       base::MakeRefCounted<base::RefCountedBytes>(buffer.data(), buffer.size());
43   return true;
44 }
45 
46 }  // namespace mojo
47