pub mod session;
pub mod token;
pub mod vm;
pub mod xo;
use std::sync::Arc;
use jsonrpsee_types::{traits::SubscriptionClient, DeserializeOwned, Subscription};
use jsonrpsee_ws_client::{WsClient, WsClientBuilder};
use crate::RpcError;
use self::{
session::SessionProcedures, token::TokenProcedures, vm::VmProcedures, xo::XoProcedures,
};
pub struct Client {
inner: Arc<WsClient>,
pub vm: VmProcedures,
pub xo: XoProcedures,
pub token: TokenProcedures,
pub session: SessionProcedures,
}
impl Client {
pub async fn connect(url: &str) -> Result<Self, RpcError> {
log::debug!("Connecting to: {}", url);
let inner = Arc::new(
WsClientBuilder::default()
.connection_timeout(std::time::Duration::from_secs(10))
.build(url)
.await?,
);
log::debug!("Connected");
Ok(Client {
inner: Arc::clone(&inner),
vm: VmProcedures {
inner: Arc::clone(&inner),
},
xo: XoProcedures {
inner: Arc::clone(&inner),
},
token: TokenProcedures {
inner: Arc::clone(&inner),
},
session: SessionProcedures {
inner: Arc::clone(&inner),
},
})
}
pub async fn subscribe_to_notification_all<T>(&self) -> Result<Subscription<T>, RpcError>
where
T: DeserializeOwned,
{
self.inner.subscribe_to_method::<T>("all").await
}
}