Skip to main content

brume_cli/
lib.rs

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}