objc2-contacts 0.3.2

Bindings to the Contacts framework
Documentation
//! This file has been automatically generated by `objc2`'s `header-translator`.
//! DO NOT EDIT
use core::ffi::*;
use core::ptr::NonNull;
use objc2::__framework_prelude::*;
use objc2_foundation::*;

use crate::*;

/// The formatting styles for contact names.
///
/// See also [Apple's documentation](https://developer.apple.com/documentation/contacts/cncontactformatterstyle?language=objc)
// NS_ENUM
#[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct CNContactFormatterStyle(pub NSInteger);
impl CNContactFormatterStyle {
    /// Combine the contact name components into a displayable full name.
    #[doc(alias = "CNContactFormatterStyleFullName")]
    pub const FullName: Self = Self(0);
    /// Combine the contact phonetic name components into a displayable phonetic full name.
    #[doc(alias = "CNContactFormatterStylePhoneticFullName")]
    pub const PhoneticFullName: Self = Self(1);
}

unsafe impl Encode for CNContactFormatterStyle {
    const ENCODING: Encoding = NSInteger::ENCODING;
}

unsafe impl RefEncode for CNContactFormatterStyle {
    const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}

/// The formatting order of the contact name components.
///
/// See also [Apple's documentation](https://developer.apple.com/documentation/contacts/cncontactdisplaynameorder?language=objc)
// NS_ENUM
#[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct CNContactDisplayNameOrder(pub NSInteger);
impl CNContactDisplayNameOrder {
    #[doc(alias = "CNContactDisplayNameOrderUserDefault")]
    pub const UserDefault: Self = Self(0);
    #[doc(alias = "CNContactDisplayNameOrderGivenNameFirst")]
    pub const GivenNameFirst: Self = Self(1);
    #[doc(alias = "CNContactDisplayNameOrderFamilyNameFirst")]
    pub const FamilyNameFirst: Self = Self(2);
}

unsafe impl Encode for CNContactDisplayNameOrder {
    const ENCODING: Encoding = NSInteger::ENCODING;
}

unsafe impl RefEncode for CNContactDisplayNameOrder {
    const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}

extern_class!(
    /// Formats a contact name.
    ///
    ///
    /// This formatter handles international ordering and delimiting of the contact name components. This includes applying the user defaults when appropriate.
    ///
    /// See also [Apple's documentation](https://developer.apple.com/documentation/contacts/cncontactformatter?language=objc)
    #[unsafe(super(NSFormatter, NSObject))]
    #[derive(Debug, PartialEq, Eq, Hash)]
    pub struct CNContactFormatter;
);

extern_conformance!(
    unsafe impl NSCoding for CNContactFormatter {}
);

extern_conformance!(
    unsafe impl NSCopying for CNContactFormatter {}
);

unsafe impl CopyingHelper for CNContactFormatter {
    type Result = Self;
}

extern_conformance!(
    unsafe impl NSObjectProtocol for CNContactFormatter {}
);

extern_conformance!(
    unsafe impl NSSecureCoding for CNContactFormatter {}
);

impl CNContactFormatter {
    extern_methods!(
        #[cfg(feature = "CNContact")]
        /// The contact key descriptor required for the formatter.
        ///
        ///
        /// Use to fetch all contact keys required for the formatter style. Can combine key descriptors for different formatter styles in the fetch.
        ///
        ///
        /// Parameter `style`: The formatting style to be used for the contact name.
        ///
        /// Returns: The contact key descriptor for the formatting style.
        #[unsafe(method(descriptorForRequiredKeysForStyle:))]
        #[unsafe(method_family = none)]
        pub unsafe fn descriptorForRequiredKeysForStyle(
            style: CNContactFormatterStyle,
        ) -> Retained<ProtocolObject<dyn CNKeyDescriptor>>;

        #[cfg(feature = "CNContact")]
        /// The contact key descriptor required for the name order.
        ///
        ///
        /// Use to fetch all contact keys required for +nameOrderForContact:. Can combine key descriptors for different formatter styles in the fetch.
        ///
        ///
        /// Returns: The contact key descriptor for the name order.
        #[unsafe(method(descriptorForRequiredKeysForNameOrder))]
        #[unsafe(method_family = none)]
        pub unsafe fn descriptorForRequiredKeysForNameOrder(
        ) -> Retained<ProtocolObject<dyn CNKeyDescriptor>>;

        #[cfg(feature = "CNContact")]
        /// The contact key descriptor required for the name delimiter.
        ///
        ///
        /// Use to fetch all contact keys required for +delimiterForContact:. Can combine key descriptors for different formatter styles in the fetch.
        ///
        ///
        /// Returns: The contact key descriptor for the name delimiter.
        #[unsafe(method(descriptorForRequiredKeysForDelimiter))]
        #[unsafe(method_family = none)]
        pub unsafe fn descriptorForRequiredKeysForDelimiter(
        ) -> Retained<ProtocolObject<dyn CNKeyDescriptor>>;

        #[cfg(feature = "CNContact")]
        /// Formats the contact name.
        ///
        ///
        /// Parameter `contact`: The contact whose name is to be formatted.
        ///
        /// Parameter `style`: The formatting style to be used for the contact name.
        ///
        /// Returns: The formatted contact name.
        #[unsafe(method(stringFromContact:style:))]
        #[unsafe(method_family = none)]
        pub unsafe fn stringFromContact_style(
            contact: &CNContact,
            style: CNContactFormatterStyle,
        ) -> Option<Retained<NSString>>;

        #[cfg(feature = "CNContact")]
        /// Formats the contact name returning an attributed string.
        ///
        ///
        /// This behaves like +stringFromContact:style: except it returns an attributed string. Includes the attribute key CNContactPropertyAttribute.
        ///
        ///
        /// Parameter `contact`: The contact whose name is to be formatted.
        ///
        /// Parameter `style`: The formatting style to be used for the contact name.
        ///
        /// Parameter `attributes`: The default attributes to use. See NSFormatter for details.
        ///
        /// Returns: The formatted contact name as an attributed string.
        ///
        /// # Safety
        ///
        /// `attributes` generic should be of the correct type.
        #[unsafe(method(attributedStringFromContact:style:defaultAttributes:))]
        #[unsafe(method_family = none)]
        pub unsafe fn attributedStringFromContact_style_defaultAttributes(
            contact: &CNContact,
            style: CNContactFormatterStyle,
            attributes: Option<&NSDictionary>,
        ) -> Option<Retained<NSAttributedString>>;

        #[cfg(feature = "CNContact")]
        /// The recommended name order for a given contact.
        #[unsafe(method(nameOrderForContact:))]
        #[unsafe(method_family = none)]
        pub unsafe fn nameOrderForContact(contact: &CNContact) -> CNContactDisplayNameOrder;

        #[cfg(feature = "CNContact")]
        /// The recommended delimiter to use between name components for a given contact.
        #[unsafe(method(delimiterForContact:))]
        #[unsafe(method_family = none)]
        pub unsafe fn delimiterForContact(contact: &CNContact) -> Retained<NSString>;

        /// The style for a contact formatter instance.
        ///
        ///
        /// The default value is CNContactFormatterStyleFullName.
        #[unsafe(method(style))]
        #[unsafe(method_family = none)]
        pub unsafe fn style(&self) -> CNContactFormatterStyle;

        /// Setter for [`style`][Self::style].
        #[unsafe(method(setStyle:))]
        #[unsafe(method_family = none)]
        pub unsafe fn setStyle(&self, style: CNContactFormatterStyle);

        #[cfg(feature = "CNContact")]
        /// Formats the contact name.
        ///
        ///
        /// Parameter `contact`: The contact whose name is to be formatted.
        ///
        /// Returns: The formatted contact name.
        #[unsafe(method(stringFromContact:))]
        #[unsafe(method_family = none)]
        pub unsafe fn stringFromContact(&self, contact: &CNContact) -> Option<Retained<NSString>>;

        #[cfg(feature = "CNContact")]
        /// Formats the contact name returning an attributed string.
        ///
        ///
        /// This behaves like -stringFromContact:style: except it returns an attributed string. CNContactPropertyAttribute key has the value of a CNContact name property key.
        ///
        ///
        /// Parameter `contact`: The contact whose name is to be formatted.
        ///
        /// Parameter `attributes`: The default attributes to use. See NSFormatter for details.
        ///
        /// Returns: The formatted contact name as an attributed string.
        ///
        /// # Safety
        ///
        /// `attributes` generic should be of the correct type.
        #[unsafe(method(attributedStringFromContact:defaultAttributes:))]
        #[unsafe(method_family = none)]
        pub unsafe fn attributedStringFromContact_defaultAttributes(
            &self,
            contact: &CNContact,
            attributes: Option<&NSDictionary>,
        ) -> Option<Retained<NSAttributedString>>;
    );
}

/// Methods declared on superclass `NSObject`.
impl CNContactFormatter {
    extern_methods!(
        #[unsafe(method(init))]
        #[unsafe(method_family = init)]
        pub unsafe fn init(this: Allocated<Self>) -> Retained<Self>;

        #[unsafe(method(new))]
        #[unsafe(method_family = new)]
        pub unsafe fn new() -> Retained<Self>;
    );
}

extern "C" {
    /// [Apple's documentation](https://developer.apple.com/documentation/contacts/cncontactpropertyattribute?language=objc)
    pub static CNContactPropertyAttribute: &'static NSString;
}