use alloc::vec::Vec;
use core::time::Duration;
use liminal::protocol::WorkerRegistration;
use super::PushClient;
use crate::SdkError;
#[non_exhaustive]
pub struct PendingPushConnect<'address> {
address: &'address str,
setup_deadline: Duration,
auth_token: Vec<u8>,
registration: Option<WorkerRegistration>,
}
impl<'address> PendingPushConnect<'address> {
pub(super) const fn new(address: &'address str, setup_deadline: Duration) -> Self {
Self {
address,
setup_deadline,
auth_token: Vec::new(),
registration: None,
}
}
#[must_use]
pub fn with_auth_token(mut self, auth_token: &[u8]) -> Self {
self.auth_token = auth_token.to_vec();
self
}
#[must_use]
pub fn with_registration(mut self, registration: WorkerRegistration) -> Self {
self.registration = Some(registration);
self
}
pub fn connect(self) -> Result<PushClient, SdkError> {
let Self {
address,
setup_deadline,
auth_token,
registration,
} = self;
PushClient::connect_configured(address, &auth_token, registration, setup_deadline)
}
}