#[cfg(feature = "blocking")]
pub mod sync_client {
use crate::config::CyclesConfig;
use crate::error::Error;
use crate::models::request::*;
use crate::models::response::*;
use crate::models::ReservationId;
use crate::response::ApiResponse;
pub struct BlockingCyclesClient {
inner: crate::CyclesClient,
rt: tokio::runtime::Runtime,
}
impl BlockingCyclesClient {
pub fn new(config: CyclesConfig) -> Result<Self, Error> {
let rt = tokio::runtime::Builder::new_current_thread()
.enable_all()
.build()
.map_err(|e| Error::Config(format!("failed to create tokio runtime: {e}")))?;
let inner = crate::CyclesClient::new(config);
Ok(Self { inner, rt })
}
pub fn config(&self) -> &CyclesConfig {
self.inner.config()
}
pub fn create_reservation(
&self,
req: &ReservationCreateRequest,
) -> Result<ReservationCreateResponse, Error> {
self.rt.block_on(self.inner.create_reservation(req))
}
pub fn create_reservation_with_metadata(
&self,
req: &ReservationCreateRequest,
) -> Result<ApiResponse<ReservationCreateResponse>, Error> {
self.rt
.block_on(self.inner.create_reservation_with_metadata(req))
}
pub fn commit_reservation(
&self,
id: &ReservationId,
req: &CommitRequest,
) -> Result<CommitResponse, Error> {
self.rt.block_on(self.inner.commit_reservation(id, req))
}
pub fn release_reservation(
&self,
id: &ReservationId,
req: &ReleaseRequest,
) -> Result<ReleaseResponse, Error> {
self.rt.block_on(self.inner.release_reservation(id, req))
}
pub fn extend_reservation(
&self,
id: &ReservationId,
req: &ExtendRequest,
) -> Result<ExtendResponse, Error> {
self.rt.block_on(self.inner.extend_reservation(id, req))
}
pub fn decide(&self, req: &DecisionRequest) -> Result<DecisionResponse, Error> {
self.rt.block_on(self.inner.decide(req))
}
pub fn create_event(&self, req: &EventCreateRequest) -> Result<EventCreateResponse, Error> {
self.rt.block_on(self.inner.create_event(req))
}
pub fn list_reservations(
&self,
params: &ListReservationsParams,
) -> Result<ReservationListResponse, Error> {
self.rt.block_on(self.inner.list_reservations(params))
}
pub fn get_reservation(&self, id: &ReservationId) -> Result<ReservationDetail, Error> {
self.rt.block_on(self.inner.get_reservation(id))
}
pub fn get_balances(&self, params: &BalanceParams) -> Result<BalanceResponse, Error> {
self.rt.block_on(self.inner.get_balances(params))
}
}
}