Создание библиотечного крейта

Последовательность шагов

  1. Создать проект
cargo new restaurant --lib
  1. Вставить код в файл src/lib.rs
#![allow(unused)]
fn main() {
mod front_of_house {
    mod hosting {
        fn add_to_waitlist() {}

        fn seat_at_table() {}
    }

    mod serving {
        fn take_order() {}

        fn serve_order() {}

        fn take_payment() {}
    }
}
}
  1. Дерево модулей

tree

  1. Пути к элементам модулей
    • абсолютный путь начинается с имени крейта
    • абсолютный путь из текущего крейта начинается с crate
    • относительный путь начинается с текущего модуля self и super или идентификатор
#![allow(unused)]
fn main() {
pub fn eat_at_restaurant() {
    // Absolute path
    crate::front_of_house::hosting::add_to_waitlist();

    // Relative path
    front_of_house::hosting::add_to_waitlist();
}
}

В Rust все элементы (функции, методы, структуры, перечисления, модули и константы) по умолчанию являются приватными для родительских модулей.

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

  1. Добавим ключевое слово pub для модуля и функции, чтобы предоставить публичный доступ

Ключевое слово super

можно построить относительные пути, которые начинаются в родительском модуле, используя ключевое слово super в начале пути.

Использование super позволяет нам сослаться на элемент, который находится в родительском модуле.

#![allow(unused)]
fn main() {
fn deliver_order() {}

mod back_of_house {
    fn fix_incorrect_order() {
        cook_order();
        super::deliver_order();
    }

    fn cook_order() {}
}
}