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}