use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CrateReceiptV1 {
pub crate_name: &'static str,
pub operation: String,
pub timestamp: DateTime<Utc>,
pub digest: String,
pub outcome: Outcome,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum Outcome {
Success,
Failure { reason: String },
}
impl CrateReceiptV1 {
pub fn success(operation: impl Into<String>, digest: impl Into<String>) -> Self {
Self {
crate_name: env!("CARGO_PKG_NAME"),
operation: operation.into(),
timestamp: Utc::now(),
digest: digest.into(),
outcome: Outcome::Success,
}
}
pub fn failure(operation: impl Into<String>, digest: impl Into<String>, reason: impl Into<String>) -> Self {
Self {
crate_name: env!("CARGO_PKG_NAME"),
operation: operation.into(),
timestamp: Utc::now(),
digest: digest.into(),
outcome: Outcome::Failure { reason: reason.into() },
}
}
}