//! 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::*;

extern_class!(
    /// [Apple's documentation](https://developer.apple.com/documentation/opendirectory/odattributemap?language=objc)
    #[unsafe(super(NSObject))]
    #[derive(Debug, PartialEq, Eq, Hash)]
    pub struct ODAttributeMap;
);

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

impl ODAttributeMap {
    extern_methods!(
        #[unsafe(method(customQueryFunction))]
        #[unsafe(method_family = none)]
        pub unsafe fn customQueryFunction(&self) -> Retained<NSString>;

        /// Setter for [`customQueryFunction`][Self::customQueryFunction].
        ///
        /// This is [copied][objc2_foundation::NSCopying::copy] when set.
        #[unsafe(method(setCustomQueryFunction:))]
        #[unsafe(method_family = none)]
        pub unsafe fn setCustomQueryFunction(&self, custom_query_function: Option<&NSString>);

        #[unsafe(method(customTranslationFunction))]
        #[unsafe(method_family = none)]
        pub unsafe fn customTranslationFunction(&self) -> Retained<NSString>;

        /// Setter for [`customTranslationFunction`][Self::customTranslationFunction].
        ///
        /// This is [copied][objc2_foundation::NSCopying::copy] when set.
        #[unsafe(method(setCustomTranslationFunction:))]
        #[unsafe(method_family = none)]
        pub unsafe fn setCustomTranslationFunction(
            &self,
            custom_translation_function: Option<&NSString>,
        );

        #[unsafe(method(customAttributes))]
        #[unsafe(method_family = none)]
        pub unsafe fn customAttributes(&self) -> Retained<NSArray>;

        /// Setter for [`customAttributes`][Self::customAttributes].
        ///
        /// This is [copied][objc2_foundation::NSCopying::copy] when set.
        ///
        /// # Safety
        ///
        /// `custom_attributes` generic should be of the correct type.
        #[unsafe(method(setCustomAttributes:))]
        #[unsafe(method_family = none)]
        pub unsafe fn setCustomAttributes(&self, custom_attributes: Option<&NSArray>);

        #[unsafe(method(value))]
        #[unsafe(method_family = none)]
        pub unsafe fn value(&self) -> Retained<NSString>;

        /// Setter for [`value`][Self::value].
        ///
        /// This is [copied][objc2_foundation::NSCopying::copy] when set.
        #[unsafe(method(setValue:))]
        #[unsafe(method_family = none)]
        pub unsafe fn setValue(&self, value: Option<&NSString>);

        /// Returns an initialized and autoreleased ODAttributeMap object with the given value mapped.
        ///
        ///
        /// Returns an initialized and autoreleased ODAttributeMap object with the given value mapped.
        ///
        /// # Safety
        ///
        /// `value` might not allow `None`.
        #[unsafe(method(attributeMapWithValue:))]
        #[unsafe(method_family = none)]
        pub unsafe fn attributeMapWithValue(value: Option<&NSString>) -> Option<Retained<Self>>;

        /// Returns an initialized and autoreleased ODAttributeMap object with the given static value.
        ///
        ///
        /// Returns an initialized and autoreleased ODAttributeMap object with the given static value.
        ///
        /// # Safety
        ///
        /// `static_value` might not allow `None`.
        #[unsafe(method(attributeMapWithStaticValue:))]
        #[unsafe(method_family = none)]
        pub unsafe fn attributeMapWithStaticValue(
            static_value: Option<&NSString>,
        ) -> Option<Retained<Self>>;

        /// Sets a static value that will always be returned for this mapping.
        ///
        ///
        /// Sets a static value that will always be returned for this mapping, i.e., "20".
        ///
        /// # Safety
        ///
        /// `static_value` might not allow `None`.
        #[unsafe(method(setStaticValue:))]
        #[unsafe(method_family = none)]
        pub unsafe fn setStaticValue(&self, static_value: Option<&NSString>);

        /// Sets a variable substitution-based value.
        ///
        ///
        /// Value should be using the syntax '$native$' for all substited values.  For example,
        /// to form a home directory using the "cn" of an LDAP record, substitution could be done
        /// with "/home/$cn$".
        ///
        /// # Safety
        ///
        /// `variable_substitution` might not allow `None`.
        #[unsafe(method(setVariableSubstitution:))]
        #[unsafe(method_family = none)]
        pub unsafe fn setVariableSubstitution(&self, variable_substitution: Option<&NSString>);
    );
}

/// Methods declared on superclass `NSObject`.
impl ODAttributeMap {
    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>;
    );
}
