Система модулей в Rust строится вокруг ключевого слова mod. Модули позволяют логически разбивать код по файлам и пространствам имён. Ключевые моменты:
pub делает элемент публичным для всего дерева модулей.pub(crate) — доступен во всём crate (т.е. библиотеке/projekt’е).use mod_name::item) и alias’ами.Для крупных проектов рекомендуют использовать дерево модулей с описанием публичных интерфейсов только через lib.rs или main.rs, остальное приватно:
mod network; mod storage; pub use network::api;
Если структура объявлена как pub, станет ли она доступной для других crate?
Ответ: Нет, недостаточно просто пометить struct как pub. Необходимо также, чтобы она была объявлена в модуле, открытом внешним crate (pub mod), а поля структуры должны быть public, чтобы к ним был прямой доступ.
Пример:
mod foo { pub struct Bar; } // Bar не виден вне crate, так как foo — private
История
История
История
Многие новички создают структуру pub, но оставляют поля private, что делает невозможным их инициализацию вне модуля. В результате функция из другого модуля не могла создать структуру напрямую, что вызывало ошибки, пока не сделали поля или конструкторы публичными.