apple_security_framework/os/macos/
item.rs

1//! OSX specific functionality for items.
2// Moved to crate::Key
3pub use crate::key::KeyType;
4use crate::{
5    item::ItemSearchOptions, os::macos::keychain::SecKeychain, ItemSearchOptionsInternals,
6};
7
8/// An extension trait adding OSX specific functionality to `ItemSearchOptions`.
9pub trait ItemSearchOptionsExt {
10    /// Search within the specified keychains.
11    ///
12    /// If this is not called, the default keychain will be searched.
13    fn keychains(&mut self, keychains: &[SecKeychain]) -> &mut Self;
14}
15
16impl ItemSearchOptionsExt for ItemSearchOptions {
17    #[inline(always)]
18    fn keychains(&mut self, keychains: &[SecKeychain]) -> &mut Self {
19        ItemSearchOptionsInternals::keychains(self, keychains)
20    }
21}
22
23#[cfg(test)]
24mod test {
25    use tempfile::tempdir;
26
27    use crate::{
28        item::*,
29        os::macos::{certificate::SecCertificateExt, item::ItemSearchOptionsExt, test::keychain},
30    };
31
32    #[test]
33    fn find_certificate() {
34        let dir = p!(tempdir());
35        let keychain = keychain(dir.path());
36        let results = p!(ItemSearchOptions::new()
37            .keychains(&[keychain])
38            .class(ItemClass::certificate())
39            .search());
40        assert_eq!(1, results.len());
41        let certificate = match results[0] {
42            SearchResult::Ref(Reference::Certificate(ref cert)) => cert,
43            _ => panic!("expected certificate"),
44        };
45        assert_eq!("foobar.com", p!(certificate.common_name()));
46    }
47}