1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
use std::path::PathBuf;
use core::LalResult;
use super::ArtifactoryConfig;
#[derive(Serialize, Deserialize, Clone)]
pub enum BackendConfiguration {
#[serde(rename = "artifactory")]
Artifactory(ArtifactoryConfig),
}
impl Default for BackendConfiguration {
fn default() -> Self { BackendConfiguration::Artifactory(ArtifactoryConfig::default()) }
}
pub struct Component {
pub name: String,
pub version: u32,
pub tarball: String,
}
pub trait Backend {
fn get_versions(&self, name: &str, loc: Option<&str>) -> LalResult<Vec<u32>>;
fn get_latest_version(&self, name: &str, loc: Option<&str>) -> LalResult<u32>;
fn get_tarball_url(
&self,
name: &str,
version: Option<u32>,
loc: Option<&str>,
) -> LalResult<Component>;
fn upload_artifact_dir(&self, name: &str, version: u32, env: Option<&str>) -> LalResult<()>;
fn raw_download(&self, url: &str, dest: &PathBuf) -> LalResult<()>;
fn get_cache_dir(&self) -> String;
}
pub trait CachedBackend {
fn retrieve_published_component(
&self,
name: &str,
version: Option<u32>,
env: Option<&str>,
) -> LalResult<(PathBuf, Component)>;
fn retrieve_stashed_component(&self, name: &str, code: &str) -> LalResult<PathBuf>;
fn unpack_published_component(
&self,
name: &str,
version: Option<u32>,
env: Option<&str>,
) -> LalResult<Component>;
fn unpack_stashed_component(&self, name: &str, code: &str) -> LalResult<()>;
fn stash_output(&self, name: &str, code: &str) -> LalResult<()>;
}