Rust unresolved import `crate::xxx` 报错解决
问题阐述
该问题出现在我使用actix编写的crud后端api中,我的后端结构如下:
D:.
| handle_err.rs
| lib.rs
| main.rs
|
+---application
| mod.rs
| user_service.rs
|
+---domain
| dto.rs
| mod.rs
| user.rs
|
+---infrastructure
| mod.rs
| repository.rs
|
\---interface
mod.rs
user_controller.rs
我希望在 `user_service.rs` 和 `repository.rs` 中使用我的自定义error结构体对象,我在 `application`目录下和 `infrastructure` 目录下的 mod.rs 中都已经导出了对应 .rs 文件:
pub mod repository;
pub mod user_service;
并且在lib.rs目录下也已经导出了对应包:
pub mod infrastructure;
pub mod domain;
pub mod application;
pub mod handle_err;
但是在 `repository.rs` 文件中的引入
use crate::handle_err::ServiceError;
却报错:
unresolved import `crate::handle_err`
unresolved importrustcClick for full compiler diagnostic
解决方案
在 main.rs 中 mod base即可,即在man.rs 中添加 mod handle_err;
use actix_web::{web, App, HttpServer};
use dotenv::dotenv;
use mysql::Pool;
use std::env;
use std::sync::Arc;
mod domain;
mod application;
mod infrastructure;
mod interface;
mod handle_err;
use application::user_service::UserService;
use infrastructure::repository::UserRepository;
use interface::user_controller::configuration;
#[actix_web::main]
async fn main() -> std::io::Result<()> {
dotenv().ok();
let database_url = env::var("DATABASE_URL").expect("DATABASE_URL must be set");
let pool = Pool::new(database_url).expect("Failed to create database pool");
let user_repository = UserRepository::new(pool);
let user_service = Arc::new(UserService::new(user_repository));
HttpServer::new(move || {
App::new()
.app_data(web::Data::from(user_service.clone()))
.configure(configuration) // 调用配置函数注册路由
})
.bind(("127.0.0.1", 8081))?
.run()
.await
}
参考资料
Rust 使用 use::create:: 不能引用顶级目录的模块?? - Rust语言中文社区