相关代码,部分已省略
- main.rs
#[derive(Clone)]
pub struct State {
db_pool: sqlx::PgPool,
}
let state = State{……} //省略连接池
let mut app = tide::with_state(state);
app.add_route(); // add_route为自己定义的方法
app.listen(config::api_address()).await?;
- route.rs
pub trait Route
{
fn add_route(&mut self) -> &mut Self;
}
impl<T> Route for tide::Server<T>
where
T: Clone + Send + Sync + 'static,
// impl Route for tide::Server<State> 换成此行,一切正常
{
fn add_route(&mut self) -> &mut Self {
use controller::*;
self.at("/auth").get(auth);
- auth.rs
pub async fn auth(req: tide::Request<State>) -> tide::Result
{
let db_pool = req.state().db_pool.clone();
......
}
- 报错
error[E0631]: type mismatch in function arguments
--> xxx/src/route.rs:17:30
|
17 | self.at("/auth").get(auth::auth);
| ^^^^^^^^^^ expected signature of `fn(tide::Request<T>) -> _`
|
::: http-api/src/controller/auth.rs:6:1
|
6 | pub async fn auth(req: tide::Request<State>) -> tide::Result
| ------------------------------------------------------------ found signature of `fn(tide::Request<State>) -> _`
|
= note: required because of the requirements on the impl of `Endpoint<T>` for `fn(tide::Request<State>) -> impl Future {controller::auth::auth}`
各位前辈,请问为啥route.rs里不用范型就能正常,使用范型后,明明这里的auth里的State满足T所需的Trait,但还是报错?
1
共 2 条评论, 1 页
评论区
写评论糊涂了,这个问题我居然看了一天,懵兮兮的。感谢前辈。
--
👇
dakai-chen: T最终会变成一个具体的类型,并且是由使用者指定。使用者指定的T类型不一定会是State类型。
T最终会变成一个具体的类型,并且是由使用者指定。使用者指定的T类型不一定会是State类型。