decthings_api/client/rpc/image/
mod.rs

1mod request;
2mod response;
3
4use crate::client::StateModification;
5
6pub use request::*;
7pub use response::*;
8
9pub struct ImageRpc {
10    rpc: crate::client::DecthingsClientRpc,
11}
12
13impl ImageRpc {
14    pub(crate) fn new(rpc: crate::client::DecthingsClientRpc) -> Self {
15        Self { rpc }
16    }
17
18    pub async fn create_repository(
19        &self,
20        params: CreateRepositoryParams<'_>,
21    ) -> Result<CreateRepositoryResult, crate::client::DecthingsRpcError<CreateRepositoryError>>
22    {
23        let (tx, rx) = tokio::sync::oneshot::channel();
24        self.rpc
25            .raw_method_call::<_, _, &[u8]>(
26                "Image",
27                "createRepository",
28                params,
29                &[],
30                crate::client::RpcProtocol::Http,
31                |x| {
32                    tx.send(x).ok();
33                    StateModification::empty()
34                },
35            )
36            .await;
37        rx.await
38            .unwrap()
39            .map_err(crate::client::DecthingsRpcError::Request)
40            .and_then(|x| {
41                let res: super::Response<CreateRepositoryResult, CreateRepositoryError> =
42                    serde_json::from_slice(&x.0)?;
43                match res {
44                    super::Response::Result(val) => Ok(val),
45                    super::Response::Error(val) => Err(crate::client::DecthingsRpcError::Rpc(val)),
46                }
47            })
48    }
49
50    pub async fn update_repository(
51        &self,
52        params: UpdateRepositoryParams<'_>,
53    ) -> Result<UpdateRepositoryResult, crate::client::DecthingsRpcError<UpdateRepositoryError>>
54    {
55        let (tx, rx) = tokio::sync::oneshot::channel();
56        self.rpc
57            .raw_method_call::<_, _, &[u8]>(
58                "Image",
59                "updateRepository",
60                params,
61                &[],
62                crate::client::RpcProtocol::Http,
63                |x| {
64                    tx.send(x).ok();
65                    StateModification::empty()
66                },
67            )
68            .await;
69        rx.await
70            .unwrap()
71            .map_err(crate::client::DecthingsRpcError::Request)
72            .and_then(|x| {
73                let res: super::Response<UpdateRepositoryResult, UpdateRepositoryError> =
74                    serde_json::from_slice(&x.0)?;
75                match res {
76                    super::Response::Result(val) => Ok(val),
77                    super::Response::Error(val) => Err(crate::client::DecthingsRpcError::Rpc(val)),
78                }
79            })
80    }
81
82    pub async fn delete_repository(
83        &self,
84        params: DeleteRepositoryParams<'_>,
85    ) -> Result<DeleteRepositoryResult, crate::client::DecthingsRpcError<DeleteRepositoryError>>
86    {
87        let (tx, rx) = tokio::sync::oneshot::channel();
88        self.rpc
89            .raw_method_call::<_, _, &[u8]>(
90                "Image",
91                "deleteRepository",
92                params,
93                &[],
94                crate::client::RpcProtocol::Http,
95                |x| {
96                    tx.send(x).ok();
97                    StateModification::empty()
98                },
99            )
100            .await;
101        rx.await
102            .unwrap()
103            .map_err(crate::client::DecthingsRpcError::Request)
104            .and_then(|x| {
105                let res: super::Response<DeleteRepositoryResult, DeleteRepositoryError> =
106                    serde_json::from_slice(&x.0)?;
107                match res {
108                    super::Response::Result(val) => Ok(val),
109                    super::Response::Error(val) => Err(crate::client::DecthingsRpcError::Rpc(val)),
110                }
111            })
112    }
113
114    pub async fn get_repositories(
115        &self,
116        params: GetRepositoriesParams<'_, impl AsRef<str>>,
117    ) -> Result<GetRepositoriesResult, crate::client::DecthingsRpcError<GetRepositoriesError>> {
118        let (tx, rx) = tokio::sync::oneshot::channel();
119        self.rpc
120            .raw_method_call::<_, _, &[u8]>(
121                "Image",
122                "getRepositories",
123                params,
124                &[],
125                crate::client::RpcProtocol::Http,
126                |x| {
127                    tx.send(x).ok();
128                    StateModification::empty()
129                },
130            )
131            .await;
132        rx.await
133            .unwrap()
134            .map_err(crate::client::DecthingsRpcError::Request)
135            .and_then(|x| {
136                let res: super::Response<GetRepositoriesResult, GetRepositoriesError> =
137                    serde_json::from_slice(&x.0)?;
138                match res {
139                    super::Response::Result(val) => Ok(val),
140                    super::Response::Error(val) => Err(crate::client::DecthingsRpcError::Rpc(val)),
141                }
142            })
143    }
144}