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