mod request;
mod response;
use crate::client::StateModification;
pub use request::*;
pub use response::*;
pub struct ImageRpc {
rpc: crate::client::DecthingsClientRpc,
}
impl ImageRpc {
pub(crate) fn new(rpc: crate::client::DecthingsClientRpc) -> Self {
Self { rpc }
}
pub async fn create_repository(
&self,
params: CreateRepositoryParams<'_>,
) -> Result<CreateRepositoryResult, crate::client::DecthingsRpcError<CreateRepositoryError>>
{
let (tx, rx) = tokio::sync::oneshot::channel();
self.rpc
.raw_method_call::<_, _, &[u8]>(
"Image",
"createRepository",
params,
&[],
crate::client::RpcProtocol::Http,
|x| {
tx.send(x).ok();
StateModification::empty()
},
)
.await;
rx.await
.unwrap()
.map_err(crate::client::DecthingsRpcError::Request)
.and_then(|x| {
let res: super::Response<CreateRepositoryResult, CreateRepositoryError> =
serde_json::from_slice(&x.0)?;
match res {
super::Response::Result(val) => Ok(val),
super::Response::Error(val) => Err(crate::client::DecthingsRpcError::Rpc(val)),
}
})
}
pub async fn update_repository(
&self,
params: UpdateRepositoryParams<'_>,
) -> Result<UpdateRepositoryResult, crate::client::DecthingsRpcError<UpdateRepositoryError>>
{
let (tx, rx) = tokio::sync::oneshot::channel();
self.rpc
.raw_method_call::<_, _, &[u8]>(
"Image",
"updateRepository",
params,
&[],
crate::client::RpcProtocol::Http,
|x| {
tx.send(x).ok();
StateModification::empty()
},
)
.await;
rx.await
.unwrap()
.map_err(crate::client::DecthingsRpcError::Request)
.and_then(|x| {
let res: super::Response<UpdateRepositoryResult, UpdateRepositoryError> =
serde_json::from_slice(&x.0)?;
match res {
super::Response::Result(val) => Ok(val),
super::Response::Error(val) => Err(crate::client::DecthingsRpcError::Rpc(val)),
}
})
}
pub async fn delete_repository(
&self,
params: DeleteRepositoryParams<'_>,
) -> Result<DeleteRepositoryResult, crate::client::DecthingsRpcError<DeleteRepositoryError>>
{
let (tx, rx) = tokio::sync::oneshot::channel();
self.rpc
.raw_method_call::<_, _, &[u8]>(
"Image",
"deleteRepository",
params,
&[],
crate::client::RpcProtocol::Http,
|x| {
tx.send(x).ok();
StateModification::empty()
},
)
.await;
rx.await
.unwrap()
.map_err(crate::client::DecthingsRpcError::Request)
.and_then(|x| {
let res: super::Response<DeleteRepositoryResult, DeleteRepositoryError> =
serde_json::from_slice(&x.0)?;
match res {
super::Response::Result(val) => Ok(val),
super::Response::Error(val) => Err(crate::client::DecthingsRpcError::Rpc(val)),
}
})
}
pub async fn get_repositories(
&self,
params: GetRepositoriesParams<'_, impl AsRef<str>>,
) -> Result<GetRepositoriesResult, crate::client::DecthingsRpcError<GetRepositoriesError>> {
let (tx, rx) = tokio::sync::oneshot::channel();
self.rpc
.raw_method_call::<_, _, &[u8]>(
"Image",
"getRepositories",
params,
&[],
crate::client::RpcProtocol::Http,
|x| {
tx.send(x).ok();
StateModification::empty()
},
)
.await;
rx.await
.unwrap()
.map_err(crate::client::DecthingsRpcError::Request)
.and_then(|x| {
let res: super::Response<GetRepositoriesResult, GetRepositoriesError> =
serde_json::from_slice(&x.0)?;
match res {
super::Response::Result(val) => Ok(val),
super::Response::Error(val) => Err(crate::client::DecthingsRpcError::Rpc(val)),
}
})
}
}