Использование свойств Rust в модуле, объявленном в корне библиотеки проекта - PullRequest
1 голос
/ 27 октября 2019

Я создаю инструмент в Rust, который способен генерировать фиктивные данные временных рядов для тестирования различных систем, которые у нас есть. Я пытаюсь реализовать черту под названием «Batch», которая объявлена ​​в моем lib.rs, который находится в корне проекта. Однако в моих модулях Rust жалуется, что эта черта не входит в сферу применения. Как я могу получить доступ к объявлениям в более высоком пространстве имен из моих модулей?

Вот так выглядит мой проект:

 - main.rs
 - lib.rs
 - factory
     - cassandra.rs
     - jboss.rs
     - mod.rs
 - drain
    - http.rs
    - cqlsh.rs
    - mod.rs

lib.rs содержит:

pub trait Batch<T> {
  fn create(&self) -> Option<T>
}

А внутри cassandra.rs и jboss.rs у меня есть структуры, для которых я пытаюсь реализовать Batch. В lib.rs я объявил оба модуля, используя:

pub mod drains;
pub mod factory;

Является ли это даже правильным подходом или я должен просто объединить cassandra.rs & jboss.rs в одном файле и объявить черту там?

1 Ответ

0 голосов
/ 28 октября 2019

Элементы из других модулей не видны по умолчанию, даже если этот другой модуль является родителем текущего. Вы должны явно use их.

Для таких случаев есть два способа сделать это удобно:

  • use crate::Batch, если вы хотите сохранить эту черту в корне;
  • use super::Batch, если вы хотите иметь возможность перемещать всю иерархию (с чертой и ее реализациями) куда-либо еще.
...