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

use crate::*;

extern_class!(
    #[derive(Debug, PartialEq, Eq, Hash)]
    pub struct NSScriptSuiteRegistry;

    unsafe impl ClassType for NSScriptSuiteRegistry {
        type Super = NSObject;
        type Mutability = InteriorMutable;
    }
);

unsafe impl NSObjectProtocol for NSScriptSuiteRegistry {}

extern_methods!(
    unsafe impl NSScriptSuiteRegistry {
        #[method_id(@__retain_semantics Other sharedScriptSuiteRegistry)]
        pub unsafe fn sharedScriptSuiteRegistry() -> Retained<NSScriptSuiteRegistry>;

        #[method(setSharedScriptSuiteRegistry:)]
        pub unsafe fn setSharedScriptSuiteRegistry(registry: &NSScriptSuiteRegistry);

        #[cfg(feature = "NSBundle")]
        #[method(loadSuitesFromBundle:)]
        pub unsafe fn loadSuitesFromBundle(&self, bundle: &NSBundle);

        #[cfg(all(feature = "NSBundle", feature = "NSDictionary"))]
        #[method(loadSuiteWithDictionary:fromBundle:)]
        pub unsafe fn loadSuiteWithDictionary_fromBundle(
            &self,
            suite_declaration: &NSDictionary,
            bundle: &NSBundle,
        );

        #[cfg(all(feature = "NSClassDescription", feature = "NSScriptClassDescription"))]
        #[method(registerClassDescription:)]
        pub unsafe fn registerClassDescription(&self, class_description: &NSScriptClassDescription);

        #[cfg(feature = "NSScriptCommandDescription")]
        #[method(registerCommandDescription:)]
        pub unsafe fn registerCommandDescription(
            &self,
            command_description: &NSScriptCommandDescription,
        );

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

        #[cfg(feature = "NSString")]
        #[method(appleEventCodeForSuite:)]
        pub unsafe fn appleEventCodeForSuite(&self, suite_name: &NSString) -> FourCharCode;

        #[cfg(all(feature = "NSBundle", feature = "NSString"))]
        #[method_id(@__retain_semantics Other bundleForSuite:)]
        pub unsafe fn bundleForSuite(&self, suite_name: &NSString) -> Option<Retained<NSBundle>>;

        #[cfg(all(
            feature = "NSClassDescription",
            feature = "NSDictionary",
            feature = "NSScriptClassDescription",
            feature = "NSString"
        ))]
        #[method_id(@__retain_semantics Other classDescriptionsInSuite:)]
        pub unsafe fn classDescriptionsInSuite(
            &self,
            suite_name: &NSString,
        ) -> Option<Retained<NSDictionary<NSString, NSScriptClassDescription>>>;

        #[cfg(all(
            feature = "NSDictionary",
            feature = "NSScriptCommandDescription",
            feature = "NSString"
        ))]
        #[method_id(@__retain_semantics Other commandDescriptionsInSuite:)]
        pub unsafe fn commandDescriptionsInSuite(
            &self,
            suite_name: &NSString,
        ) -> Option<Retained<NSDictionary<NSString, NSScriptCommandDescription>>>;

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

        #[cfg(all(feature = "NSClassDescription", feature = "NSScriptClassDescription"))]
        #[method_id(@__retain_semantics Other classDescriptionWithAppleEventCode:)]
        pub unsafe fn classDescriptionWithAppleEventCode(
            &self,
            apple_event_code: FourCharCode,
        ) -> Option<Retained<NSScriptClassDescription>>;

        #[cfg(feature = "NSScriptCommandDescription")]
        #[method_id(@__retain_semantics Other commandDescriptionWithAppleEventClass:andAppleEventCode:)]
        pub unsafe fn commandDescriptionWithAppleEventClass_andAppleEventCode(
            &self,
            apple_event_class_code: FourCharCode,
            apple_event_id_code: FourCharCode,
        ) -> Option<Retained<NSScriptCommandDescription>>;

        #[cfg(all(feature = "NSData", feature = "NSString"))]
        #[method_id(@__retain_semantics Other aeteResource:)]
        pub unsafe fn aeteResource(&self, language_name: &NSString) -> Option<Retained<NSData>>;
    }
);

extern_methods!(
    /// Methods declared on superclass `NSObject`
    unsafe impl NSScriptSuiteRegistry {
        #[method_id(@__retain_semantics Init init)]
        pub unsafe fn init(this: Allocated<Self>) -> Retained<Self>;

        #[method_id(@__retain_semantics New new)]
        pub unsafe fn new() -> Retained<Self>;
    }
);
