use std::path::PathBuf;
use core::LalResult;
use super::{ArtifactoryConfig, LocalConfig};
#[derive(Serialize, Deserialize, Clone)]
pub enum BackendConfiguration {
#[serde(rename = "artifactory")]
Artifactory(ArtifactoryConfig),
#[serde(rename = "local")]
Local(LocalConfig),
}
impl Default for BackendConfiguration {
fn default() -> Self { BackendConfiguration::Artifactory(ArtifactoryConfig::default()) }
}
pub struct Component {
pub name: String,
pub version: u32,
pub location: String,
}
pub trait Backend {
fn get_versions(&self, name: &str, loc: &str) -> LalResult<Vec<u32>>;
fn get_latest_version(&self, name: &str, loc: &str) -> LalResult<u32>;
fn get_component_info(&self, name: &str, ver: Option<u32>, loc: &str) -> LalResult<Component>;
fn publish_artifact(&self, name: &str, version: u32, env: &str) -> LalResult<()>;
fn raw_fetch(&self, location: &str, dest: &PathBuf) -> LalResult<()>;
fn get_cache_dir(&self) -> String;
}
pub trait CachedBackend {
fn get_latest_supported_versions(
&self,
name: &str,
environments: Vec<String>,
) -> LalResult<Vec<u32>>;
fn retrieve_published_component(
&self,
name: &str,
version: Option<u32>,
env: &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: &str,
) -> LalResult<Component>;
fn unpack_stashed_component(&self, name: &str, code: &str) -> LalResult<()>;
fn stash_output(&self, name: &str, code: &str) -> LalResult<()>;
}