use serde::{Deserialize, Serialize};
use std::path::PathBuf;
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(deny_unknown_fields)]
pub struct Config {
pub download_url: String,
pub api_url: String,
pub index_dir: PathBuf,
pub crate_dir: PathBuf,
#[serde(default = "Default::default", skip_serializing_if = "Vec::is_empty")]
pub allowed_registries: Vec<String>,
}
impl Config {
pub fn example() -> Self {
Self {
download_url: "https://example.com/crates/{crate}/{crate}-{version}.crate".into(),
api_url: "https://example.com".into(),
index_dir: "index".into(),
crate_dir: "crates".into(),
allowed_registries: vec![
"https://github.com/rust-lang/crates.io-index".into(),
],
}
}
}
impl Config {
pub fn cargo_json(&self) -> String {
#[derive(Serialize)]
struct CargoConfig<'a> {
dl: &'a str,
api: &'a str,
}
let cargo_config = CargoConfig {
dl: &self.download_url,
api: &self.api_url,
};
let mut json = serde_json::to_string_pretty(&cargo_config).unwrap();
json.push('\n');
json
}
}