//! 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;
);

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 unsafe fn statistics(&self) -> Retained<NSDictionary<NSString, NSNumber>>;

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

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

        #[cfg(feature = "NSString")]
        #[deprecated = "Use NSXPCConnection instead"]
        #[unsafe(method(connectionWithRegisteredName:host:))]
        #[unsafe(method_family = none)]
        pub unsafe 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 unsafe 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 unsafe 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 unsafe fn rootProxyForConnectionWithRegisteredName_host_usingNameServer(
            name: &NSString,
            host_name: Option<&NSString>,
            server: &NSPortNameServer,
        ) -> Option<Retained<NSDistantObject>>;

        #[cfg(all(feature = "NSPortNameServer", feature = "NSString"))]
        #[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")]
        #[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 unsafe fn requestTimeout(&self) -> NSTimeInterval;

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

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

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

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

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

        #[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].
        #[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 unsafe fn independentConversationQueueing(&self) -> bool;

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

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

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

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

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

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

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

        #[cfg(feature = "NSString")]
        #[deprecated = "Use NSXPCConnection instead"]
        #[unsafe(method(registerName:))]
        #[unsafe(method_family = none)]
        pub unsafe 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 unsafe 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 unsafe 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 unsafe fn currentConversation() -> Option<Retained<AnyObject>>;

        #[cfg(feature = "NSPort")]
        #[deprecated = "Use NSXPCConnection instead"]
        #[unsafe(method(initWithReceivePort:sendPort:))]
        #[unsafe(method_family = init)]
        pub unsafe 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 unsafe fn sendPort(&self) -> Retained<NSPort>;

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

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

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

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

        #[cfg(feature = "NSRunLoop")]
        #[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 unsafe fn runInNewThread(&self);

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

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

        #[cfg(feature = "NSArray")]
        #[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 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/foundation/nsconnectionreplymode?language=objc)
    #[cfg(feature = "NSString")]
    pub static NSConnectionReplyMode: &'static NSString;
}

extern "C" {
    /// [Apple's documentation](https://developer.apple.com/documentation/foundation/nsconnectiondiddienotification?language=objc)
    #[cfg(feature = "NSString")]
    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)]
        unsafe fn makeNewConnection_sender(
            &self,
            conn: &NSConnection,
            ancestor: &NSConnection,
        ) -> bool;

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

        #[cfg(all(feature = "NSArray", feature = "NSData"))]
        #[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"))]
        #[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)]
        unsafe fn createConversationForConnection(
            &self,
            conn: &NSConnection,
        ) -> Retained<AnyObject>;

        #[deprecated = "Use NSXPCConnection instead"]
        #[optional]
        #[unsafe(method(connection:handleRequest:))]
        #[unsafe(method_family = none)]
        unsafe 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")]
    pub static NSFailedAuthenticationException: &'static NSString;
}

extern "C" {
    /// [Apple's documentation](https://developer.apple.com/documentation/foundation/nsconnectiondidinitializenotification?language=objc)
    #[cfg(feature = "NSString")]
    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;
);

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 unsafe fn connection(&self) -> Retained<NSConnection>;

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

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

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