Home | History | Annotate | Download | only in common
      1 // Copyright 2013 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/common/common_type_converters.h"
      6 
      7 #include <stdint.h>
      8 
      9 #include <string>
     10 
     11 #include "base/strings/utf_string_conversions.h"
     12 
     13 namespace mojo {
     14 
     15 // static
     16 String TypeConverter<String, base::StringPiece>::Convert(
     17     const base::StringPiece& input) {
     18   if (input.empty()) {
     19     char c = 0;
     20     return String(&c, 0);
     21   }
     22   return String(input.data(), input.size());
     23 }
     24 // static
     25 base::StringPiece TypeConverter<base::StringPiece, String>::Convert(
     26     const String& input) {
     27   return input.get();
     28 }
     29 
     30 // static
     31 String TypeConverter<String, base::string16>::Convert(
     32     const base::string16& input) {
     33   return TypeConverter<String, base::StringPiece>::Convert(
     34       base::UTF16ToUTF8(input));
     35 }
     36 // static
     37 base::string16 TypeConverter<base::string16, String>::Convert(
     38     const String& input) {
     39   return base::UTF8ToUTF16(input.To<base::StringPiece>());
     40 }
     41 
     42 std::string TypeConverter<std::string, Array<uint8_t>>::Convert(
     43     const Array<uint8_t>& input) {
     44   if (input.is_null() || input.empty())
     45     return std::string();
     46 
     47   return std::string(reinterpret_cast<const char*>(&input.front()),
     48                      input.size());
     49 }
     50 
     51 Array<uint8_t> TypeConverter<Array<uint8_t>, std::string>::Convert(
     52     const std::string& input) {
     53   Array<uint8_t> result(input.size());
     54   if (!input.empty())
     55     memcpy(&result.front(), input.c_str(), input.size());
     56   return result;
     57 }
     58 
     59 Array<uint8_t> TypeConverter<Array<uint8_t>, base::StringPiece>::Convert(
     60     const base::StringPiece& input) {
     61   Array<uint8_t> result(input.size());
     62   if (!input.empty())
     63     memcpy(&result.front(), input.data(), input.size());
     64   return result;
     65 }
     66 
     67 base::string16 TypeConverter<base::string16, Array<uint8_t>>::Convert(
     68     const Array<uint8_t>& input) {
     69   if (input.is_null() || input.empty())
     70     return base::string16();
     71 
     72   return base::string16(reinterpret_cast<const base::char16*>(&input.front()),
     73                         input.size() / sizeof(base::char16));
     74 }
     75 
     76 Array<uint8_t> TypeConverter<Array<uint8_t>, base::string16>::Convert(
     77     const base::string16& input) {
     78   Array<uint8_t> result(input.size() * sizeof(base::char16));
     79   if (!input.empty())
     80     memcpy(&result.front(), input.c_str(), input.size() * sizeof(base::char16));
     81   return result;
     82 }
     83 
     84 }  // namespace mojo
     85