Rust 无法解决从板条箱根目录导入的问题,但模块存在可用的子模块



我正试图用activx和diesel创建一个基本的crud应用程序,但diesel出现了问题。这是项目的文件夹结构:

|─ migrations 
|─ src 
| ├─ users
| ├─mod.rs
| ├─models.rs
|─ main.rs
|─ schema.rs

其中schema.rs由diesel通过运行迁移命令创建和管理。

这些是文件及其内容:

mod.rs

pub mod models;
pub mod routes;
pub use models::*;*
pub use routes::;

models.rs

use diesel::{Insertable, Queryable};
use crate::schema::users;
#[derive(Queryable)]
pub struct User {
pub id: i64,
pub email: String,
pub password_hash: String,
pub confirmed: bool,
}
#[derive(Insertable)]
#[table_name = "users"]
pub struct NewUser {
pub email: String,
pub password_hash: String,
pub confirmed: bool,
}

main.rs

#![allow(unused)]
#[macro_use]
extern crate diesel;
mod users;
mod schema;
use diesel::pg::PgConnection;
use diesel::prelude::*;
use diesel::query_dsl::methods::FindDsl;
use dotenv::dotenv;
use std::env;
pub fn establish_connection() -> PgConnection {
dotenv().ok();
let database_url = env::var("DATABASE_URL").expect("DATABASE_URL must be set");
PgConnection::establish(&database_url).expect(&format!("Error connecting to {}", database_url))
}
fn main() -> std::io::Result<()> {
let connection = establish_connection();
use schema::users::dsl as users_dsl;
let results = users_dsl::users.filter(users_dsl::confirmed.eq_all(true)).limit(5).load::<users::models::User>(&connection).expect("Error loading users")  ;
for _user in results {
println!("user id {} with mail {}", _user.id, _user.email)
}
Ok(())
}

和schema.rs:

table! {
users (id) {
id -> Int8,
email -> Varchar,
password_hash -> Varchar,
confirmed -> Bool,
}
}

问题是当我试图将模式从crate根导入到user/models.rs-rustc说";未解析的导入CCD_ 1在机箱根"中找不到CCD_;但是rust分析器会提示该模块中存在的内容(例如dsl、表及其列(。

那么问题出在哪里呢?

刚刚发现我必须在一个名为lib.rs的文件中导入模式模块(如果不存在,请创建它(:

src/lib.rs

pub mod schema;
#[macro_use]
extern crate diesel;

因此它将可以通过访问

use crate::schema::*;

注意,lib.rs内部需要macro_use才能在schema.rs中使用table!宏而不会出现任何错误。

最新更新