Макрос chromium::import!
После добавления :my_rust_lib в deps GN нам всё ещё нужно научиться импортировать и использовать my_rust_lib из my_rust_lib_unittest.rs. Мы не задали явный crate_name для my_rust_lib, поэтому его имя крейта вычисляется на основе полного пути и имени цели. К счастью, можно не работать с таким громоздким именем, используя макрос chromium::import! из автоматически импортируемого крейта chromium:
// Copyright 2023 Google LLC
// SPDX-License-Identifier: Apache-2.0
chromium::import! {
"//ui/base:my_rust_lib";
}
use my_rust_lib::my_function_under_test;
Под капотом макрос раскрывается примерно так:
// Copyright 2023 Google LLC
// SPDX-License-Identifier: Apache-2.0
extern crate ui_sbase_cmy_urust_ulib as my_rust_lib;
use my_rust_lib::my_function_under_test;
Подробнее см. в комментарии к документации макроса chromium::import.
rust_static_library поддерживает явное задание имени через свойство crate_name, но делать так не рекомендуется. Не рекомендуется потому, что имя крейта должно быть глобально уникальным. crates.io гарантирует уникальность имён своих крейтов, поэтому цели GN cargo_crate (генерируемые инструментом gnrt, о котором речь пойдёт в следующем разделе) используют короткие имена крейтов.