Rust模块可见性与Queryable宏编译错误求助
解决Rust Diesel Queryable宏找不到的编译错误
问题原因
子模块(test.rs、schema.rs)未在自身作用域内导入Diesel的宏或prelude,导致编译时无法识别Queryable和table!这类Diesel提供的宏。Rust的模块作用域是独立的,根模块导入的依赖不会自动传递给子模块。
解决方案
1. 为test.rs添加Diesel导入
在test.rs顶部添加Diesel prelude的导入,确保Queryable宏和NaiveDateTime可用:
use diesel::prelude::*; use chrono::NaiveDateTime; #[derive(Queryable)] pub struct User { pub id: i32, pub publickey: String, pub createdat: NaiveDateTime, }
如果不需要全部prelude,也可以单独导入Queryable宏:
use diesel::Queryable; use chrono::NaiveDateTime;
2. 为schema.rs添加Diesel导入
在schema.rs顶部导入Diesel的prelude(确保diesel crate在作用域内):
use diesel::prelude::*; diesel::table! { login_action (id) { id -> Int4, publickey -> Varchar, actiondata -> Timestamp, } }
3. 检查Cargo.toml依赖配置
确保Diesel依赖启用了对应数据库和chrono特性(如果用到NaiveDateTime):
[dependencies] diesel = { version = "2.0", features = ["postgres", "chrono"] } # 替换为你的数据库类型(mysql/sqlite) chrono = "0.4"
4. 正确的模块引用方式
在main.rs中通过pub mod test导出模块后,其他模块可以通过以下方式引用User结构体:
use crate::test::User;
内容的提问来源于stack exchange,提问作者xy01
相关产品推荐
相关产品推荐

