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

extern "C" {
    /// [Apple's documentation](https://developer.apple.com/documentation/foundation/nsoperationnotsupportedforkeyexception?language=objc)
    #[cfg(feature = "NSString")]
    pub static NSOperationNotSupportedForKeyException: &'static NSString;
}

mod private_NSObjectNSScriptKeyValueCoding {
    pub trait Sealed {}
}

/// Category "NSScriptKeyValueCoding" on [`NSObject`].
#[doc(alias = "NSScriptKeyValueCoding")]
pub unsafe trait NSObjectNSScriptKeyValueCoding:
    ClassType + Sized + private_NSObjectNSScriptKeyValueCoding::Sealed
{
    extern_methods!(
        #[cfg(feature = "NSString")]
        #[unsafe(method(valueAtIndex:inPropertyWithKey:))]
        #[unsafe(method_family = none)]
        fn valueAtIndex_inPropertyWithKey(
            &self,
            index: NSUInteger,
            key: &NSString,
        ) -> Option<Retained<AnyObject>>;

        #[cfg(feature = "NSString")]
        #[unsafe(method(valueWithName:inPropertyWithKey:))]
        #[unsafe(method_family = none)]
        fn valueWithName_inPropertyWithKey(
            &self,
            name: &NSString,
            key: &NSString,
        ) -> Option<Retained<AnyObject>>;

        #[cfg(feature = "NSString")]
        /// # Safety
        ///
        /// `unique_id` should be of the correct type.
        #[unsafe(method(valueWithUniqueID:inPropertyWithKey:))]
        #[unsafe(method_family = none)]
        unsafe fn valueWithUniqueID_inPropertyWithKey(
            &self,
            unique_id: &AnyObject,
            key: &NSString,
        ) -> Option<Retained<AnyObject>>;

        #[cfg(feature = "NSString")]
        /// # Safety
        ///
        /// `value` should be of the correct type.
        #[unsafe(method(insertValue:atIndex:inPropertyWithKey:))]
        #[unsafe(method_family = none)]
        unsafe fn insertValue_atIndex_inPropertyWithKey(
            &self,
            value: &AnyObject,
            index: NSUInteger,
            key: &NSString,
        );

        #[cfg(feature = "NSString")]
        #[unsafe(method(removeValueAtIndex:fromPropertyWithKey:))]
        #[unsafe(method_family = none)]
        fn removeValueAtIndex_fromPropertyWithKey(&self, index: NSUInteger, key: &NSString);

        #[cfg(feature = "NSString")]
        /// # Safety
        ///
        /// `value` should be of the correct type.
        #[unsafe(method(replaceValueAtIndex:inPropertyWithKey:withValue:))]
        #[unsafe(method_family = none)]
        unsafe fn replaceValueAtIndex_inPropertyWithKey_withValue(
            &self,
            index: NSUInteger,
            key: &NSString,
            value: &AnyObject,
        );

        #[cfg(feature = "NSString")]
        /// # Safety
        ///
        /// `value` should be of the correct type.
        #[unsafe(method(insertValue:inPropertyWithKey:))]
        #[unsafe(method_family = none)]
        unsafe fn insertValue_inPropertyWithKey(&self, value: &AnyObject, key: &NSString);

        #[cfg(feature = "NSString")]
        /// # Safety
        ///
        /// `value` should be of the correct type.
        #[unsafe(method(coerceValue:forKey:))]
        #[unsafe(method_family = none)]
        unsafe fn coerceValue_forKey(
            &self,
            value: Option<&AnyObject>,
            key: &NSString,
        ) -> Option<Retained<AnyObject>>;
    );
}

impl private_NSObjectNSScriptKeyValueCoding::Sealed for NSObject {}
unsafe impl NSObjectNSScriptKeyValueCoding for NSObject {}
