//! 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())); } }