gpt4 book ai didi

rust - 为什么在多个文件中使用结构时会出现 "expected struct file1::A found struct file2::A"错误?

转载 作者:行者123 更新时间:2023-12-04 15:56:43 26 4
gpt4 key购买 nike

我试图在两个文件之间共享一个结构,但出现错误。

我有以下文件夹结构:

src/
Models/
Login.rs
Routes/
LoginRoute.rs
Services/
LoginService.rs
main.rs

Login.rs 我有:

#[derive(Serialize, Deserialize, Debug)]
pub struct UserLoginResponse {
id: i32,
username: String,
token: String
}

LoginRoute.rs 我有:

#[path = "../Models/Login.rs"]
pub mod Login;

#[path = "../Services/LoginService.rs"]
pub mod LoginService;

#[post("/login", format = "application/json", data = "<user>")]
pub async fn login(user: String) -> Json<Login::UserLoginResponse> {

if let Ok(sk) = LoginService::callAuthenticate(user).await {
return sk
......

LoginService.rs 我有:

#[path = "../Models/Login.rs"]
pub mod Login;

pub async fn callAuthenticate(user: String)-> Result<Json<Login::UserLoginResponse>, Error> {
...
let userLoginResponse :Login::UserLoginResponse = Login::UserLoginResponse::new(1, "admin".to_string(), api_reponse.return_result);
Ok(Json(userLoginResponse))
}

我在 loginRoute.rsreturn sk 行遇到错误:

expected struct 'LoginRoute::Login::UserLoginResponse', found struct 'LoginService::Login:UserLoginResponse'

最佳答案

请不要为您的典型组织使用 #[path = ...] 属性;它应该只在模糊的情况下使用。每次你做 mod something 时,你都在声明一个新模块。即使两个模块由于 #[path = ...] 而指向同一个文件,它们也是不同的。

因此您声明了多个 UserLoginResponse 结构:

  • 一个在crate::LoginRoute::Login::UserLoginResponse
  • 一个在crate::LoginService::Login:UserLoginResponse
  • 如果您还在 main.rs 中声明了 Login,也许还有另一个。

由于它们位于不同的模块中,Rust 编译器将它们视为不同的类型,这不是您想要的。

只需使用惯用的方式声明模块。如果你想保留现有的文件夹结构而没有中间 mod.rs 文件,你可以在 main.rs 中声明它们,如下所示:

mod Models {
pub mod Login;
}
mod Routes {
pub mod LoginRoute;
}
mod Services {
pub mod LoginService;
}

然后通过 crate::Models::Login 和诸如此类的东西在别处访问它们。

参见:


您可能已经遇到过来自编译器的警告,试图鼓励一种特定的风格:“模块 [...] 应该有一个蛇形名称”。惯用的文件结构通常如下所示:

src/
models/
login.rs
mod.rs
routes/
login_route.rs
mod.rs
services/
login_service.rs
mod.rs
main.rs

main.rs 的位置:

mod models;
mod routes;
mod services;

src/models/mod.rs(例如)将有:

pub mod login;

关于rust - 为什么在多个文件中使用结构时会出现 "expected struct file1::A found struct file2::A"错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68928911/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com