1// Copyright 2014 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/string_serialization.h"
6
7#include <string.h>
8
9namespace mojo {
10
11size_t GetSerializedSize_(const String& input) {
12  if (!input)
13    return 0;
14  return internal::Align(sizeof(internal::String_Data) + input.size());
15}
16
17void Serialize_(const String& input, internal::Buffer* buf,
18                internal::String_Data** output) {
19  if (input) {
20    internal::String_Data* result =
21        internal::String_Data::New(input.size(), buf);
22    if (result)
23      memcpy(result->storage(), input.data(), input.size());
24    *output = result;
25  } else {
26    *output = NULL;
27  }
28}
29
30void Deserialize_(internal::String_Data* input, String* output) {
31  if (input) {
32    String result(input->storage(), input->size());
33    result.Swap(output);
34  } else {
35    output->reset();
36  }
37}
38
39}  // namespace mojo
40