use std::fmt::Debug;
use crate::common::domain::Group;
use crate::common::domain::utils::new_type::new_type;
use crate::user::domain::EmailAddress;
pub trait Resource: Debug {
fn resource_type(&self) -> ResourceType;
}
pub trait ResourceInstance: Resource {
fn resource_identifier(&self) -> ResourceIdentifier;
fn groups(&self) -> Option<Vec<Group>>;
fn user_emails(&self) -> Option<Vec<EmailAddress>>;
}
new_type![
ResourceType(String)
];
new_type![
ResourceIdentifier(String)
];
#[cfg(any(test, feature = "mock"))]
pub mod mocked_resource {
use super::EmailAddress;
use super::Group;
use super::Resource;
use super::ResourceIdentifier;
use super::ResourceInstance;
use super::ResourceType;
#[derive(Debug, fake::Dummy)]
pub struct MockedResource {
pub resource_type: ResourceType,
pub resource_identifier: ResourceIdentifier,
pub groups: Option<Vec<Group>>,
pub user_emails: Option<Vec<EmailAddress>>,
}
impl Resource for MockedResource {
fn resource_type(&self) -> ResourceType {
self.resource_type.clone()
}
}
impl ResourceInstance for MockedResource {
fn resource_identifier(&self) -> ResourceIdentifier {
self.resource_identifier.clone()
}
fn groups(&self) -> Option<Vec<Group>> {
self.groups.clone()
}
fn user_emails(&self) -> Option<Vec<EmailAddress>> {
self.user_emails.clone()
}
}
}