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

/// [Apple's documentation](https://developer.apple.com/documentation/webkit/dom_element_node?language=objc)
#[deprecated]
pub const DOM_ELEMENT_NODE: c_uint = 1;
/// [Apple's documentation](https://developer.apple.com/documentation/webkit/dom_attribute_node?language=objc)
#[deprecated]
pub const DOM_ATTRIBUTE_NODE: c_uint = 2;
/// [Apple's documentation](https://developer.apple.com/documentation/webkit/dom_text_node?language=objc)
#[deprecated]
pub const DOM_TEXT_NODE: c_uint = 3;
/// [Apple's documentation](https://developer.apple.com/documentation/webkit/dom_cdata_section_node?language=objc)
#[deprecated]
pub const DOM_CDATA_SECTION_NODE: c_uint = 4;
/// [Apple's documentation](https://developer.apple.com/documentation/webkit/dom_entity_reference_node?language=objc)
#[deprecated]
pub const DOM_ENTITY_REFERENCE_NODE: c_uint = 5;
/// [Apple's documentation](https://developer.apple.com/documentation/webkit/dom_entity_node?language=objc)
#[deprecated]
pub const DOM_ENTITY_NODE: c_uint = 6;
/// [Apple's documentation](https://developer.apple.com/documentation/webkit/dom_processing_instruction_node?language=objc)
#[deprecated]
pub const DOM_PROCESSING_INSTRUCTION_NODE: c_uint = 7;
/// [Apple's documentation](https://developer.apple.com/documentation/webkit/dom_comment_node?language=objc)
#[deprecated]
pub const DOM_COMMENT_NODE: c_uint = 8;
/// [Apple's documentation](https://developer.apple.com/documentation/webkit/dom_document_node?language=objc)
#[deprecated]
pub const DOM_DOCUMENT_NODE: c_uint = 9;
/// [Apple's documentation](https://developer.apple.com/documentation/webkit/dom_document_type_node?language=objc)
#[deprecated]
pub const DOM_DOCUMENT_TYPE_NODE: c_uint = 10;
/// [Apple's documentation](https://developer.apple.com/documentation/webkit/dom_document_fragment_node?language=objc)
#[deprecated]
pub const DOM_DOCUMENT_FRAGMENT_NODE: c_uint = 11;
/// [Apple's documentation](https://developer.apple.com/documentation/webkit/dom_notation_node?language=objc)
#[deprecated]
pub const DOM_NOTATION_NODE: c_uint = 12;
/// [Apple's documentation](https://developer.apple.com/documentation/webkit/dom_document_position_disconnected?language=objc)
#[deprecated]
pub const DOM_DOCUMENT_POSITION_DISCONNECTED: c_uint = 0x01;
/// [Apple's documentation](https://developer.apple.com/documentation/webkit/dom_document_position_preceding?language=objc)
#[deprecated]
pub const DOM_DOCUMENT_POSITION_PRECEDING: c_uint = 0x02;
/// [Apple's documentation](https://developer.apple.com/documentation/webkit/dom_document_position_following?language=objc)
#[deprecated]
pub const DOM_DOCUMENT_POSITION_FOLLOWING: c_uint = 0x04;
/// [Apple's documentation](https://developer.apple.com/documentation/webkit/dom_document_position_contains?language=objc)
#[deprecated]
pub const DOM_DOCUMENT_POSITION_CONTAINS: c_uint = 0x08;
/// [Apple's documentation](https://developer.apple.com/documentation/webkit/dom_document_position_contained_by?language=objc)
#[deprecated]
pub const DOM_DOCUMENT_POSITION_CONTAINED_BY: c_uint = 0x10;
/// [Apple's documentation](https://developer.apple.com/documentation/webkit/dom_document_position_implementation_specific?language=objc)
#[deprecated]
pub const DOM_DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC: c_uint = 0x20;

extern_class!(
    /// [Apple's documentation](https://developer.apple.com/documentation/webkit/domnode?language=objc)
    #[unsafe(super(DOMObject, WebScriptObject, NSObject))]
    #[derive(Debug, PartialEq, Eq, Hash)]
    #[cfg(all(feature = "DOMObject", feature = "WebScriptObject"))]
    #[deprecated]
    pub struct DOMNode;
);

#[cfg(all(
    feature = "DOMEventTarget",
    feature = "DOMObject",
    feature = "WebScriptObject"
))]
extern_conformance!(
    unsafe impl DOMEventTarget for DOMNode {}
);

#[cfg(all(feature = "DOMObject", feature = "WebScriptObject"))]
extern_conformance!(
    unsafe impl NSCopying for DOMNode {}
);

#[cfg(all(feature = "DOMObject", feature = "WebScriptObject"))]
unsafe impl CopyingHelper for DOMNode {
    type Result = Self;
}

#[cfg(all(feature = "DOMObject", feature = "WebScriptObject"))]
extern_conformance!(
    unsafe impl NSObjectProtocol for DOMNode {}
);

#[cfg(all(feature = "DOMObject", feature = "WebScriptObject"))]
impl DOMNode {
    extern_methods!(
        #[deprecated]
        #[unsafe(method(nodeName))]
        #[unsafe(method_family = none)]
        pub unsafe fn nodeName(&self) -> Retained<NSString>;

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

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

        #[deprecated]
        #[unsafe(method(nodeType))]
        #[unsafe(method_family = none)]
        pub unsafe fn nodeType(&self) -> c_ushort;

        #[deprecated]
        #[unsafe(method(parentNode))]
        #[unsafe(method_family = none)]
        pub unsafe fn parentNode(&self) -> Option<Retained<DOMNode>>;

        #[cfg(feature = "DOMNodeList")]
        #[deprecated]
        #[unsafe(method(childNodes))]
        #[unsafe(method_family = none)]
        pub unsafe fn childNodes(&self) -> Option<Retained<DOMNodeList>>;

        #[deprecated]
        #[unsafe(method(firstChild))]
        #[unsafe(method_family = none)]
        pub unsafe fn firstChild(&self) -> Option<Retained<DOMNode>>;

        #[deprecated]
        #[unsafe(method(lastChild))]
        #[unsafe(method_family = none)]
        pub unsafe fn lastChild(&self) -> Option<Retained<DOMNode>>;

        #[deprecated]
        #[unsafe(method(previousSibling))]
        #[unsafe(method_family = none)]
        pub unsafe fn previousSibling(&self) -> Option<Retained<DOMNode>>;

        #[deprecated]
        #[unsafe(method(nextSibling))]
        #[unsafe(method_family = none)]
        pub unsafe fn nextSibling(&self) -> Option<Retained<DOMNode>>;

        #[cfg(feature = "DOMDocument")]
        #[deprecated]
        #[unsafe(method(ownerDocument))]
        #[unsafe(method_family = none)]
        pub unsafe fn ownerDocument(&self) -> Option<Retained<DOMDocument>>;

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

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

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

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

        #[cfg(feature = "DOMNamedNodeMap")]
        #[deprecated]
        #[unsafe(method(attributes))]
        #[unsafe(method_family = none)]
        pub unsafe fn attributes(&self) -> Option<Retained<DOMNamedNodeMap>>;

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

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

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

        #[cfg(feature = "DOMElement")]
        #[unsafe(method(parentElement))]
        #[unsafe(method_family = none)]
        pub unsafe fn parentElement(&self) -> Option<Retained<DOMElement>>;

        #[unsafe(method(isContentEditable))]
        #[unsafe(method_family = none)]
        pub unsafe fn isContentEditable(&self) -> bool;

        /// # Safety
        ///
        /// - `new_child` might not allow `None`.
        /// - `ref_child` might not allow `None`.
        #[unsafe(method(insertBefore:refChild:))]
        #[unsafe(method_family = none)]
        pub unsafe fn insertBefore_refChild(
            &self,
            new_child: Option<&DOMNode>,
            ref_child: Option<&DOMNode>,
        ) -> Option<Retained<DOMNode>>;

        /// # Safety
        ///
        /// - `new_child` might not allow `None`.
        /// - `old_child` might not allow `None`.
        #[unsafe(method(replaceChild:oldChild:))]
        #[unsafe(method_family = none)]
        pub unsafe fn replaceChild_oldChild(
            &self,
            new_child: Option<&DOMNode>,
            old_child: Option<&DOMNode>,
        ) -> Option<Retained<DOMNode>>;

        /// # Safety
        ///
        /// `old_child` might not allow `None`.
        #[deprecated]
        #[unsafe(method(removeChild:))]
        #[unsafe(method_family = none)]
        pub unsafe fn removeChild(&self, old_child: Option<&DOMNode>) -> Option<Retained<DOMNode>>;

        /// # Safety
        ///
        /// `new_child` might not allow `None`.
        #[deprecated]
        #[unsafe(method(appendChild:))]
        #[unsafe(method_family = none)]
        pub unsafe fn appendChild(&self, new_child: Option<&DOMNode>) -> Option<Retained<DOMNode>>;

        #[deprecated]
        #[unsafe(method(hasChildNodes))]
        #[unsafe(method_family = none)]
        pub unsafe fn hasChildNodes(&self) -> bool;

        #[deprecated]
        #[unsafe(method(cloneNode:))]
        #[unsafe(method_family = none)]
        pub unsafe fn cloneNode(&self, deep: bool) -> Option<Retained<DOMNode>>;

        #[deprecated]
        #[unsafe(method(normalize))]
        #[unsafe(method_family = none)]
        pub unsafe fn normalize(&self);

        /// # Safety
        ///
        /// - `feature` might not allow `None`.
        /// - `version` might not allow `None`.
        #[unsafe(method(isSupported:version:))]
        #[unsafe(method_family = none)]
        pub unsafe fn isSupported_version(
            &self,
            feature: Option<&NSString>,
            version: Option<&NSString>,
        ) -> bool;

        #[deprecated]
        #[unsafe(method(hasAttributes))]
        #[unsafe(method_family = none)]
        pub unsafe fn hasAttributes(&self) -> bool;

        /// # Safety
        ///
        /// `other` might not allow `None`.
        #[unsafe(method(isSameNode:))]
        #[unsafe(method_family = none)]
        pub unsafe fn isSameNode(&self, other: Option<&DOMNode>) -> bool;

        /// # Safety
        ///
        /// `other` might not allow `None`.
        #[unsafe(method(isEqualNode:))]
        #[unsafe(method_family = none)]
        pub unsafe fn isEqualNode(&self, other: Option<&DOMNode>) -> bool;

        /// # Safety
        ///
        /// `namespace_uri` might not allow `None`.
        #[unsafe(method(lookupPrefix:))]
        #[unsafe(method_family = none)]
        pub unsafe fn lookupPrefix(
            &self,
            namespace_uri: Option<&NSString>,
        ) -> Option<Retained<NSString>>;

        /// # Safety
        ///
        /// `prefix` might not allow `None`.
        #[unsafe(method(lookupNamespaceURI:))]
        #[unsafe(method_family = none)]
        pub unsafe fn lookupNamespaceURI(
            &self,
            prefix: Option<&NSString>,
        ) -> Option<Retained<NSString>>;

        /// # Safety
        ///
        /// `namespace_uri` might not allow `None`.
        #[unsafe(method(isDefaultNamespace:))]
        #[unsafe(method_family = none)]
        pub unsafe fn isDefaultNamespace(&self, namespace_uri: Option<&NSString>) -> bool;

        /// # Safety
        ///
        /// `other` might not allow `None`.
        #[unsafe(method(compareDocumentPosition:))]
        #[unsafe(method_family = none)]
        pub unsafe fn compareDocumentPosition(&self, other: Option<&DOMNode>) -> c_ushort;

        /// # Safety
        ///
        /// `other` might not allow `None`.
        #[unsafe(method(contains:))]
        #[unsafe(method_family = none)]
        pub unsafe fn contains(&self, other: Option<&DOMNode>) -> bool;
    );
}

/// Methods declared on superclass `DOMObject`.
#[cfg(all(feature = "DOMObject", feature = "WebScriptObject"))]
impl DOMNode {
    extern_methods!(
        #[deprecated]
        #[unsafe(method(init))]
        #[unsafe(method_family = init)]
        pub unsafe fn init(this: Allocated<Self>) -> Retained<Self>;
    );
}

/// Methods declared on superclass `NSObject`.
#[cfg(all(feature = "DOMObject", feature = "WebScriptObject"))]
impl DOMNode {
    extern_methods!(
        #[unsafe(method(new))]
        #[unsafe(method_family = new)]
        pub unsafe fn new() -> Retained<Self>;
    );
}

/// DOMNodeDeprecated.
#[deprecated]
#[cfg(all(feature = "DOMObject", feature = "WebScriptObject"))]
impl DOMNode {
    extern_methods!(
        /// # Safety
        ///
        /// - `new_child` might not allow `None`.
        /// - `ref_child` might not allow `None`.
        #[deprecated]
        #[unsafe(method(insertBefore::))]
        #[unsafe(method_family = none)]
        pub unsafe fn insertBefore(
            &self,
            new_child: Option<&DOMNode>,
            ref_child: Option<&DOMNode>,
        ) -> Option<Retained<DOMNode>>;

        /// # Safety
        ///
        /// - `new_child` might not allow `None`.
        /// - `old_child` might not allow `None`.
        #[deprecated]
        #[unsafe(method(replaceChild::))]
        #[unsafe(method_family = none)]
        pub unsafe fn replaceChild(
            &self,
            new_child: Option<&DOMNode>,
            old_child: Option<&DOMNode>,
        ) -> Option<Retained<DOMNode>>;

        /// # Safety
        ///
        /// - `feature` might not allow `None`.
        /// - `version` might not allow `None`.
        #[deprecated]
        #[unsafe(method(isSupported::))]
        #[unsafe(method_family = none)]
        pub unsafe fn isSupported(
            &self,
            feature: Option<&NSString>,
            version: Option<&NSString>,
        ) -> bool;
    );
}
