blob: 107f931dd57520a0ac1ddfd2070407afb35d8779 [file] [log] [blame]
// Copyright 2022 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
use bind::parser::common::Include;
use crate::generate::BindingGenerator;
pub struct CppGenerator {}
impl BindingGenerator for CppGenerator {
fn generate_using_declaration(self: &Self, using_decl: &Include) -> String {
let include_stem = using_decl.name.to_string().replace(".", "/");
format!("#include <bind/{}/cpp/bind.h>\n", include_stem)
}
fn generate_identifier_declaration(self: &Self, path: &str, identifier_name: &str) -> String {
format!(
"static const std::string {} = \"{}.{}\";\n",
identifier_name.to_uppercase(),
path,
identifier_name
)
}
fn generate_numerical_value_declaration(self: &Self, name: &str, val: &u64) -> String {
format!("static constexpr uint32_t {} = {};\n", name, val)
}
fn generate_string_value_declaration(self: &Self, name: &str, val: &str) -> String {
format!("static const std::string {} = \"{}\";\n", name, val)
}
fn generate_bool_value_declaration(self: &Self, name: &str, val: &bool) -> String {
format!("static constexpr bool {} = {};\n", name, val)
}
fn generate_enum_value_declaration(
self: &Self,
name: &str,
path: &str,
identifier_name: &str,
val: &str,
) -> String {
format!("static const std::string {} = \"{}.{}.{}\";\n", name, path, identifier_name, val)
}
fn generate_result(
self: &Self,
bind_name: &str,
using_declarations: &str,
constant_declarations: &str,
) -> String {
let namespace = format!("bind_{}", bind_name.replace(".", "_"));
let header_guard = format!("{}_BINDLIB_", namespace.to_uppercase());
format!(
include_str!("templates/cpp_header.template"),
namespace = namespace,
header_guard = header_guard,
dep_includes = using_declarations,
content = constant_declarations,
)
}
}