如何解决`CasbinActor<CachedEnforcer>` 未实现特征 `Actor`
error[E0277]: the trait bound `casbinActor<CachedEnforcer>: Actor` is not satisfied
--> actix-middleware-example/src/api/user.rs:34:12
|
34 | actor: web::Data<Addr<casbinActor<CachedEnforcer>>>,| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `Actor` is not implemented for `casbinActor<CachedEnforcer>`
|
::: /home/samarpan/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-0.11.1/src/address/mod.rs:77:20
|
77 | pub struct Addr<A: Actor> {
| ----- required by this bound in `Addr`
error[E0277]: the trait bound `casbinActor<CachedEnforcer>: Actor` is not satisfied
--> actix-middleware-example/src/services/account_service.rs:24:12
|
24 | actor: web::Data<Addr<casbinActor<CachedEnforcer>>>,| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `Actor` is not implemented for `casbinActor<CachedEnforcer>`
|
::: /home/samarpan/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-0.11.1/src/address/mod.rs:77:20
|
77 | pub struct Addr<A: Actor> {
| ----- required by this bound in `Addr`
error: aborting due to 2 prevIoUs errors
For more information about this error,try `rustc --explain E0277`.
error: Could not compile `actix-middleware-example`
To learn more,run the command again with --verbose.
这是我运行 cargo build
时的错误。
为 casbinActor 实现了 Actor 特征。
pub struct casbinActor<T: IEnforcer + 'static> {
pub enforcer: Option<Arc<RwLock<T>>>,}
impl<T: IEnforcer + 'static> casbinActor<T> {
pub async fn new<M: TryIntoModel,A: TryIntoAdapter>(
m: M,a: A,) -> Result<Addr<casbinActor<T>>> {
let enforcer = T::new(m,a).await?;
Ok(Supervisor::start(|_| casbinActor {
enforcer: Some(Arc::new(RwLock::new(enforcer))),}))
}
pub fn set_enforcer(e: Arc<RwLock<T>>) -> Result<casbinActor<T>> {
Ok(casbinActor { enforcer: Some(e) })
}
pub fn get_enforcer(&mut self) -> Option<Arc<RwLock<T>>> {
self.enforcer.as_ref().map(|x| Arc::clone(x))
}
}
impl<T: IEnforcer + 'static> Actor for casbinActor<T> {
type Context = Context<Self>;
}
修复是什么?我认为问题可能是因为 casbinActor 在 Actor
为 T
时实现了一个特征 IEnforcer
。也许必须为 CachedEnforcer
做一些类似的事情,但我到底应该在哪里添加代码来解决这个问题?
这是回购 - https://github.com/casbin-rs/examples/tree/master/actix-middleware-example
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。