1645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// Copyright 2016 The Chromium Authors. All rights reserved.
2645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// Use of this source code is governed by a BSD-style license that can be
3645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// found in the LICENSE file.
4645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
5645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#include "mojo/public/cpp/bindings/string_traits_string16.h"
6645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
7645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#include <string>
8645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
9645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#include "base/strings/utf_string_conversions.h"
10645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
11645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chaveznamespace mojo {
12645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
13645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// static
14645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezvoid* StringTraits<base::string16>::SetUpContext(const base::string16& input) {
15645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  return new std::string(base::UTF16ToUTF8(input));
16645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez}
17645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
18645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// static
19645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezvoid StringTraits<base::string16>::TearDownContext(const base::string16& input,
20645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez                                                   void* context) {
21645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  delete static_cast<std::string*>(context);
22645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez}
23645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
24645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// static
25645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezsize_t StringTraits<base::string16>::GetSize(const base::string16& input,
26645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez                                             void* context) {
27645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  return static_cast<std::string*>(context)->size();
28645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez}
29645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
30645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// static
31645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezconst char* StringTraits<base::string16>::GetData(const base::string16& input,
32645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez                                                  void* context) {
33645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  return static_cast<std::string*>(context)->data();
34645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez}
35645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
36645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// static
37645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezbool StringTraits<base::string16>::Read(StringDataView input,
38645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez                                        base::string16* output) {
39645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  return base::UTF8ToUTF16(input.storage(), input.size(), output);
40645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez}
41645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
42645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez}  // namespace mojo
43