/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* 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/. */

#include "mozilla/Types.h"

// This seems sad?
// If we could get a stub .rs we could use `tabs::uniffi_reexport_scaffolding!();` etc,
// but here we are.
// To get the symbols from our static lib we need to refer to a symbol from each crate within it.
// This is an arbitrary choice - any symbol will do, but we chose these because every uniffi crate has it.
extern int MOZ_EXPORT ffi_ads_client_uniffi_contract_version();
extern int MOZ_EXPORT ffi_autofill_uniffi_contract_version();
extern int MOZ_EXPORT ffi_crashtest_uniffi_contract_version();
extern int MOZ_EXPORT ffi_fxa_client_uniffi_contract_version();
extern int MOZ_EXPORT ffi_init_rust_components_uniffi_contract_version();
extern int MOZ_EXPORT ffi_logins_uniffi_contract_version();
extern int MOZ_EXPORT ffi_merino_uniffi_contract_version();
extern int MOZ_EXPORT ffi_nimbus_uniffi_contract_version();
extern int MOZ_EXPORT ffi_places_uniffi_contract_version();
extern int MOZ_EXPORT ffi_push_uniffi_contract_version();
extern int MOZ_EXPORT ffi_relay_uniffi_contract_version();
extern int MOZ_EXPORT ffi_remote_settings_uniffi_contract_version();
extern int MOZ_EXPORT ffi_rust_log_forwarder_uniffi_contract_version();
extern int MOZ_EXPORT ffi_search_uniffi_contract_version();
extern int MOZ_EXPORT ffi_suggest_uniffi_contract_version();
extern int MOZ_EXPORT ffi_sync15_uniffi_contract_version();
extern int MOZ_EXPORT ffi_sync_manager_uniffi_contract_version();
extern int MOZ_EXPORT ffi_tabs_uniffi_contract_version();

// far out, this is crazy - without this, only the search _NAMESPACE meta comes in,
// meaning uniffi ends up generating a completely empty kotlin module for search.
// Looking at `nm obj-dir/.../libsearch-*.rlib` you can see many symbols
// are in a different .o - this symbol is one taken randomly from the .o with
// the missing symbols, and they all happily come in.
// W T A F.
extern int MOZ_EXPORT uniffi_search_checksum_constructor_searchengineselector_new();

void _local_megazord_dummy_symbol() {
    ffi_ads_client_uniffi_contract_version();
    ffi_autofill_uniffi_contract_version();
    ffi_crashtest_uniffi_contract_version();
    ffi_fxa_client_uniffi_contract_version();
    ffi_init_rust_components_uniffi_contract_version();
    ffi_logins_uniffi_contract_version();
    ffi_merino_uniffi_contract_version();
    ffi_nimbus_uniffi_contract_version();
    ffi_places_uniffi_contract_version();
    ffi_push_uniffi_contract_version();
    ffi_relay_uniffi_contract_version();
    ffi_remote_settings_uniffi_contract_version();
    ffi_rust_log_forwarder_uniffi_contract_version();
    ffi_search_uniffi_contract_version();
    ffi_suggest_uniffi_contract_version();
    ffi_sync15_uniffi_contract_version();
    ffi_sync_manager_uniffi_contract_version();
    ffi_tabs_uniffi_contract_version();
    uniffi_search_checksum_constructor_searchengineselector_new();
}
