// SPDX-License-Identifier: Apache-2.0 // Copyright 2026 //! `kei-contacts-apple` — CardDAV client for iCloud Contacts. //! //! Authenticates with **Apple ID + app-specific password** (HTTP Basic Auth). //! Does NOT use Sign in with Apple / OAuth — that scope does not cover contacts. //! //! # Quick start //! ```no_run //! # async fn example() -> Result<(), kei_contacts_apple::ContactsError> { //! let client = kei_contacts_apple::ICloudCardDavClient::new( //! "user@icloud.com".to_string(), //! std::env::var("APPLE_APP_SPECIFIC_PASSWORD").unwrap(), //! ) //! .with_addressbook_url( //! "https://p01-contacts.icloud.com/123456789/carddavhome/card/".to_string(), //! ); //! let contacts = client.list_contacts().await?; //! for c in &contacts { //! let person = c.to_person(); //! println!("{} <{}>", person.name, person.email); //! } //! # Ok(()) //! # } //! ``` pub mod client; pub mod contact; pub mod error; pub mod vcard; pub(crate) mod discovery; pub(crate) mod xml; pub use client::ICloudCardDavClient; pub use contact::AppleContact; pub use error::ContactsError;