使用未声明的板条箱或模块,“use crate_name::schema::posts”并不总是有效

use*_*867 11 rust actix-web

actix-web我正在尝试通过将 Rust 与和 一起使用来学习 Rust diesel

当我尝试使用板条箱名称导入/使用架构时,它仅在文件中有效example.rs,但在post.rs文件中无效。这两个文件都嵌套在它们自己的文件夹中,我使用的命令如下:

use web_project_core::schema::posts;

当我使用另一个命令时,它可以在以下命令中工作,post.rs但不能在以下命令中工作example.rs

use super::super::schema::posts;

我缺少什么?

// Cargo.toml
[lib]
name = "web_project_core"
path = "src/lib.rs"

[[bin]]
name = "main"
path = "src/main.rs"
Run Code Online (Sandbox Code Playgroud)
// main.rs

use actix_web::{App, HttpServer};

mod handlers;
Run Code Online (Sandbox Code Playgroud)
// lib.rs
#[macro_use]
extern crate diesel;
extern crate dotenv;

use diesel::prelude::*;
use diesel::pg::PgConnection;
use dotenv::dotenv;
use std::env;

pub mod schema;
pub mod modelz;
Run Code Online (Sandbox Code Playgroud)
// post.rs

use serde::{Serialize, Deserialize};
use nanoid::generate;

use super::super::schema::posts;        // <-- it works
// use web_project_core::schema::posts; // <-- it doesn't work
Run Code Online (Sandbox Code Playgroud)
// example.rs

use actix_web::{get, web, post, HttpResponse, Responder};
use diesel::prelude::*;

use web_project_core::establish_connection;
use web_project_core::schema::posts;            // <-- it works
// use super::super::schema::posts;             // <-- it doesn't work
use web_project_core::modelz::post::*;
Run Code Online (Sandbox Code Playgroud)

项目结构:

项目结构

谢谢

Skg*_*and 9

example.rs和之间的区别post.rs在于post.rs是在库 crate 中web_project_core,而example.rs是在二进制 crate 中main。该路径在当前包中web_project_core::schema::posts不可用,而不是依赖项。当引用当前的箱子时,您可以使用,来代替。二进制文件隐式依赖于库,因为它们位于同一包中,从而使路径可用post.rsweb_project_coreweb_project_core::schema::postscrate::schema::postsweb_project_core::schema::postsexample.rs