use std::sync::{Arc, LazyLock};
use dashmap::DashSet;
pub use kingfisher_core::git_commit_metadata::CommitMetadata;
pub(crate) fn intern_git_identity(value: &str) -> Arc<str> {
static IDENTITIES: LazyLock<DashSet<Arc<str>>> = LazyLock::new(|| DashSet::with_capacity(512));
if let Some(existing) = IDENTITIES.get(value) {
return Arc::clone(existing.key());
}
let interned: Arc<str> = value.into();
if IDENTITIES.insert(Arc::clone(&interned)) {
return interned;
}
Arc::clone(IDENTITIES.get(value).expect("inserted Git identity must exist").key())
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn git_identities_are_interned() {
let first = intern_git_identity("committer@example.com");
let second = intern_git_identity("committer@example.com");
assert!(Arc::ptr_eq(&first, &second));
}
}