146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// found in the LICENSE file.
446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "mojo/common/common_type_converters.h"
646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
7f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include <string>
8f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
9f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "base/strings/utf_string_conversions.h"
10f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "url/gurl.h"
11f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
12f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)namespace mojo {
13f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
14f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// static
15f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)String TypeConverter<String, base::StringPiece>::Convert(
16f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    const base::StringPiece& input) {
1746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  if (input.empty()) {
1846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    char c = 0;
1946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    return String(&c, 0);
2046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  }
2146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  return String(input.data(), input.size());
2246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}
2346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// static
2446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)base::StringPiece TypeConverter<base::StringPiece, String>::Convert(
2546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    const String& input) {
2646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  return input.get();
27f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
28f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
29f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// static
30f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)String TypeConverter<String, base::string16>::Convert(
31f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    const base::string16& input) {
32f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  return TypeConverter<String, base::StringPiece>::Convert(
33f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      base::UTF16ToUTF8(input));
34f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
35f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// static
36f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)base::string16 TypeConverter<base::string16, String>::Convert(
37f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    const String& input) {
38f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  return base::UTF8ToUTF16(input.To<base::StringPiece>());
39f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
40f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
41f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)String TypeConverter<String, GURL>::Convert(const GURL& input) {
42f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  return String(input.spec());
43f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
44f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
45f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)GURL TypeConverter<GURL, String>::Convert(const String& input) {
46f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  return GURL(input.get());
47f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
48f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
49f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)std::string TypeConverter<std::string, Array<uint8_t> >::Convert(
50f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    const Array<uint8_t>& input) {
51f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  if (input.is_null())
52f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    return std::string();
53f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
54f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  return std::string(reinterpret_cast<const char*>(&input.front()),
55f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                     input.size());
56f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
57f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
58f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)Array<uint8_t> TypeConverter<Array<uint8_t>, std::string>::Convert(
59f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    const std::string& input) {
60f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  Array<uint8_t> result(input.size());
6146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  memcpy(&result.front(), input.c_str(), input.size());
6246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  return result.Pass();
6346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}
64
65}  // namespace mojo
66