Переместить дизельные методы в другие каталоги

Я следую руководству по примерам Diesel, и мой проект выглядит именно так. Я хочу изменить это так, чтобы вместо запуска cargo run --bin publish_post 1, ты используешь cargo run и представлены с циклом, предлагающим вам, какое действие вы хотите выполнить.

Я переместил все из bin/ и в controllers/ каталог. Я хочу сослаться на это в main.rs как use controllers::postтак что у меня есть доступ к post::delete(), так далее.

Как только я перенесу файлы из bin/, весь импорт ломается. Кроме того, я не могу сослаться на это из lib.rs,

Почему ни один из моих операций импорта не работает при перемещении файлов? Как я мог получить доступ к методам из этих файлов?

Я хочу такую ​​структуру:

├── controllers
│   └── posts.rs
├── lib.rs
├── main.rs
├── models.rs
├── schema.rs

А внутри main.rsЯ хочу иметь возможность сделать что-то вроде:

use controllers::posts;

pub fn main() {
    // pseudocode
    loop {
        println!("what action would you like to perform?");
        let ans = capture_input();

        if ans == "insert" {
            posts::insert();
        } else if ans == "delete" {
            posts::delete();
        }
    }
}

1 ответ

Решение

Создание папки не создает подмодуль Rust автоматически. Вам нужно сделать две вещи:

  1. Объявите модуль явно в корне ящика (lib.rs или же main.rs):

    mod controllers;
    
  2. Создайте controllers/mod.rs файл и объявить в нем подмодуль:

    mod posts;
    
Другие вопросы по тегам