use std::fmt::Debug;
use super::super::domain::action::Action;
use super::super::domain::error::AuthorizationEngineError;
use crate::authorization::domain::resource::Resource;
use crate::authorization::domain::resource::ResourceInstance;
use crate::user::domain::User;
#[cfg_attr(any(test, feature = "mock"), mockall::automock)]
pub trait AuthorizationEngine: Debug + Send + Sync + 'static {
fn can_on_type(
&self,
user: &Option<User>,
action: &Action,
resource: &dyn Resource,
) -> Result<(), AuthorizationEngineError>;
fn can_on_instance(
&self,
user: &Option<User>,
action: &Action,
resource: &dyn ResourceInstance,
) -> Result<(), AuthorizationEngineError>;
}