use crate::error::Result;
use nym_credential_storage::storage::Storage;
use nym_credential_utils::utils::issue_credential;
use nym_credentials_interface::TicketType;
use nym_network_defaults::NymNetworkDetails;
use nym_validator_client::{nyxd, DirectSigningHttpRpcNyxdClient};
use std::ops::Deref;
use zeroize::Zeroizing;
pub struct BandwidthAcquireClient<St: Storage + Clone> {
client: DirectSigningHttpRpcNyxdClient,
storage: St,
client_id: Zeroizing<Vec<u8>>,
ticketbook_type: TicketType,
}
impl<St> BandwidthAcquireClient<St>
where
St: Storage + Clone,
<St as Storage>::StorageError: Send + Sync + 'static,
{
#[allow(clippy::result_large_err)]
pub(crate) fn new(
network_details: NymNetworkDetails,
mnemonic: String,
storage: St,
client_id: Vec<u8>,
ticketbook_type: TicketType,
) -> Result<Self> {
let nyxd_url = network_details.endpoints[0].nyxd_url.as_str();
let config = nyxd::Config::try_from_nym_network_details(&network_details)?;
let client = DirectSigningHttpRpcNyxdClient::connect_with_mnemonic(
config,
nyxd_url,
mnemonic.parse()?,
)?;
Ok(Self {
client,
storage,
client_id: client_id.into(),
ticketbook_type,
})
}
pub async fn acquire(&self) -> Result<()> {
issue_credential(
&self.client,
&self.storage,
self.client_id.deref(),
self.ticketbook_type,
)
.await?;
Ok(())
}
}