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

mod private_NSObjectNSScripting {
    pub trait Sealed {}
}

/// Category "NSScripting" on [`NSObject`].
#[doc(alias = "NSScripting")]
pub unsafe trait NSObjectNSScripting:
    ClassType + Sized + private_NSObjectNSScripting::Sealed
{
    extern_methods!(
        #[cfg(feature = "NSScriptObjectSpecifiers")]
        #[unsafe(method(scriptingValueForSpecifier:))]
        #[unsafe(method_family = none)]
        fn scriptingValueForSpecifier(
            &self,
            object_specifier: &NSScriptObjectSpecifier,
        ) -> Option<Retained<AnyObject>>;

        #[cfg(all(feature = "NSDictionary", feature = "NSString"))]
        #[unsafe(method(scriptingProperties))]
        #[unsafe(method_family = none)]
        fn scriptingProperties(&self) -> Option<Retained<NSDictionary<NSString, AnyObject>>>;

        #[cfg(all(feature = "NSDictionary", feature = "NSString"))]
        /// Setter for [`scriptingProperties`][Self::scriptingProperties].
        ///
        /// This is [copied][crate::NSCopying::copy] when set.
        ///
        /// # Safety
        ///
        /// `scripting_properties` generic should be of the correct type.
        #[unsafe(method(setScriptingProperties:))]
        #[unsafe(method_family = none)]
        unsafe fn setScriptingProperties(
            &self,
            scripting_properties: Option<&NSDictionary<NSString, AnyObject>>,
        );

        #[cfg(all(feature = "NSDictionary", feature = "NSString"))]
        /// # Safety
        ///
        /// - `value` should be of the correct type.
        /// - `properties` generic should be of the correct type.
        #[unsafe(method(copyScriptingValue:forKey:withProperties:))]
        #[unsafe(method_family = copy)]
        unsafe fn copyScriptingValue_forKey_withProperties(
            &self,
            value: &AnyObject,
            key: &NSString,
            properties: &NSDictionary<NSString, AnyObject>,
        ) -> Option<Retained<AnyObject>>;

        #[cfg(all(feature = "NSDictionary", feature = "NSString"))]
        /// # Safety
        ///
        /// - `object_class` probably has further requirements.
        /// - `contents_value` should be of the correct type.
        /// - `properties` generic should be of the correct type.
        #[unsafe(method(newScriptingObjectOfClass:forValueForKey:withContentsValue:properties:))]
        #[unsafe(method_family = new)]
        unsafe fn newScriptingObjectOfClass_forValueForKey_withContentsValue_properties(
            &self,
            object_class: &AnyClass,
            key: &NSString,
            contents_value: Option<&AnyObject>,
            properties: &NSDictionary<NSString, AnyObject>,
        ) -> Option<Retained<AnyObject>>;
    );
}

impl private_NSObjectNSScripting::Sealed for NSObject {}
unsafe impl NSObjectNSScripting for NSObject {}
