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
17using std::string;
18using std::vector;
19
20namespace chromeos_dbus_bindings {
21
22// static
23string 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
38bool HeaderGenerator::IsIntegralType(const string& type) {
39  return type.find("::") == std::string::npos;
40}
41
42// static
43void HeaderGenerator::MakeConstReferenceIfNeeded(std::string* type) {
44  if (!IsIntegralType(*type)) {
45    *type = base::StringPrintf("const %s&", type->c_str());
46  }
47}
48
49// static
50bool 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
63string 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