1use std::collections::HashMap;
2
3use interprocess::local_socket::{
4 GenericNamespaced,
5 tokio::{Stream, prelude::*},
6};
7use tarpc::{
8 serde_transport, tokio_serde::formats::Bincode, tokio_util::codec::LengthDelimitedCodec,
9};
10
11use brume_daemon_proto::{AnySynchroRef, BRUME_SOCK_NAME, BrumeServiceClient, SynchroId};
12
13pub async fn connect_to_daemon() -> Result<BrumeServiceClient, std::io::Error> {
14 let name = BRUME_SOCK_NAME.to_ns_name::<GenericNamespaced>()?;
15
16 let conn = Stream::connect(name).await?;
17
18 let codec_builder = LengthDelimitedCodec::builder();
19
20 let transport = serde_transport::new(codec_builder.new_framed(conn), Bincode::default());
21
22 Ok(BrumeServiceClient::new(Default::default(), transport).spawn())
23}
24
25pub async fn get_synchro_id(
26 synchro_list: &HashMap<SynchroId, AnySynchroRef>,
27 synchro_descriptor: &str,
28) -> Option<SynchroId> {
29 for (id, sync) in synchro_list {
30 if (synchro_descriptor.len() > 3 && id.id().to_string().starts_with(synchro_descriptor))
31 || sync.name() == synchro_descriptor
32 {
33 return Some(*id);
34 }
35 }
36 None
37}
38
39pub async fn get_synchro(
40 synchro_list: &HashMap<SynchroId, AnySynchroRef>,
41 synchro_descriptor: &str,
42) -> Option<(SynchroId, AnySynchroRef)> {
43 for (id, sync) in synchro_list {
44 if (synchro_descriptor.len() > 3 && id.id().to_string().starts_with(synchro_descriptor))
45 || sync.name() == synchro_descriptor
46 {
47 return Some((*id, sync.clone()));
48 }
49 }
50 None
51}