1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
4
5 //! Functions to calculate names for FFI symbols
6 //!
7 //! All of these functions input a `namespace` parameter which is:
8 //! - The UDL namespace for UDL-based generation
9 //! - The "module path" of the item for proc-macro based generation. Right now this is actually just the
10 //! crate name, but we eventually hope to make this the full module path.
11 //!
12 //! This could cause collisions in the case where you combine UDL and proc-macro generation and you
13 //! set the UDL namespace to the name of another crate. This seems so pathological that it's not
14 //! worth the code complexity to prevent it.
15
16 /// FFI symbol name for a top-level function
fn_symbol_name(namespace: &str, name: &str) -> String17 pub fn fn_symbol_name(namespace: &str, name: &str) -> String {
18 let name = name.to_ascii_lowercase();
19 format!("uniffi_{namespace}_fn_func_{name}")
20 }
21
22 /// FFI symbol name for an object constructor
constructor_symbol_name(namespace: &str, object_name: &str, name: &str) -> String23 pub fn constructor_symbol_name(namespace: &str, object_name: &str, name: &str) -> String {
24 let object_name = object_name.to_ascii_lowercase();
25 let name = name.to_ascii_lowercase();
26 format!("uniffi_{namespace}_fn_constructor_{object_name}_{name}")
27 }
28
29 /// FFI symbol name for an object method
method_symbol_name(namespace: &str, object_name: &str, name: &str) -> String30 pub fn method_symbol_name(namespace: &str, object_name: &str, name: &str) -> String {
31 let object_name = object_name.to_ascii_lowercase();
32 let name = name.to_ascii_lowercase();
33 format!("uniffi_{namespace}_fn_method_{object_name}_{name}")
34 }
35
36 /// FFI symbol name for the `clone` function for an object.
clone_fn_symbol_name(namespace: &str, object_name: &str) -> String37 pub fn clone_fn_symbol_name(namespace: &str, object_name: &str) -> String {
38 let object_name = object_name.to_ascii_lowercase();
39 format!("uniffi_{namespace}_fn_clone_{object_name}")
40 }
41
42 /// FFI symbol name for the `free` function for an object.
free_fn_symbol_name(namespace: &str, object_name: &str) -> String43 pub fn free_fn_symbol_name(namespace: &str, object_name: &str) -> String {
44 let object_name = object_name.to_ascii_lowercase();
45 format!("uniffi_{namespace}_fn_free_{object_name}")
46 }
47
48 /// FFI symbol name for the `init_callback` function for a callback interface
init_callback_vtable_fn_symbol_name( namespace: &str, callback_interface_name: &str, ) -> String49 pub fn init_callback_vtable_fn_symbol_name(
50 namespace: &str,
51 callback_interface_name: &str,
52 ) -> String {
53 let callback_interface_name = callback_interface_name.to_ascii_lowercase();
54 format!("uniffi_{namespace}_fn_init_callback_vtable_{callback_interface_name}")
55 }
56
57 /// FFI checksum symbol name for a top-level function
fn_checksum_symbol_name(namespace: &str, name: &str) -> String58 pub fn fn_checksum_symbol_name(namespace: &str, name: &str) -> String {
59 let name = name.to_ascii_lowercase();
60 format!("uniffi_{namespace}_checksum_func_{name}")
61 }
62
63 /// FFI checksum symbol name for an object constructor
constructor_checksum_symbol_name(namespace: &str, object_name: &str, name: &str) -> String64 pub fn constructor_checksum_symbol_name(namespace: &str, object_name: &str, name: &str) -> String {
65 let object_name = object_name.to_ascii_lowercase();
66 let name = name.to_ascii_lowercase();
67 format!("uniffi_{namespace}_checksum_constructor_{object_name}_{name}")
68 }
69
70 /// FFI checksum symbol name for an object method
method_checksum_symbol_name(namespace: &str, object_name: &str, name: &str) -> String71 pub fn method_checksum_symbol_name(namespace: &str, object_name: &str, name: &str) -> String {
72 let object_name = object_name.to_ascii_lowercase();
73 let name = name.to_ascii_lowercase();
74 format!("uniffi_{namespace}_checksum_method_{object_name}_{name}")
75 }
76