Home | History | Annotate | Download | only in chromeos-dbus-bindings
      1 // Copyright 2014 The Chromium OS 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 "chromeos-dbus-bindings/header_generator.h"
      6 
      7 #include <string>
      8 
      9 #include <base/files/file_path.h>
     10 #include <base/files/file_util.h>
     11 #include <base/strings/string_util.h>
     12 #include <base/strings/stringprintf.h>
     13 #include <brillo/strings/string_utils.h>
     14 
     15 #include "chromeos-dbus-bindings/indented_text.h"
     16 
     17 using std::string;
     18 using std::vector;
     19 
     20 namespace chromeos_dbus_bindings {
     21 
     22 // static
     23 string HeaderGenerator::GenerateHeaderGuard(
     24     const base::FilePath& output_file) {
     25   string guard = base::StringPrintf("____chromeos_dbus_binding__%s",
     26                                     output_file.value().c_str());
     27   for (auto& c : guard) {
     28     if (base::IsAsciiAlpha(c)) {
     29       c = base::ToUpperASCII(c);
     30     } else if (!base::IsAsciiDigit(c)) {
     31       c = '_';
     32     }
     33   }
     34   return guard;
     35 }
     36 
     37 // static
     38 bool HeaderGenerator::IsIntegralType(const string& type) {
     39   return type.find("::") == std::string::npos;
     40 }
     41 
     42 // static
     43 void HeaderGenerator::MakeConstReferenceIfNeeded(std::string* type) {
     44   if (!IsIntegralType(*type)) {
     45     *type = base::StringPrintf("const %s&", type->c_str());
     46   }
     47 }
     48 
     49 // static
     50 bool HeaderGenerator::WriteTextToFile(
     51     const base::FilePath& output_file, const IndentedText &text) {
     52   string contents = text.GetContents();
     53   int expected_write_return = contents.size();
     54   if (base::WriteFile(output_file, contents.c_str(), contents.size()) !=
     55       expected_write_return) {
     56     LOG(ERROR) << "Failed to write file " << output_file.value();
     57     return false;
     58   }
     59   return true;
     60 }
     61 
     62 // static
     63 string HeaderGenerator::GetArgName(const char* prefix,
     64                                    const string& arg_name,
     65                                    int arg_index) {
     66   string name = arg_name.empty() ? std::to_string(arg_index) : arg_name;
     67   return base::StringPrintf("%s_%s", prefix, name.c_str());
     68 }
     69 
     70 }  // namespace chromeos_dbus_bindings
     71