vyre_runtime/pipeline_cache/
remote.rs1use super::disk::read_verified_cache_blob;
5use super::fingerprint::PipelineFingerprint;
6use super::store::PipelineCacheStore;
7
8pub struct RemoteCache {
16 base_url: String,
17 agent: ureq::Agent,
18}
19
20impl RemoteCache {
21 #[must_use]
24 pub fn new(base_url: impl Into<String>) -> Self {
25 Self {
26 base_url: base_url.into(),
27 agent: ureq::Agent::new_with_defaults(),
28 }
29 }
30}
31
32impl PipelineCacheStore for RemoteCache {
33 fn get(&self, fp: &PipelineFingerprint) -> Option<Vec<u8>> {
34 let url = format!("{}/{}.bin", self.base_url.trim_end_matches('/'), fp.hex());
35 let mut resp = self.agent.get(&url).call().ok()?;
36 read_verified_cache_blob(resp.body_mut().as_reader())
37 }
38
39 fn put(&self, _fp: PipelineFingerprint, _artifact: Vec<u8>) {
40 }
42}
43
44#[cfg(test)]
45mod tests {
46 use super::RemoteCache;
47
48 #[test]
49 fn remote_cache_owns_reusable_http_agent() {
50 let cache = RemoteCache::new("https://cache.invalid/root/");
51
52 assert_eq!(cache.base_url, "https://cache.invalid/root/");
53 let _shared_agent = cache.agent.clone();
54 }
55}