有没有办法用#[derive(Message)]
和#[rtype(result = "...")]
编写此代码。
pub struct MyMsg<T> {
data: T
}
impl<T: 'static> Message for MyMsg<T> {
type Result = Result<MyMsg<T>, Error>;
}
我试过了,但编译器抱怨所需的生存期界限。
#[derive(Message)]
#[rtype(result = "Result<MyMsg<T>, Error>")]
pub struct MyMsg<T> {
pub data: T,
}
我假设您使用anyhow
,因为否则Result<..., Error>
就没有多大意义。(因为Error
是一种特征,而不是一种类型(
然后,我不理解你的问题,它只是起作用:
use actix_derive::Message;
use anyhow::Error;
#[derive(Message)]
#[rtype(result = "Result<MyMsg<T>, Error>")]
pub struct MyMsg<T: 'static> {
pub data: T,
}
如果你用cargo expand
扩展它,你可以看到你得到:
#![feature(prelude_import)]
#[prelude_import]
use std::prelude::rust_2021::*;
#[macro_use]
extern crate std;
use actix_derive::Message;
use anyhow::Error;
#[rtype(result = "Result<MyMsg<T>, Error>")]
pub struct MyMsg<T: 'static> {
pub data: T,
}
impl<T: 'static> ::actix::Message for MyMsg<T> {
type Result = Result<MyMsg<T>, Error>;
}