cargo-reclaim 0.2.0

Safe Cargo cleanup for target directories, stale artifacts, and Cargo home caches
Documentation
use serde::{Deserialize, Serialize};
use sha2::{Digest, Sha256};

use super::error::PlanPersistenceResult;

#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct PlanId(pub String);

impl PlanId {
    pub fn from_body<T>(body: &T) -> PlanPersistenceResult<Self>
    where
        T: Serialize,
    {
        let bytes = serde_json::to_vec(body)?;
        let digest = Sha256::digest(bytes);
        Ok(Self(format!("sha256:{digest:x}")))
    }

    pub fn as_str(&self) -> &str {
        &self.0
    }
}