use serde::{Deserialize, Serialize};
use uuid::Uuid;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct SourceId {
pub project: String,
pub platform: String,
pub version: String,
pub install_id: Uuid,
}
impl SourceId {
#[must_use]
pub fn canonical(&self) -> String {
format!(
"{}/{}/{}/{}",
self.project, self.platform, self.version, self.install_id
)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
#[cfg_attr(coverage_nightly, coverage(off))]
fn canonical_joins_fields_with_slashes() {
let source = SourceId {
project: "detritus".to_owned(),
platform: "linux".to_owned(),
version: "1.2.3".to_owned(),
install_id: Uuid::nil(),
};
assert_eq!(
source.canonical(),
"detritus/linux/1.2.3/00000000-0000-0000-0000-000000000000"
);
}
}