//! 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_class!(
    /// [Apple's documentation](https://developer.apple.com/documentation/foundation/nsconnection?language=objc)
    #[unsafe(super(NSObject))]
    #[derive(Debug, PartialEq, Eq, Hash)]
    #[deprecated = "Use NSXPCConnection instead"]
    pub struct NSConnection;
);

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

impl NSConnection {
    extern_methods!(
        #[cfg(all(feature = "NSDictionary", feature = "NSString", feature = "NSValue"))]
        #[deprecated = "Use NSXPCConnection instead"]
        #[unsafe(method(statistics))]
        #[unsafe(method_family = none)]
        pub fn statistics(&self) -> Retained<NSDictionary<NSString, NSNumber>>;

        #[cfg(feature = "NSArray")]
        #[deprecated = "Use NSXPCConnection instead"]
        #[unsafe(method(allConnections))]
        #[unsafe(method_family = none)]
        pub fn allConnections() -> Retained<NSArray<NSConnection>>;

        #[deprecated]
        #[unsafe(method(defaultConnection))]
        #[unsafe(method_family = none)]
        pub fn defaultConnection() -> Retained<NSConnection>;

        #[cfg(feature = "NSString")]
        #[deprecated = "Use NSXPCConnection instead"]
        #[unsafe(method(connectionWithRegisteredName:host:))]
        #[unsafe(method_family = none)]
        pub fn connectionWithRegisteredName_host(
            name: &NSString,
            host_name: Option<&NSString>,
        ) -> Option<Retained<Self>>;

        #[cfg(all(feature = "NSPortNameServer", feature = "NSString"))]
        #[deprecated = "Use NSXPCConnection instead"]
        #[unsafe(method(connectionWithRegisteredName:host:usingNameServer:))]
        #[unsafe(method_family = none)]
        pub fn connectionWithRegisteredName_host_usingNameServer(
            name: &NSString,
            host_name: Option<&NSString>,
            server: &NSPortNameServer,
        ) -> Option<Retained<Self>>;

        #[cfg(all(feature = "NSDistantObject", feature = "NSProxy", feature = "NSString"))]
        #[deprecated = "Use NSXPCConnection instead"]
        #[unsafe(method(rootProxyForConnectionWithRegisteredName:host:))]
        #[unsafe(method_family = none)]
        pub fn rootProxyForConnectionWithRegisteredName_host(
            name: &NSString,
            host_name: Option<&NSString>,
        ) -> Option<Retained<NSDistantObject>>;

        #[cfg(all(
            feature = "NSDistantObject",
            feature = "NSPortNameServer",
            feature = "NSProxy",
            feature = "NSString"
        ))]
        #[deprecated = "Use NSXPCConnection instead"]
        #[unsafe(method(rootProxyForConnectionWithRegisteredName:host:usingNameServer:))]
        #[unsafe(method_family = none)]
        pub fn rootProxyForConnectionWithRegisteredName_host_usingNameServer(
            name: &NSString,
            host_name: Option<&NSString>,
            server: &NSPortNameServer,
        ) -> Option<Retained<NSDistantObject>>;

        #[cfg(all(feature = "NSPortNameServer", feature = "NSString"))]
        /// # Safety
        ///
        /// `root` should be of the correct type.
        #[unsafe(method(serviceConnectionWithName:rootObject:usingNameServer:))]
        #[unsafe(method_family = none)]
        pub unsafe fn serviceConnectionWithName_rootObject_usingNameServer(
            name: &NSString,
            root: &AnyObject,
            server: &NSPortNameServer,
        ) -> Option<Retained<Self>>;

        #[cfg(feature = "NSString")]
        /// # Safety
        ///
        /// `root` should be of the correct type.
        #[unsafe(method(serviceConnectionWithName:rootObject:))]
        #[unsafe(method_family = none)]
        pub unsafe fn serviceConnectionWithName_rootObject(
            name: &NSString,
            root: &AnyObject,
        ) -> Option<Retained<Self>>;

        #[cfg(feature = "NSDate")]
        #[deprecated = "Use NSXPCConnection instead"]
        #[unsafe(method(requestTimeout))]
        #[unsafe(method_family = none)]
        pub fn requestTimeout(&self) -> NSTimeInterval;

        #[cfg(feature = "NSDate")]
        /// Setter for [`requestTimeout`][Self::requestTimeout].
        #[deprecated = "Use NSXPCConnection instead"]
        #[unsafe(method(setRequestTimeout:))]
        #[unsafe(method_family = none)]
        pub fn setRequestTimeout(&self, request_timeout: NSTimeInterval);

        #[cfg(feature = "NSDate")]
        #[deprecated = "Use NSXPCConnection instead"]
        #[unsafe(method(replyTimeout))]
        #[unsafe(method_family = none)]
        pub fn replyTimeout(&self) -> NSTimeInterval;

        #[cfg(feature = "NSDate")]
        /// Setter for [`replyTimeout`][Self::replyTimeout].
        #[deprecated = "Use NSXPCConnection instead"]
        #[unsafe(method(setReplyTimeout:))]
        #[unsafe(method_family = none)]
        pub fn setReplyTimeout(&self, reply_timeout: NSTimeInterval);

        #[deprecated = "Use NSXPCConnection instead"]
        #[unsafe(method(rootObject))]
        #[unsafe(method_family = none)]
        pub fn rootObject(&self) -> Option<Retained<AnyObject>>;

        /// Setter for [`rootObject`][Self::rootObject].
        ///
        /// # Safety
        ///
        /// `root_object` should be of the correct type.
        #[deprecated = "Use NSXPCConnection instead"]
        #[unsafe(method(setRootObject:))]
        #[unsafe(method_family = none)]
        pub unsafe fn setRootObject(&self, root_object: Option<&AnyObject>);

        /// # Safety
        ///
        /// This is not retained internally, you must ensure the object is still alive.
        #[deprecated = "Use NSXPCConnection instead"]
        #[unsafe(method(delegate))]
        #[unsafe(method_family = none)]
        pub unsafe fn delegate(&self)
            -> Option<Retained<ProtocolObject<dyn NSConnectionDelegate>>>;

        /// Setter for [`delegate`][Self::delegate].
        ///
        /// # Safety
        ///
        /// This is unretained, you must ensure the object is kept alive while in use.
        #[deprecated = "Use NSXPCConnection instead"]
        #[unsafe(method(setDelegate:))]
        #[unsafe(method_family = none)]
        pub unsafe fn setDelegate(
            &self,
            delegate: Option<&ProtocolObject<dyn NSConnectionDelegate>>,
        );

        #[deprecated = "Use NSXPCConnection instead"]
        #[unsafe(method(independentConversationQueueing))]
        #[unsafe(method_family = none)]
        pub fn independentConversationQueueing(&self) -> bool;

        /// Setter for [`independentConversationQueueing`][Self::independentConversationQueueing].
        #[deprecated = "Use NSXPCConnection instead"]
        #[unsafe(method(setIndependentConversationQueueing:))]
        #[unsafe(method_family = none)]
        pub fn setIndependentConversationQueueing(&self, independent_conversation_queueing: bool);

        #[deprecated = "Use NSXPCConnection instead"]
        #[unsafe(method(isValid))]
        #[unsafe(method_family = none)]
        pub fn isValid(&self) -> bool;

        #[cfg(all(feature = "NSDistantObject", feature = "NSProxy"))]
        #[deprecated = "Use NSXPCConnection instead"]
        #[unsafe(method(rootProxy))]
        #[unsafe(method_family = none)]
        pub fn rootProxy(&self) -> Retained<NSDistantObject>;

        #[deprecated = "Use NSXPCConnection instead"]
        #[unsafe(method(invalidate))]
        #[unsafe(method_family = none)]
        pub fn invalidate(&self);

        #[cfg(feature = "NSString")]
        #[deprecated = "Use NSXPCConnection instead"]
        #[unsafe(method(addRequestMode:))]
        #[unsafe(method_family = none)]
        pub fn addRequestMode(&self, rmode: &NSString);

        #[cfg(feature = "NSString")]
        #[deprecated = "Use NSXPCConnection instead"]
        #[unsafe(method(removeRequestMode:))]
        #[unsafe(method_family = none)]
        pub fn removeRequestMode(&self, rmode: &NSString);

        #[cfg(all(feature = "NSArray", feature = "NSString"))]
        #[deprecated = "Use NSXPCConnection instead"]
        #[unsafe(method(requestModes))]
        #[unsafe(method_family = none)]
        pub fn requestModes(&self) -> Retained<NSArray<NSString>>;

        #[cfg(feature = "NSString")]
        #[deprecated = "Use NSXPCConnection instead"]
        #[unsafe(method(registerName:))]
        #[unsafe(method_family = none)]
        pub fn registerName(&self, name: Option<&NSString>) -> bool;

        #[cfg(all(feature = "NSPortNameServer", feature = "NSString"))]
        #[deprecated = "Use NSXPCConnection instead"]
        #[unsafe(method(registerName:withNameServer:))]
        #[unsafe(method_family = none)]
        pub fn registerName_withNameServer(
            &self,
            name: Option<&NSString>,
            server: &NSPortNameServer,
        ) -> bool;

        #[cfg(feature = "NSPort")]
        #[deprecated = "Use NSXPCConnection instead"]
        #[unsafe(method(connectionWithReceivePort:sendPort:))]
        #[unsafe(method_family = none)]
        pub fn connectionWithReceivePort_sendPort(
            receive_port: Option<&NSPort>,
            send_port: Option<&NSPort>,
        ) -> Option<Retained<Self>>;

        #[deprecated = "Use NSXPCConnection instead"]
        #[unsafe(method(currentConversation))]
        #[unsafe(method_family = none)]
        pub fn currentConversation() -> Option<Retained<AnyObject>>;

        #[cfg(feature = "NSPort")]
        #[deprecated = "Use NSXPCConnection instead"]
        #[unsafe(method(initWithReceivePort:sendPort:))]
        #[unsafe(method_family = init)]
        pub fn initWithReceivePort_sendPort(
            this: Allocated<Self>,
            receive_port: Option<&NSPort>,
            send_port: Option<&NSPort>,
        ) -> Option<Retained<Self>>;

        #[cfg(feature = "NSPort")]
        #[deprecated = "Use NSXPCConnection instead"]
        #[unsafe(method(sendPort))]
        #[unsafe(method_family = none)]
        pub fn sendPort(&self) -> Retained<NSPort>;

        #[cfg(feature = "NSPort")]
        #[deprecated = "Use NSXPCConnection instead"]
        #[unsafe(method(receivePort))]
        #[unsafe(method_family = none)]
        pub fn receivePort(&self) -> Retained<NSPort>;

        #[deprecated = "Use NSXPCConnection instead"]
        #[unsafe(method(enableMultipleThreads))]
        #[unsafe(method_family = none)]
        pub fn enableMultipleThreads(&self);

        #[deprecated = "Use NSXPCConnection instead"]
        #[unsafe(method(multipleThreadsEnabled))]
        #[unsafe(method_family = none)]
        pub fn multipleThreadsEnabled(&self) -> bool;

        #[cfg(feature = "NSRunLoop")]
        /// # Safety
        ///
        /// `runloop` possibly has additional threading requirements.
        #[deprecated = "Use NSXPCConnection instead"]
        #[unsafe(method(addRunLoop:))]
        #[unsafe(method_family = none)]
        pub unsafe fn addRunLoop(&self, runloop: &NSRunLoop);

        #[cfg(feature = "NSRunLoop")]
        /// # Safety
        ///
        /// `runloop` possibly has additional threading requirements.
        #[deprecated = "Use NSXPCConnection instead"]
        #[unsafe(method(removeRunLoop:))]
        #[unsafe(method_family = none)]
        pub unsafe fn removeRunLoop(&self, runloop: &NSRunLoop);

        #[deprecated = "Use NSXPCConnection instead"]
        #[unsafe(method(runInNewThread))]
        #[unsafe(method_family = none)]
        pub fn runInNewThread(&self);

        #[cfg(feature = "NSArray")]
        #[deprecated = "Use NSXPCConnection instead"]
        #[unsafe(method(remoteObjects))]
        #[unsafe(method_family = none)]
        pub fn remoteObjects(&self) -> Retained<NSArray>;

        #[cfg(feature = "NSArray")]
        #[deprecated = "Use NSXPCConnection instead"]
        #[unsafe(method(localObjects))]
        #[unsafe(method_family = none)]
        pub fn localObjects(&self) -> Retained<NSArray>;

        #[cfg(feature = "NSArray")]
        /// # Safety
        ///
        /// `components` generic should be of the correct type.
        #[unsafe(method(dispatchWithComponents:))]
        #[unsafe(method_family = none)]
        pub unsafe fn dispatchWithComponents(&self, components: &NSArray);
    );
}

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

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

impl DefaultRetained for NSConnection {
    #[inline]
    fn default_retained() -> Retained<Self> {
        Self::new()
    }
}

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

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

extern_protocol!(
    /// [Apple's documentation](https://developer.apple.com/documentation/foundation/nsconnectiondelegate?language=objc)
    #[deprecated = "Use NSXPCConnection instead"]
    pub unsafe trait NSConnectionDelegate: NSObjectProtocol {
        #[deprecated = "Use NSXPCConnection instead"]
        #[optional]
        #[unsafe(method(makeNewConnection:sender:))]
        #[unsafe(method_family = none)]
        fn makeNewConnection_sender(&self, conn: &NSConnection, ancestor: &NSConnection) -> bool;

        #[deprecated = "Use NSXPCConnection instead"]
        #[optional]
        #[unsafe(method(connection:shouldMakeNewConnection:))]
        #[unsafe(method_family = none)]
        fn connection_shouldMakeNewConnection(
            &self,
            ancestor: &NSConnection,
            conn: &NSConnection,
        ) -> bool;

        #[cfg(all(feature = "NSArray", feature = "NSData"))]
        /// # Safety
        ///
        /// `components` generic should be of the correct type.
        #[deprecated = "Use NSXPCConnection instead"]
        #[optional]
        #[unsafe(method(authenticationDataForComponents:))]
        #[unsafe(method_family = none)]
        unsafe fn authenticationDataForComponents(&self, components: &NSArray) -> Retained<NSData>;

        #[cfg(all(feature = "NSArray", feature = "NSData"))]
        /// # Safety
        ///
        /// `components` generic should be of the correct type.
        #[deprecated = "Use NSXPCConnection instead"]
        #[optional]
        #[unsafe(method(authenticateComponents:withData:))]
        #[unsafe(method_family = none)]
        unsafe fn authenticateComponents_withData(
            &self,
            components: &NSArray,
            signature: &NSData,
        ) -> bool;

        #[deprecated = "Use NSXPCConnection instead"]
        #[optional]
        #[unsafe(method(createConversationForConnection:))]
        #[unsafe(method_family = none)]
        fn createConversationForConnection(&self, conn: &NSConnection) -> Retained<AnyObject>;

        #[deprecated = "Use NSXPCConnection instead"]
        #[optional]
        #[unsafe(method(connection:handleRequest:))]
        #[unsafe(method_family = none)]
        fn connection_handleRequest(
            &self,
            connection: &NSConnection,
            doreq: &NSDistantObjectRequest,
        ) -> bool;
    }
);

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

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

extern_class!(
    /// [Apple's documentation](https://developer.apple.com/documentation/foundation/nsdistantobjectrequest?language=objc)
    #[unsafe(super(NSObject))]
    #[derive(Debug, PartialEq, Eq, Hash)]
    #[deprecated = "Use NSXPCConnection instead"]
    pub struct NSDistantObjectRequest;
);

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

impl NSDistantObjectRequest {
    extern_methods!(
        #[cfg(feature = "NSInvocation")]
        #[deprecated = "Use NSXPCConnection instead"]
        #[unsafe(method(invocation))]
        #[unsafe(method_family = none)]
        pub unsafe fn invocation(&self) -> Retained<NSInvocation>;

        #[deprecated = "Use NSXPCConnection instead"]
        #[unsafe(method(connection))]
        #[unsafe(method_family = none)]
        pub fn connection(&self) -> Retained<NSConnection>;

        #[deprecated = "Use NSXPCConnection instead"]
        #[unsafe(method(conversation))]
        #[unsafe(method_family = none)]
        pub fn conversation(&self) -> Retained<AnyObject>;

        #[cfg(feature = "NSException")]
        #[deprecated = "Use NSXPCConnection instead"]
        #[unsafe(method(replyWithException:))]
        #[unsafe(method_family = none)]
        pub fn replyWithException(&self, exception: Option<&NSException>);
    );
}

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

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

impl DefaultRetained for NSDistantObjectRequest {
    #[inline]
    fn default_retained() -> Retained<Self> {
        Self::new()
    }
}
