blob: 83cfe35c2889f09079324f1bd03dd210244a237c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
use anyhow::Result;
use anyhow::Error;
use crate::model::backend::messages::BackendRequest;
use crate::model::backend::messages::BackendResponse;
use crate::model::backend::channels::BackendRequestSender;
use crate::model::backend::channels::BackendResponseReceiver;
pub struct BackendFassade {
inner: BackendRequestSender,
}
impl BackendFassade {
pub fn new(inner: BackendRequestSender) -> Self {
BackendFassade { inner }
}
async fn send_request(&self, req: BackendRequest) -> Result<BackendResponseReceiver> {
let (sender, receiver) = crossbeam::channel::bounded(1);
self.inner
.send(req.with_sender(sender))
.map_err(Error::from)
.map(|_| receiver)
}
pub async fn get_branch_list(&self) -> Result<Vec<String>> {
match self.send_request(BackendRequest::BranchList).await?.recv()? {
BackendResponse::BranchList(list) => Ok(list),
_ => todo!()
}
}
pub async fn get_tag_list(&self) -> Result<Vec<String>> {
match self.send_request(BackendRequest::TagList).await?.recv()? {
BackendResponse::TagList(list) => Ok(list),
_ => todo!()
}
}
}
|