| // 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 RustGenerator {} |
| |
| impl BindingGenerator for RustGenerator { |
| fn generate_using_declaration(self: &Self, using_decl: &Include) -> String { |
| let dep_name_underscores = using_decl.name.to_string().replace(".", "_"); |
| format!("pub use bind_{};\n", dep_name_underscores) |
| } |
| |
| fn generate_identifier_declaration(self: &Self, path: &str, identifier_name: &str) -> String { |
| format!( |
| "pub const {}: &str = \"{}.{}\";\n", |
| identifier_name.to_uppercase(), |
| path, |
| identifier_name |
| ) |
| } |
| |
| fn generate_numerical_value_declaration(self: &Self, name: &str, val: &u64) -> String { |
| format!("pub const {}: u32 = {};\n", name, val) |
| } |
| |
| fn generate_string_value_declaration(self: &Self, name: &str, val: &str) -> String { |
| format!("pub const {}: &str = \"{}\";\n", name, val) |
| } |
| |
| fn generate_bool_value_declaration(self: &Self, name: &str, val: &bool) -> String { |
| format!("pub const {}: bool = {};\n", name, val) |
| } |
| |
| fn generate_enum_value_declaration( |
| self: &Self, |
| name: &str, |
| path: &str, |
| identifier_name: &str, |
| val: &str, |
| ) -> String { |
| format!("pub const {}: &str = \"{}.{}.{}\";\n", name, path, identifier_name, val) |
| } |
| |
| fn generate_result( |
| self: &Self, |
| _bind_name: &str, |
| using_declarations: &str, |
| constant_declarations: &str, |
| ) -> String { |
| format!( |
| include_str!("templates/rust_file.template"), |
| expose = using_declarations, |
| content = constant_declarations |
| ) |
| } |
| } |