fluentci_common/
cache.rs

1use std::sync::{Arc, Mutex};
2
3use anyhow::Error;
4use fluentci_core::deps::{Graph, GraphCommand};
5use fluentci_ext::cache::Cache as CacheExt;
6use fluentci_types::cache::Cache;
7use uuid::Uuid;
8
9pub fn cache(graph: Arc<Mutex<Graph>>, key: &str) -> Result<Cache, Error> {
10    let mut graph = graph.lock().unwrap();
11    graph.reset();
12
13    let cache = graph
14        .volumes
15        .iter()
16        .find(|v| v.label == "cache" && v.key == key);
17
18    if let Some(cache) = cache {
19        return Ok(Cache {
20            id: cache.id.clone(),
21            key: cache.key.clone(),
22            path: "".into(),
23        });
24    }
25
26    let id = Uuid::new_v4().to_string();
27    graph.execute(GraphCommand::AddVertex(
28        id.clone(),
29        "cache".into(),
30        key.into(),
31        vec![],
32        Arc::new(Box::new(CacheExt::default())),
33    ))?;
34
35    graph.execute(GraphCommand::AddVolume(
36        id.clone(),
37        "cache".into(),
38        key.into(),
39    ))?;
40
41    let cache = Cache {
42        id,
43        key: key.into(),
44        path: "".into(),
45    };
46    Ok(cache)
47}