//! This file has been automatically generated by `objc2`'s `header-translator`.
//! DO NOT EDIT
use objc2::__framework_prelude::*;

use crate::*;

// NS_ENUM
#[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct NSXMLDocumentContentKind(pub NSUInteger);
impl NSXMLDocumentContentKind {
    pub const NSXMLDocumentXMLKind: Self = Self(0);
    pub const NSXMLDocumentXHTMLKind: Self = Self(1);
    pub const NSXMLDocumentHTMLKind: Self = Self(2);
    pub const NSXMLDocumentTextKind: Self = Self(3);
}

unsafe impl Encode for NSXMLDocumentContentKind {
    const ENCODING: Encoding = NSUInteger::ENCODING;
}

unsafe impl RefEncode for NSXMLDocumentContentKind {
    const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}

extern_class!(
    #[derive(Debug, PartialEq, Eq, Hash)]
    #[cfg(feature = "NSXMLNode")]
    pub struct NSXMLDocument;

    #[cfg(feature = "NSXMLNode")]
    unsafe impl ClassType for NSXMLDocument {
        #[inherits(NSObject)]
        type Super = NSXMLNode;
        type Mutability = InteriorMutable;
    }
);

#[cfg(all(feature = "NSObject", feature = "NSXMLNode"))]
unsafe impl NSCopying for NSXMLDocument {}

#[cfg(feature = "NSXMLNode")]
unsafe impl NSObjectProtocol for NSXMLDocument {}

extern_methods!(
    #[cfg(feature = "NSXMLNode")]
    unsafe impl NSXMLDocument {
        #[method_id(@__retain_semantics Init init)]
        pub unsafe fn init(this: Allocated<Self>) -> Retained<Self>;

        #[cfg(all(
            feature = "NSError",
            feature = "NSString",
            feature = "NSXMLNodeOptions"
        ))]
        #[method_id(@__retain_semantics Init initWithXMLString:options:error:_)]
        pub unsafe fn initWithXMLString_options_error(
            this: Allocated<Self>,
            string: &NSString,
            mask: NSXMLNodeOptions,
        ) -> Result<Retained<Self>, Retained<NSError>>;

        #[cfg(all(feature = "NSError", feature = "NSURL", feature = "NSXMLNodeOptions"))]
        #[method_id(@__retain_semantics Init initWithContentsOfURL:options:error:_)]
        pub unsafe fn initWithContentsOfURL_options_error(
            this: Allocated<Self>,
            url: &NSURL,
            mask: NSXMLNodeOptions,
        ) -> Result<Retained<Self>, Retained<NSError>>;

        #[cfg(all(feature = "NSData", feature = "NSError", feature = "NSXMLNodeOptions"))]
        #[method_id(@__retain_semantics Init initWithData:options:error:_)]
        pub unsafe fn initWithData_options_error(
            this: Allocated<Self>,
            data: &NSData,
            mask: NSXMLNodeOptions,
        ) -> Result<Retained<Self>, Retained<NSError>>;

        #[cfg(feature = "NSXMLElement")]
        #[method_id(@__retain_semantics Init initWithRootElement:)]
        pub unsafe fn initWithRootElement(
            this: Allocated<Self>,
            element: Option<&NSXMLElement>,
        ) -> Retained<Self>;

        #[method(replacementClassForClass:)]
        pub unsafe fn replacementClassForClass(cls: &AnyClass) -> &'static AnyClass;

        #[cfg(feature = "NSString")]
        #[method_id(@__retain_semantics Other characterEncoding)]
        pub unsafe fn characterEncoding(&self) -> Option<Retained<NSString>>;

        #[cfg(feature = "NSString")]
        #[method(setCharacterEncoding:)]
        pub unsafe fn setCharacterEncoding(&self, character_encoding: Option<&NSString>);

        #[cfg(feature = "NSString")]
        #[method_id(@__retain_semantics Other version)]
        pub unsafe fn version(&self) -> Option<Retained<NSString>>;

        #[cfg(feature = "NSString")]
        #[method(setVersion:)]
        pub unsafe fn setVersion(&self, version: Option<&NSString>);

        #[method(isStandalone)]
        pub unsafe fn isStandalone(&self) -> bool;

        #[method(setStandalone:)]
        pub unsafe fn setStandalone(&self, standalone: bool);

        #[method(documentContentKind)]
        pub unsafe fn documentContentKind(&self) -> NSXMLDocumentContentKind;

        #[method(setDocumentContentKind:)]
        pub unsafe fn setDocumentContentKind(
            &self,
            document_content_kind: NSXMLDocumentContentKind,
        );

        #[cfg(feature = "NSString")]
        #[method_id(@__retain_semantics Other MIMEType)]
        pub unsafe fn MIMEType(&self) -> Option<Retained<NSString>>;

        #[cfg(feature = "NSString")]
        #[method(setMIMEType:)]
        pub unsafe fn setMIMEType(&self, mime_type: Option<&NSString>);

        #[cfg(feature = "NSXMLDTD")]
        #[method_id(@__retain_semantics Other DTD)]
        pub unsafe fn DTD(&self) -> Option<Retained<NSXMLDTD>>;

        #[cfg(feature = "NSXMLDTD")]
        #[method(setDTD:)]
        pub unsafe fn setDTD(&self, dtd: Option<&NSXMLDTD>);

        #[cfg(feature = "NSXMLElement")]
        #[method(setRootElement:)]
        pub unsafe fn setRootElement(&self, root: &NSXMLElement);

        #[cfg(feature = "NSXMLElement")]
        #[method_id(@__retain_semantics Other rootElement)]
        pub unsafe fn rootElement(&self) -> Option<Retained<NSXMLElement>>;

        #[method(insertChild:atIndex:)]
        pub unsafe fn insertChild_atIndex(&self, child: &NSXMLNode, index: NSUInteger);

        #[cfg(feature = "NSArray")]
        #[method(insertChildren:atIndex:)]
        pub unsafe fn insertChildren_atIndex(
            &self,
            children: &NSArray<NSXMLNode>,
            index: NSUInteger,
        );

        #[method(removeChildAtIndex:)]
        pub unsafe fn removeChildAtIndex(&self, index: NSUInteger);

        #[cfg(feature = "NSArray")]
        #[method(setChildren:)]
        pub unsafe fn setChildren(&self, children: Option<&NSArray<NSXMLNode>>);

        #[method(addChild:)]
        pub unsafe fn addChild(&self, child: &NSXMLNode);

        #[method(replaceChildAtIndex:withNode:)]
        pub unsafe fn replaceChildAtIndex_withNode(&self, index: NSUInteger, node: &NSXMLNode);

        #[cfg(feature = "NSData")]
        #[method_id(@__retain_semantics Other XMLData)]
        pub unsafe fn XMLData(&self) -> Retained<NSData>;

        #[cfg(all(feature = "NSData", feature = "NSXMLNodeOptions"))]
        #[method_id(@__retain_semantics Other XMLDataWithOptions:)]
        pub unsafe fn XMLDataWithOptions(&self, options: NSXMLNodeOptions) -> Retained<NSData>;

        #[cfg(all(
            feature = "NSData",
            feature = "NSDictionary",
            feature = "NSError",
            feature = "NSString"
        ))]
        #[method_id(@__retain_semantics Other objectByApplyingXSLT:arguments:error:_)]
        pub unsafe fn objectByApplyingXSLT_arguments_error(
            &self,
            xslt: &NSData,
            arguments: Option<&NSDictionary<NSString, NSString>>,
        ) -> Result<Retained<AnyObject>, Retained<NSError>>;

        #[cfg(all(feature = "NSDictionary", feature = "NSError", feature = "NSString"))]
        #[method_id(@__retain_semantics Other objectByApplyingXSLTString:arguments:error:_)]
        pub unsafe fn objectByApplyingXSLTString_arguments_error(
            &self,
            xslt: &NSString,
            arguments: Option<&NSDictionary<NSString, NSString>>,
        ) -> Result<Retained<AnyObject>, Retained<NSError>>;

        #[cfg(all(
            feature = "NSDictionary",
            feature = "NSError",
            feature = "NSString",
            feature = "NSURL"
        ))]
        #[method_id(@__retain_semantics Other objectByApplyingXSLTAtURL:arguments:error:_)]
        pub unsafe fn objectByApplyingXSLTAtURL_arguments_error(
            &self,
            xslt_url: &NSURL,
            argument: Option<&NSDictionary<NSString, NSString>>,
        ) -> Result<Retained<AnyObject>, Retained<NSError>>;

        #[cfg(feature = "NSError")]
        #[method(validateAndReturnError:_)]
        pub unsafe fn validateAndReturnError(&self) -> Result<(), Retained<NSError>>;
    }
);

extern_methods!(
    /// Methods declared on superclass `NSXMLNode`
    #[cfg(feature = "NSXMLNode")]
    unsafe impl NSXMLDocument {
        #[method_id(@__retain_semantics Init initWithKind:)]
        pub unsafe fn initWithKind(this: Allocated<Self>, kind: NSXMLNodeKind) -> Retained<Self>;

        #[cfg(feature = "NSXMLNodeOptions")]
        #[method_id(@__retain_semantics Init initWithKind:options:)]
        pub unsafe fn initWithKind_options(
            this: Allocated<Self>,
            kind: NSXMLNodeKind,
            options: NSXMLNodeOptions,
        ) -> Retained<Self>;
    }
);

extern_methods!(
    /// Methods declared on superclass `NSObject`
    #[cfg(feature = "NSXMLNode")]
    unsafe impl NSXMLDocument {
        #[method_id(@__retain_semantics New new)]
        pub unsafe fn new() -> Retained<Self>;
    }
);
