use cargo::{CargoResult, GlobalContext, core::SourceId};
use std::fmt;
#[derive(Debug, Default, Clone)]
pub struct ClonerSource {
pub(crate) cargo_source: CargoSource,
}
impl fmt::Display for CargoSource {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::CratesIo => write!(f, "crates.io"),
Self::Registry(key) => write!(f, "{key}"),
}
}
}
#[derive(Debug, Default, Clone)]
pub(crate) enum CargoSource {
#[default]
CratesIo,
Registry(String),
}
impl ClonerSource {
pub fn registry(key: impl Into<String>) -> Self {
Self {
cargo_source: CargoSource::Registry(key.into()),
}
}
pub fn crates_io() -> Self {
Self {
cargo_source: CargoSource::CratesIo,
}
}
}
impl CargoSource {
pub(crate) fn to_source_id(&self, config: &GlobalContext) -> CargoResult<SourceId> {
match self {
Self::CratesIo => SourceId::crates_io(config),
Self::Registry(key) => SourceId::alt_registry(config, key),
}
}
}