summaryrefslogtreecommitdiffstats
path: root/toolkit/library/rust/shared/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/library/rust/shared/lib.rs')
-rw-r--r--toolkit/library/rust/shared/lib.rs191
1 files changed, 191 insertions, 0 deletions
diff --git a/toolkit/library/rust/shared/lib.rs b/toolkit/library/rust/shared/lib.rs
new file mode 100644
index 0000000000..0179c27a05
--- /dev/null
+++ b/toolkit/library/rust/shared/lib.rs
@@ -0,0 +1,191 @@
+// This Source Code Form is subject to the terms of the Mozilla Public
+// License, v. 2.0. If a copy of the MPL was not distributed with this
+// file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+extern crate geckoservo;
+
+extern crate app_services_logger;
+#[cfg(feature = "cubeb-remoting")]
+extern crate audioipc2_client;
+#[cfg(feature = "cubeb-remoting")]
+extern crate audioipc2_server;
+extern crate authrs_bridge;
+#[cfg(feature = "bitsdownload")]
+extern crate bitsdownload;
+#[cfg(feature = "moz_places")]
+extern crate bookmark_sync;
+extern crate cascade_bloom_filter;
+extern crate cert_storage;
+extern crate chardetng_c;
+extern crate cosec;
+extern crate crypto_hash;
+#[cfg(feature = "cubeb_coreaudio_rust")]
+extern crate cubeb_coreaudio;
+#[cfg(feature = "cubeb_pulse_rust")]
+extern crate cubeb_pulse;
+extern crate data_storage;
+extern crate encoding_glue;
+extern crate fog_control;
+extern crate gecko_profiler;
+extern crate gkrust_utils;
+extern crate http_sfv;
+extern crate jog;
+extern crate jsrust_shared;
+extern crate kvstore;
+extern crate mapped_hyph;
+extern crate mozurl;
+extern crate mp4parse_capi;
+extern crate netwerk_helper;
+extern crate nserror;
+extern crate nsstring;
+extern crate prefs_parser;
+extern crate processtools;
+#[cfg(feature = "gecko_profiler")]
+extern crate profiler_helper;
+extern crate rsdparsa_capi;
+extern crate static_prefs;
+extern crate storage;
+extern crate webrender_bindings;
+extern crate xpcom;
+
+extern crate audio_thread_priority;
+
+#[cfg(not(target_os = "android"))]
+extern crate webext_storage_bridge;
+
+#[cfg(not(target_os = "android"))]
+extern crate tabs;
+
+#[cfg(not(target_os = "android"))]
+mod reexport_tabs {
+ tabs::uniffi_reexport_scaffolding!();
+}
+
+#[cfg(not(target_os = "android"))]
+extern crate suggest;
+
+#[cfg(not(target_os = "android"))]
+mod reexport_suggest {
+ suggest::uniffi_reexport_scaffolding!();
+}
+
+#[cfg(feature = "webrtc")]
+extern crate mdns_service;
+extern crate neqo_glue;
+extern crate wgpu_bindings;
+
+extern crate aa_stroke;
+extern crate qcms;
+extern crate wpf_gpu_raster;
+
+extern crate unic_langid;
+extern crate unic_langid_ffi;
+
+extern crate fluent_langneg;
+extern crate fluent_langneg_ffi;
+
+extern crate fluent;
+extern crate fluent_ffi;
+
+extern crate oxilangtag_ffi;
+extern crate unicode_bidi_ffi;
+
+extern crate rure;
+
+extern crate fluent_fallback;
+extern crate l10nregistry_ffi;
+extern crate localization_ffi;
+
+#[cfg(not(target_os = "android"))]
+extern crate viaduct;
+
+extern crate gecko_logger;
+
+#[cfg(feature = "oxidized_breakpad")]
+extern crate rust_minidump_writer_linux;
+
+#[cfg(feature = "crashreporter")]
+extern crate mozannotation_client;
+#[cfg(feature = "crashreporter")]
+extern crate mozannotation_server;
+
+#[cfg(feature = "webmidi_midir_impl")]
+extern crate midir_impl;
+
+#[cfg(target_os = "windows")]
+extern crate detect_win32k_conflicts;
+
+extern crate origin_trials_ffi;
+
+extern crate dap_ffi;
+
+extern crate data_encoding_ffi;
+
+extern crate binary_http;
+extern crate oblivious_http;
+
+extern crate mime_guess_ffi;
+
+#[cfg(feature = "uniffi_fixtures")]
+mod uniffi_fixtures {
+ extern crate arithmetical;
+ extern crate uniffi_geometry;
+ extern crate uniffi_rondpoint;
+ extern crate uniffi_sprites;
+ extern crate uniffi_todolist;
+
+ arithmetical::uniffi_reexport_scaffolding!();
+ uniffi_fixture_callbacks::uniffi_reexport_scaffolding!();
+ uniffi_custom_types::uniffi_reexport_scaffolding!();
+ uniffi_fixture_external_types::uniffi_reexport_scaffolding!();
+ uniffi_geometry::uniffi_reexport_scaffolding!();
+ uniffi_rondpoint::uniffi_reexport_scaffolding!();
+ uniffi_sprites::uniffi_reexport_scaffolding!();
+ uniffi_todolist::uniffi_reexport_scaffolding!();
+}
+
+extern crate log;
+use log::info;
+
+use std::{ffi::CStr, os::raw::c_char};
+
+use gecko_logger::GeckoLogger;
+
+#[no_mangle]
+pub extern "C" fn GkRust_Init() {
+ // Initialize logging.
+ let _ = GeckoLogger::init();
+}
+
+#[no_mangle]
+pub extern "C" fn GkRust_Shutdown() {}
+
+/// Used to implement `nsIDebug2::RustPanic` for testing purposes.
+#[no_mangle]
+pub unsafe extern "C" fn intentional_panic(message: *const c_char) {
+ panic!("{}", CStr::from_ptr(message).to_string_lossy());
+}
+
+/// Used to implement `nsIDebug2::rustLog` for testing purposes.
+#[no_mangle]
+pub unsafe extern "C" fn debug_log(target: *const c_char, message: *const c_char) {
+ // NOTE: The `info!` log macro is used here because we have the `release_max_level_info` feature set.
+ info!(target: CStr::from_ptr(target).to_str().unwrap(), "{}", CStr::from_ptr(message).to_str().unwrap());
+}
+
+// Define extern "C" versions of these UniFFI functions, so that they can be called from C++
+#[no_mangle]
+pub extern "C" fn uniffi_rustbuffer_alloc(
+ size: i32,
+ call_status: &mut uniffi::RustCallStatus,
+) -> uniffi::RustBuffer {
+ uniffi::uniffi_rustbuffer_alloc(size, call_status)
+}
+
+#[no_mangle]
+pub extern "C" fn uniffi_rustbuffer_free(
+ buf: uniffi::RustBuffer,
+ call_status: &mut uniffi::RustCallStatus,
+) {
+ uniffi::uniffi_rustbuffer_free(buf, call_status)
+}