use crate::Result;
use crate::types::{AuthorizeBriefResponse, AuthorizeDetailedResponse, AuthorizeRequest};
use super::inner::{Client, CorrelationId};
pub struct Authorization<'a, Capability> {
client: &'a Client<Capability>,
request: &'a AuthorizeRequest,
correlation_id: Option<CorrelationId>,
}
impl<'a, Capability> Authorization<'a, Capability> {
pub(super) fn new(client: &'a Client<Capability>, request: &'a AuthorizeRequest) -> Self {
Self {
client,
request,
correlation_id: None,
}
}
pub fn correlation_id(mut self, id: impl Into<String>) -> Result<Self> {
self.correlation_id = Some(CorrelationId::parse(id.into())?);
Ok(self)
}
pub fn detailed(self) -> DetailedAuthorization<'a, Capability> {
DetailedAuthorization {
client: self.client,
request: self.request,
correlation_id: self.correlation_id,
}
}
pub async fn send(self) -> Result<AuthorizeBriefResponse> {
self.client
.send_authorization_brief(self.request, self.correlation_id.as_ref())
.await
}
}
pub struct DetailedAuthorization<'a, Capability> {
client: &'a Client<Capability>,
request: &'a AuthorizeRequest,
correlation_id: Option<CorrelationId>,
}
impl<Capability> DetailedAuthorization<'_, Capability> {
pub fn correlation_id(mut self, id: impl Into<String>) -> Result<Self> {
self.correlation_id = Some(CorrelationId::parse(id.into())?);
Ok(self)
}
pub async fn send(self) -> Result<AuthorizeDetailedResponse> {
self.client
.send_authorization_detailed(self.request, self.correlation_id.as_ref())
.await
}
}