use super::Message;
use crate::{bin_resolver::ResolvedBinary, config::BinaryProvider, crate_resolver::ResolvedCrate};
use serde::{Deserialize, Serialize};
use std::path::PathBuf;
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "event", rename_all = "snake_case")]
pub enum PrebuiltBinaryMessage {
CacheLookup { krate: ResolvedCrate },
CacheHit { path: PathBuf, provider: BinaryProvider },
CacheMiss { krate: ResolvedCrate },
CheckingProvider {
krate: ResolvedCrate,
provider: BinaryProvider,
},
ProviderHasNoBinary {
provider: BinaryProvider,
reason: String,
},
DownloadingBinary { url: String, provider: BinaryProvider },
VerifyingChecksum { expected: String },
ChecksumVerified,
Resolved { binary: ResolvedBinary },
CacheStored { path: PathBuf },
NoBinaryFound {
krate: ResolvedCrate,
reasons: Vec<String>,
},
DisqualifiedDueToCustomization { reason: String },
PrebuiltBinariesDisabled,
}
impl PrebuiltBinaryMessage {
pub fn cache_lookup(krate: &ResolvedCrate) -> Self {
Self::CacheLookup { krate: krate.clone() }
}
pub fn cache_hit(path: &std::path::Path, provider: BinaryProvider) -> Self {
Self::CacheHit {
path: path.to_path_buf(),
provider,
}
}
pub fn cache_miss(krate: &ResolvedCrate) -> Self {
Self::CacheMiss { krate: krate.clone() }
}
pub fn checking_provider(krate: &ResolvedCrate, provider: BinaryProvider) -> Self {
Self::CheckingProvider {
krate: krate.clone(),
provider,
}
}
pub fn provider_has_no_binary(provider: BinaryProvider, reason: impl Into<String>) -> Self {
Self::ProviderHasNoBinary {
provider,
reason: reason.into(),
}
}
pub fn downloading_binary(url: impl Into<String>, provider: BinaryProvider) -> Self {
Self::DownloadingBinary {
url: url.into(),
provider,
}
}
pub fn verifying_checksum(expected: impl Into<String>) -> Self {
Self::VerifyingChecksum {
expected: expected.into(),
}
}
pub fn checksum_verified() -> Self {
Self::ChecksumVerified
}
pub fn resolved(binary: &ResolvedBinary) -> Self {
Self::Resolved {
binary: binary.clone(),
}
}
pub fn cache_stored(path: &std::path::Path) -> Self {
Self::CacheStored {
path: path.to_path_buf(),
}
}
pub fn no_binary_found(krate: &ResolvedCrate, reasons: Vec<String>) -> Self {
Self::NoBinaryFound {
krate: krate.clone(),
reasons,
}
}
pub fn disqualified_due_to_customization(reason: impl Into<String>) -> Self {
Self::DisqualifiedDueToCustomization {
reason: reason.into(),
}
}
pub fn prebuilt_binaries_disabled() -> Self {
Self::PrebuiltBinariesDisabled
}
}
impl From<PrebuiltBinaryMessage> for Message {
fn from(msg: PrebuiltBinaryMessage) -> Self {
Message::PrebuiltBinary(msg)
}
}