use super::{Error, ErrorKind};
use crate::Client;
pub use crate::{object, Capability, Credentials, Domain};
#[derive(Clone, Debug)]
pub struct Role {
pub(super) authentication_key_label: object::Label,
pub(super) credentials: Credentials,
pub(super) capabilities: Capability,
pub(super) delegated_capabilities: Capability,
pub(super) domains: Domain,
}
impl Role {
pub fn new(credentials: Credentials) -> Self {
Self {
authentication_key_label: Default::default(),
credentials,
capabilities: Capability::empty(),
delegated_capabilities: Capability::empty(),
domains: Domain::empty(),
}
}
pub fn authentication_key_label<L>(mut self, label: L) -> Self
where
L: Into<object::Label>,
{
self.authentication_key_label = label.into();
self
}
pub fn capabilities(mut self, capabilities: Capability) -> Self {
self.capabilities = capabilities;
self
}
pub fn delegated_capabilities(mut self, capabilities: Capability) -> Self {
self.delegated_capabilities = capabilities;
self
}
pub fn domains(mut self, domains: Domain) -> Self {
self.domains = domains;
self
}
pub fn create(&self, client: &Client) -> Result<(), Error> {
client
.put_authentication_key(
self.credentials.authentication_key_id,
self.authentication_key_label.clone(),
self.domains,
self.capabilities,
self.delegated_capabilities,
Default::default(),
self.credentials.authentication_key.clone(),
)
.map_err(|e| format_err!(ErrorKind::SetupFailed, "error creating role: {}", e))?;
Ok(())
}
}