blob: 18a4d2e8f78dc91d23af36c51e73a67f9593e165 [file] [log] [blame]
//! OSX specific functionality for items.
use crate::item::ItemSearchOptions;
use crate::os::macos::keychain::SecKeychain;
use crate::ItemSearchOptionsInternals;
// Moved to crate::Key
pub use crate::key::KeyType;
/// An extension trait adding OSX specific functionality to `ItemSearchOptions`.
pub trait ItemSearchOptionsExt {
/// Search within the specified keychains.
///
/// If this is not called, the default keychain will be searched.
fn keychains(&mut self, keychains: &[SecKeychain]) -> &mut Self;
}
impl ItemSearchOptionsExt for ItemSearchOptions {
#[inline(always)]
fn keychains(&mut self, keychains: &[SecKeychain]) -> &mut Self {
ItemSearchOptionsInternals::keychains(self, keychains)
}
}
#[cfg(test)]
mod test {
use crate::item::*;
use crate::os::macos::certificate::SecCertificateExt;
use crate::os::macos::item::ItemSearchOptionsExt;
use crate::os::macos::test::keychain;
use tempfile::tempdir;
#[test]
fn find_certificate() {
let dir = p!(tempdir());
let keychain = keychain(dir.path());
let results = p!(ItemSearchOptions::new()
.keychains(&[keychain])
.class(ItemClass::certificate())
.search());
assert_eq!(1, results.len());
let certificate = match results[0] {
SearchResult::Ref(Reference::Certificate(ref cert)) => cert,
_ => panic!("expected certificate"),
};
assert_eq!("foobar.com", p!(certificate.common_name()));
}
}