//! 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/nsunitconverter?language=objc)
    #[unsafe(super(NSObject))]
    #[derive(Debug, PartialEq, Eq, Hash)]
    pub struct NSUnitConverter;
);

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

impl NSUnitConverter {
    extern_methods!(
        #[unsafe(method(baseUnitValueFromValue:))]
        #[unsafe(method_family = none)]
        pub fn baseUnitValueFromValue(&self, value: c_double) -> c_double;

        #[unsafe(method(valueFromBaseUnitValue:))]
        #[unsafe(method_family = none)]
        pub fn valueFromBaseUnitValue(&self, base_unit_value: c_double) -> c_double;
    );
}

/// Methods declared on superclass `NSObject`.
impl NSUnitConverter {
    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 NSUnitConverter {
    #[inline]
    fn default_retained() -> Retained<Self> {
        Self::new()
    }
}

extern_class!(
    /// [Apple's documentation](https://developer.apple.com/documentation/foundation/nsunitconverterlinear?language=objc)
    #[unsafe(super(NSUnitConverter, NSObject))]
    #[derive(Debug, PartialEq, Eq, Hash)]
    pub struct NSUnitConverterLinear;
);

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSCoding for NSUnitConverterLinear {}
);

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

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSSecureCoding for NSUnitConverterLinear {}
);

impl NSUnitConverterLinear {
    extern_methods!(
        #[unsafe(method(coefficient))]
        #[unsafe(method_family = none)]
        pub fn coefficient(&self) -> c_double;

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

        #[unsafe(method(initWithCoefficient:))]
        #[unsafe(method_family = init)]
        pub fn initWithCoefficient(this: Allocated<Self>, coefficient: c_double) -> Retained<Self>;

        #[unsafe(method(initWithCoefficient:constant:))]
        #[unsafe(method_family = init)]
        pub fn initWithCoefficient_constant(
            this: Allocated<Self>,
            coefficient: c_double,
            constant: c_double,
        ) -> Retained<Self>;
    );
}

/// Methods declared on superclass `NSObject`.
impl NSUnitConverterLinear {
    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 NSUnitConverterLinear {
    #[inline]
    fn default_retained() -> Retained<Self> {
        Self::new()
    }
}

extern_class!(
    /// [Apple's documentation](https://developer.apple.com/documentation/foundation/nsunit?language=objc)
    #[unsafe(super(NSObject))]
    #[derive(Debug, PartialEq, Eq, Hash)]
    pub struct NSUnit;
);

unsafe impl Send for NSUnit {}

unsafe impl Sync for NSUnit {}

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSCoding for NSUnit {}
);

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSCopying for NSUnit {}
);

#[cfg(feature = "NSObject")]
unsafe impl CopyingHelper for NSUnit {
    type Result = Self;
}

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

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSSecureCoding for NSUnit {}
);

impl NSUnit {
    extern_methods!(
        #[cfg(feature = "NSString")]
        #[unsafe(method(symbol))]
        #[unsafe(method_family = none)]
        pub fn symbol(&self) -> Retained<NSString>;

        #[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>;

        #[cfg(feature = "NSString")]
        #[unsafe(method(initWithSymbol:))]
        #[unsafe(method_family = init)]
        pub fn initWithSymbol(this: Allocated<Self>, symbol: &NSString) -> Retained<Self>;
    );
}

extern_class!(
    /// [Apple's documentation](https://developer.apple.com/documentation/foundation/nsdimension?language=objc)
    #[unsafe(super(NSUnit, NSObject))]
    #[derive(Debug, PartialEq, Eq, Hash)]
    pub struct NSDimension;
);

unsafe impl Send for NSDimension {}

unsafe impl Sync for NSDimension {}

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSCoding for NSDimension {}
);

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSCopying for NSDimension {}
);

#[cfg(feature = "NSObject")]
unsafe impl CopyingHelper for NSDimension {
    type Result = Self;
}

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

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSSecureCoding for NSDimension {}
);

impl NSDimension {
    extern_methods!(
        #[unsafe(method(converter))]
        #[unsafe(method_family = none)]
        pub fn converter(&self) -> Retained<NSUnitConverter>;

        #[cfg(feature = "NSString")]
        #[unsafe(method(initWithSymbol:converter:))]
        #[unsafe(method_family = init)]
        pub fn initWithSymbol_converter(
            this: Allocated<Self>,
            symbol: &NSString,
            converter: &NSUnitConverter,
        ) -> Retained<Self>;

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

/// Methods declared on superclass `NSUnit`.
impl NSDimension {
    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>;

        #[cfg(feature = "NSString")]
        #[unsafe(method(initWithSymbol:))]
        #[unsafe(method_family = init)]
        pub fn initWithSymbol(this: Allocated<Self>, symbol: &NSString) -> Retained<Self>;
    );
}

extern_class!(
    /// [Apple's documentation](https://developer.apple.com/documentation/foundation/nsunitacceleration?language=objc)
    #[unsafe(super(NSDimension, NSUnit, NSObject))]
    #[derive(Debug, PartialEq, Eq, Hash)]
    pub struct NSUnitAcceleration;
);

unsafe impl Send for NSUnitAcceleration {}

unsafe impl Sync for NSUnitAcceleration {}

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSCoding for NSUnitAcceleration {}
);

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSCopying for NSUnitAcceleration {}
);

#[cfg(feature = "NSObject")]
unsafe impl CopyingHelper for NSUnitAcceleration {
    type Result = Self;
}

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

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSSecureCoding for NSUnitAcceleration {}
);

impl NSUnitAcceleration {
    extern_methods!(
        #[unsafe(method(metersPerSecondSquared))]
        #[unsafe(method_family = none)]
        pub fn metersPerSecondSquared() -> Retained<NSUnitAcceleration>;

        #[unsafe(method(gravity))]
        #[unsafe(method_family = none)]
        pub fn gravity() -> Retained<NSUnitAcceleration>;
    );
}

/// Methods declared on superclass `NSDimension`.
impl NSUnitAcceleration {
    extern_methods!(
        #[cfg(feature = "NSString")]
        #[unsafe(method(initWithSymbol:converter:))]
        #[unsafe(method_family = init)]
        pub fn initWithSymbol_converter(
            this: Allocated<Self>,
            symbol: &NSString,
            converter: &NSUnitConverter,
        ) -> Retained<Self>;

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

/// Methods declared on superclass `NSUnit`.
impl NSUnitAcceleration {
    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>;

        #[cfg(feature = "NSString")]
        #[unsafe(method(initWithSymbol:))]
        #[unsafe(method_family = init)]
        pub fn initWithSymbol(this: Allocated<Self>, symbol: &NSString) -> Retained<Self>;
    );
}

extern_class!(
    /// [Apple's documentation](https://developer.apple.com/documentation/foundation/nsunitangle?language=objc)
    #[unsafe(super(NSDimension, NSUnit, NSObject))]
    #[derive(Debug, PartialEq, Eq, Hash)]
    pub struct NSUnitAngle;
);

unsafe impl Send for NSUnitAngle {}

unsafe impl Sync for NSUnitAngle {}

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSCoding for NSUnitAngle {}
);

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSCopying for NSUnitAngle {}
);

#[cfg(feature = "NSObject")]
unsafe impl CopyingHelper for NSUnitAngle {
    type Result = Self;
}

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

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSSecureCoding for NSUnitAngle {}
);

impl NSUnitAngle {
    extern_methods!(
        #[unsafe(method(degrees))]
        #[unsafe(method_family = none)]
        pub fn degrees() -> Retained<NSUnitAngle>;

        #[unsafe(method(arcMinutes))]
        #[unsafe(method_family = none)]
        pub fn arcMinutes() -> Retained<NSUnitAngle>;

        #[unsafe(method(arcSeconds))]
        #[unsafe(method_family = none)]
        pub fn arcSeconds() -> Retained<NSUnitAngle>;

        #[unsafe(method(radians))]
        #[unsafe(method_family = none)]
        pub fn radians() -> Retained<NSUnitAngle>;

        #[unsafe(method(gradians))]
        #[unsafe(method_family = none)]
        pub fn gradians() -> Retained<NSUnitAngle>;

        #[unsafe(method(revolutions))]
        #[unsafe(method_family = none)]
        pub fn revolutions() -> Retained<NSUnitAngle>;
    );
}

/// Methods declared on superclass `NSDimension`.
impl NSUnitAngle {
    extern_methods!(
        #[cfg(feature = "NSString")]
        #[unsafe(method(initWithSymbol:converter:))]
        #[unsafe(method_family = init)]
        pub fn initWithSymbol_converter(
            this: Allocated<Self>,
            symbol: &NSString,
            converter: &NSUnitConverter,
        ) -> Retained<Self>;

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

/// Methods declared on superclass `NSUnit`.
impl NSUnitAngle {
    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>;

        #[cfg(feature = "NSString")]
        #[unsafe(method(initWithSymbol:))]
        #[unsafe(method_family = init)]
        pub fn initWithSymbol(this: Allocated<Self>, symbol: &NSString) -> Retained<Self>;
    );
}

extern_class!(
    /// [Apple's documentation](https://developer.apple.com/documentation/foundation/nsunitarea?language=objc)
    #[unsafe(super(NSDimension, NSUnit, NSObject))]
    #[derive(Debug, PartialEq, Eq, Hash)]
    pub struct NSUnitArea;
);

unsafe impl Send for NSUnitArea {}

unsafe impl Sync for NSUnitArea {}

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSCoding for NSUnitArea {}
);

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSCopying for NSUnitArea {}
);

#[cfg(feature = "NSObject")]
unsafe impl CopyingHelper for NSUnitArea {
    type Result = Self;
}

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

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSSecureCoding for NSUnitArea {}
);

impl NSUnitArea {
    extern_methods!(
        #[unsafe(method(squareMegameters))]
        #[unsafe(method_family = none)]
        pub fn squareMegameters() -> Retained<NSUnitArea>;

        #[unsafe(method(squareKilometers))]
        #[unsafe(method_family = none)]
        pub fn squareKilometers() -> Retained<NSUnitArea>;

        #[unsafe(method(squareMeters))]
        #[unsafe(method_family = none)]
        pub fn squareMeters() -> Retained<NSUnitArea>;

        #[unsafe(method(squareCentimeters))]
        #[unsafe(method_family = none)]
        pub fn squareCentimeters() -> Retained<NSUnitArea>;

        #[unsafe(method(squareMillimeters))]
        #[unsafe(method_family = none)]
        pub fn squareMillimeters() -> Retained<NSUnitArea>;

        #[unsafe(method(squareMicrometers))]
        #[unsafe(method_family = none)]
        pub fn squareMicrometers() -> Retained<NSUnitArea>;

        #[unsafe(method(squareNanometers))]
        #[unsafe(method_family = none)]
        pub fn squareNanometers() -> Retained<NSUnitArea>;

        #[unsafe(method(squareInches))]
        #[unsafe(method_family = none)]
        pub fn squareInches() -> Retained<NSUnitArea>;

        #[unsafe(method(squareFeet))]
        #[unsafe(method_family = none)]
        pub fn squareFeet() -> Retained<NSUnitArea>;

        #[unsafe(method(squareYards))]
        #[unsafe(method_family = none)]
        pub fn squareYards() -> Retained<NSUnitArea>;

        #[unsafe(method(squareMiles))]
        #[unsafe(method_family = none)]
        pub fn squareMiles() -> Retained<NSUnitArea>;

        #[unsafe(method(acres))]
        #[unsafe(method_family = none)]
        pub fn acres() -> Retained<NSUnitArea>;

        #[unsafe(method(ares))]
        #[unsafe(method_family = none)]
        pub fn ares() -> Retained<NSUnitArea>;

        #[unsafe(method(hectares))]
        #[unsafe(method_family = none)]
        pub fn hectares() -> Retained<NSUnitArea>;
    );
}

/// Methods declared on superclass `NSDimension`.
impl NSUnitArea {
    extern_methods!(
        #[cfg(feature = "NSString")]
        #[unsafe(method(initWithSymbol:converter:))]
        #[unsafe(method_family = init)]
        pub fn initWithSymbol_converter(
            this: Allocated<Self>,
            symbol: &NSString,
            converter: &NSUnitConverter,
        ) -> Retained<Self>;

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

/// Methods declared on superclass `NSUnit`.
impl NSUnitArea {
    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>;

        #[cfg(feature = "NSString")]
        #[unsafe(method(initWithSymbol:))]
        #[unsafe(method_family = init)]
        pub fn initWithSymbol(this: Allocated<Self>, symbol: &NSString) -> Retained<Self>;
    );
}

extern_class!(
    /// [Apple's documentation](https://developer.apple.com/documentation/foundation/nsunitconcentrationmass?language=objc)
    #[unsafe(super(NSDimension, NSUnit, NSObject))]
    #[derive(Debug, PartialEq, Eq, Hash)]
    pub struct NSUnitConcentrationMass;
);

unsafe impl Send for NSUnitConcentrationMass {}

unsafe impl Sync for NSUnitConcentrationMass {}

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSCoding for NSUnitConcentrationMass {}
);

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSCopying for NSUnitConcentrationMass {}
);

#[cfg(feature = "NSObject")]
unsafe impl CopyingHelper for NSUnitConcentrationMass {
    type Result = Self;
}

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

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSSecureCoding for NSUnitConcentrationMass {}
);

impl NSUnitConcentrationMass {
    extern_methods!(
        #[unsafe(method(gramsPerLiter))]
        #[unsafe(method_family = none)]
        pub fn gramsPerLiter() -> Retained<NSUnitConcentrationMass>;

        #[unsafe(method(milligramsPerDeciliter))]
        #[unsafe(method_family = none)]
        pub fn milligramsPerDeciliter() -> Retained<NSUnitConcentrationMass>;

        #[unsafe(method(millimolesPerLiterWithGramsPerMole:))]
        #[unsafe(method_family = none)]
        pub fn millimolesPerLiterWithGramsPerMole(
            grams_per_mole: c_double,
        ) -> Retained<NSUnitConcentrationMass>;
    );
}

/// Methods declared on superclass `NSDimension`.
impl NSUnitConcentrationMass {
    extern_methods!(
        #[cfg(feature = "NSString")]
        #[unsafe(method(initWithSymbol:converter:))]
        #[unsafe(method_family = init)]
        pub fn initWithSymbol_converter(
            this: Allocated<Self>,
            symbol: &NSString,
            converter: &NSUnitConverter,
        ) -> Retained<Self>;

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

/// Methods declared on superclass `NSUnit`.
impl NSUnitConcentrationMass {
    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>;

        #[cfg(feature = "NSString")]
        #[unsafe(method(initWithSymbol:))]
        #[unsafe(method_family = init)]
        pub fn initWithSymbol(this: Allocated<Self>, symbol: &NSString) -> Retained<Self>;
    );
}

extern_class!(
    /// [Apple's documentation](https://developer.apple.com/documentation/foundation/nsunitdispersion?language=objc)
    #[unsafe(super(NSDimension, NSUnit, NSObject))]
    #[derive(Debug, PartialEq, Eq, Hash)]
    pub struct NSUnitDispersion;
);

unsafe impl Send for NSUnitDispersion {}

unsafe impl Sync for NSUnitDispersion {}

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSCoding for NSUnitDispersion {}
);

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSCopying for NSUnitDispersion {}
);

#[cfg(feature = "NSObject")]
unsafe impl CopyingHelper for NSUnitDispersion {
    type Result = Self;
}

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

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSSecureCoding for NSUnitDispersion {}
);

impl NSUnitDispersion {
    extern_methods!(
        #[unsafe(method(partsPerMillion))]
        #[unsafe(method_family = none)]
        pub fn partsPerMillion() -> Retained<NSUnitDispersion>;
    );
}

/// Methods declared on superclass `NSDimension`.
impl NSUnitDispersion {
    extern_methods!(
        #[cfg(feature = "NSString")]
        #[unsafe(method(initWithSymbol:converter:))]
        #[unsafe(method_family = init)]
        pub fn initWithSymbol_converter(
            this: Allocated<Self>,
            symbol: &NSString,
            converter: &NSUnitConverter,
        ) -> Retained<Self>;

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

/// Methods declared on superclass `NSUnit`.
impl NSUnitDispersion {
    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>;

        #[cfg(feature = "NSString")]
        #[unsafe(method(initWithSymbol:))]
        #[unsafe(method_family = init)]
        pub fn initWithSymbol(this: Allocated<Self>, symbol: &NSString) -> Retained<Self>;
    );
}

extern_class!(
    /// [Apple's documentation](https://developer.apple.com/documentation/foundation/nsunitduration?language=objc)
    #[unsafe(super(NSDimension, NSUnit, NSObject))]
    #[derive(Debug, PartialEq, Eq, Hash)]
    pub struct NSUnitDuration;
);

unsafe impl Send for NSUnitDuration {}

unsafe impl Sync for NSUnitDuration {}

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSCoding for NSUnitDuration {}
);

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSCopying for NSUnitDuration {}
);

#[cfg(feature = "NSObject")]
unsafe impl CopyingHelper for NSUnitDuration {
    type Result = Self;
}

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

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSSecureCoding for NSUnitDuration {}
);

impl NSUnitDuration {
    extern_methods!(
        #[unsafe(method(hours))]
        #[unsafe(method_family = none)]
        pub fn hours() -> Retained<NSUnitDuration>;

        #[unsafe(method(minutes))]
        #[unsafe(method_family = none)]
        pub fn minutes() -> Retained<NSUnitDuration>;

        #[unsafe(method(seconds))]
        #[unsafe(method_family = none)]
        pub fn seconds() -> Retained<NSUnitDuration>;

        #[unsafe(method(milliseconds))]
        #[unsafe(method_family = none)]
        pub fn milliseconds() -> Retained<NSUnitDuration>;

        #[unsafe(method(microseconds))]
        #[unsafe(method_family = none)]
        pub fn microseconds() -> Retained<NSUnitDuration>;

        #[unsafe(method(nanoseconds))]
        #[unsafe(method_family = none)]
        pub fn nanoseconds() -> Retained<NSUnitDuration>;

        #[unsafe(method(picoseconds))]
        #[unsafe(method_family = none)]
        pub fn picoseconds() -> Retained<NSUnitDuration>;
    );
}

/// Methods declared on superclass `NSDimension`.
impl NSUnitDuration {
    extern_methods!(
        #[cfg(feature = "NSString")]
        #[unsafe(method(initWithSymbol:converter:))]
        #[unsafe(method_family = init)]
        pub fn initWithSymbol_converter(
            this: Allocated<Self>,
            symbol: &NSString,
            converter: &NSUnitConverter,
        ) -> Retained<Self>;

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

/// Methods declared on superclass `NSUnit`.
impl NSUnitDuration {
    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>;

        #[cfg(feature = "NSString")]
        #[unsafe(method(initWithSymbol:))]
        #[unsafe(method_family = init)]
        pub fn initWithSymbol(this: Allocated<Self>, symbol: &NSString) -> Retained<Self>;
    );
}

extern_class!(
    /// [Apple's documentation](https://developer.apple.com/documentation/foundation/nsunitelectriccharge?language=objc)
    #[unsafe(super(NSDimension, NSUnit, NSObject))]
    #[derive(Debug, PartialEq, Eq, Hash)]
    pub struct NSUnitElectricCharge;
);

unsafe impl Send for NSUnitElectricCharge {}

unsafe impl Sync for NSUnitElectricCharge {}

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSCoding for NSUnitElectricCharge {}
);

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSCopying for NSUnitElectricCharge {}
);

#[cfg(feature = "NSObject")]
unsafe impl CopyingHelper for NSUnitElectricCharge {
    type Result = Self;
}

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

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSSecureCoding for NSUnitElectricCharge {}
);

impl NSUnitElectricCharge {
    extern_methods!(
        #[unsafe(method(coulombs))]
        #[unsafe(method_family = none)]
        pub fn coulombs() -> Retained<NSUnitElectricCharge>;

        #[unsafe(method(megaampereHours))]
        #[unsafe(method_family = none)]
        pub fn megaampereHours() -> Retained<NSUnitElectricCharge>;

        #[unsafe(method(kiloampereHours))]
        #[unsafe(method_family = none)]
        pub fn kiloampereHours() -> Retained<NSUnitElectricCharge>;

        #[unsafe(method(ampereHours))]
        #[unsafe(method_family = none)]
        pub fn ampereHours() -> Retained<NSUnitElectricCharge>;

        #[unsafe(method(milliampereHours))]
        #[unsafe(method_family = none)]
        pub fn milliampereHours() -> Retained<NSUnitElectricCharge>;

        #[unsafe(method(microampereHours))]
        #[unsafe(method_family = none)]
        pub fn microampereHours() -> Retained<NSUnitElectricCharge>;
    );
}

/// Methods declared on superclass `NSDimension`.
impl NSUnitElectricCharge {
    extern_methods!(
        #[cfg(feature = "NSString")]
        #[unsafe(method(initWithSymbol:converter:))]
        #[unsafe(method_family = init)]
        pub fn initWithSymbol_converter(
            this: Allocated<Self>,
            symbol: &NSString,
            converter: &NSUnitConverter,
        ) -> Retained<Self>;

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

/// Methods declared on superclass `NSUnit`.
impl NSUnitElectricCharge {
    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>;

        #[cfg(feature = "NSString")]
        #[unsafe(method(initWithSymbol:))]
        #[unsafe(method_family = init)]
        pub fn initWithSymbol(this: Allocated<Self>, symbol: &NSString) -> Retained<Self>;
    );
}

extern_class!(
    /// [Apple's documentation](https://developer.apple.com/documentation/foundation/nsunitelectriccurrent?language=objc)
    #[unsafe(super(NSDimension, NSUnit, NSObject))]
    #[derive(Debug, PartialEq, Eq, Hash)]
    pub struct NSUnitElectricCurrent;
);

unsafe impl Send for NSUnitElectricCurrent {}

unsafe impl Sync for NSUnitElectricCurrent {}

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSCoding for NSUnitElectricCurrent {}
);

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSCopying for NSUnitElectricCurrent {}
);

#[cfg(feature = "NSObject")]
unsafe impl CopyingHelper for NSUnitElectricCurrent {
    type Result = Self;
}

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

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSSecureCoding for NSUnitElectricCurrent {}
);

impl NSUnitElectricCurrent {
    extern_methods!(
        #[unsafe(method(megaamperes))]
        #[unsafe(method_family = none)]
        pub fn megaamperes() -> Retained<NSUnitElectricCurrent>;

        #[unsafe(method(kiloamperes))]
        #[unsafe(method_family = none)]
        pub fn kiloamperes() -> Retained<NSUnitElectricCurrent>;

        #[unsafe(method(amperes))]
        #[unsafe(method_family = none)]
        pub fn amperes() -> Retained<NSUnitElectricCurrent>;

        #[unsafe(method(milliamperes))]
        #[unsafe(method_family = none)]
        pub fn milliamperes() -> Retained<NSUnitElectricCurrent>;

        #[unsafe(method(microamperes))]
        #[unsafe(method_family = none)]
        pub fn microamperes() -> Retained<NSUnitElectricCurrent>;
    );
}

/// Methods declared on superclass `NSDimension`.
impl NSUnitElectricCurrent {
    extern_methods!(
        #[cfg(feature = "NSString")]
        #[unsafe(method(initWithSymbol:converter:))]
        #[unsafe(method_family = init)]
        pub fn initWithSymbol_converter(
            this: Allocated<Self>,
            symbol: &NSString,
            converter: &NSUnitConverter,
        ) -> Retained<Self>;

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

/// Methods declared on superclass `NSUnit`.
impl NSUnitElectricCurrent {
    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>;

        #[cfg(feature = "NSString")]
        #[unsafe(method(initWithSymbol:))]
        #[unsafe(method_family = init)]
        pub fn initWithSymbol(this: Allocated<Self>, symbol: &NSString) -> Retained<Self>;
    );
}

extern_class!(
    /// [Apple's documentation](https://developer.apple.com/documentation/foundation/nsunitelectricpotentialdifference?language=objc)
    #[unsafe(super(NSDimension, NSUnit, NSObject))]
    #[derive(Debug, PartialEq, Eq, Hash)]
    pub struct NSUnitElectricPotentialDifference;
);

unsafe impl Send for NSUnitElectricPotentialDifference {}

unsafe impl Sync for NSUnitElectricPotentialDifference {}

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSCoding for NSUnitElectricPotentialDifference {}
);

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSCopying for NSUnitElectricPotentialDifference {}
);

#[cfg(feature = "NSObject")]
unsafe impl CopyingHelper for NSUnitElectricPotentialDifference {
    type Result = Self;
}

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

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSSecureCoding for NSUnitElectricPotentialDifference {}
);

impl NSUnitElectricPotentialDifference {
    extern_methods!(
        #[unsafe(method(megavolts))]
        #[unsafe(method_family = none)]
        pub fn megavolts() -> Retained<NSUnitElectricPotentialDifference>;

        #[unsafe(method(kilovolts))]
        #[unsafe(method_family = none)]
        pub fn kilovolts() -> Retained<NSUnitElectricPotentialDifference>;

        #[unsafe(method(volts))]
        #[unsafe(method_family = none)]
        pub fn volts() -> Retained<NSUnitElectricPotentialDifference>;

        #[unsafe(method(millivolts))]
        #[unsafe(method_family = none)]
        pub fn millivolts() -> Retained<NSUnitElectricPotentialDifference>;

        #[unsafe(method(microvolts))]
        #[unsafe(method_family = none)]
        pub fn microvolts() -> Retained<NSUnitElectricPotentialDifference>;
    );
}

/// Methods declared on superclass `NSDimension`.
impl NSUnitElectricPotentialDifference {
    extern_methods!(
        #[cfg(feature = "NSString")]
        #[unsafe(method(initWithSymbol:converter:))]
        #[unsafe(method_family = init)]
        pub fn initWithSymbol_converter(
            this: Allocated<Self>,
            symbol: &NSString,
            converter: &NSUnitConverter,
        ) -> Retained<Self>;

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

/// Methods declared on superclass `NSUnit`.
impl NSUnitElectricPotentialDifference {
    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>;

        #[cfg(feature = "NSString")]
        #[unsafe(method(initWithSymbol:))]
        #[unsafe(method_family = init)]
        pub fn initWithSymbol(this: Allocated<Self>, symbol: &NSString) -> Retained<Self>;
    );
}

extern_class!(
    /// [Apple's documentation](https://developer.apple.com/documentation/foundation/nsunitelectricresistance?language=objc)
    #[unsafe(super(NSDimension, NSUnit, NSObject))]
    #[derive(Debug, PartialEq, Eq, Hash)]
    pub struct NSUnitElectricResistance;
);

unsafe impl Send for NSUnitElectricResistance {}

unsafe impl Sync for NSUnitElectricResistance {}

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSCoding for NSUnitElectricResistance {}
);

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSCopying for NSUnitElectricResistance {}
);

#[cfg(feature = "NSObject")]
unsafe impl CopyingHelper for NSUnitElectricResistance {
    type Result = Self;
}

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

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSSecureCoding for NSUnitElectricResistance {}
);

impl NSUnitElectricResistance {
    extern_methods!(
        #[unsafe(method(megaohms))]
        #[unsafe(method_family = none)]
        pub fn megaohms() -> Retained<NSUnitElectricResistance>;

        #[unsafe(method(kiloohms))]
        #[unsafe(method_family = none)]
        pub fn kiloohms() -> Retained<NSUnitElectricResistance>;

        #[unsafe(method(ohms))]
        #[unsafe(method_family = none)]
        pub fn ohms() -> Retained<NSUnitElectricResistance>;

        #[unsafe(method(milliohms))]
        #[unsafe(method_family = none)]
        pub fn milliohms() -> Retained<NSUnitElectricResistance>;

        #[unsafe(method(microohms))]
        #[unsafe(method_family = none)]
        pub fn microohms() -> Retained<NSUnitElectricResistance>;
    );
}

/// Methods declared on superclass `NSDimension`.
impl NSUnitElectricResistance {
    extern_methods!(
        #[cfg(feature = "NSString")]
        #[unsafe(method(initWithSymbol:converter:))]
        #[unsafe(method_family = init)]
        pub fn initWithSymbol_converter(
            this: Allocated<Self>,
            symbol: &NSString,
            converter: &NSUnitConverter,
        ) -> Retained<Self>;

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

/// Methods declared on superclass `NSUnit`.
impl NSUnitElectricResistance {
    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>;

        #[cfg(feature = "NSString")]
        #[unsafe(method(initWithSymbol:))]
        #[unsafe(method_family = init)]
        pub fn initWithSymbol(this: Allocated<Self>, symbol: &NSString) -> Retained<Self>;
    );
}

extern_class!(
    /// [Apple's documentation](https://developer.apple.com/documentation/foundation/nsunitenergy?language=objc)
    #[unsafe(super(NSDimension, NSUnit, NSObject))]
    #[derive(Debug, PartialEq, Eq, Hash)]
    pub struct NSUnitEnergy;
);

unsafe impl Send for NSUnitEnergy {}

unsafe impl Sync for NSUnitEnergy {}

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSCoding for NSUnitEnergy {}
);

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSCopying for NSUnitEnergy {}
);

#[cfg(feature = "NSObject")]
unsafe impl CopyingHelper for NSUnitEnergy {
    type Result = Self;
}

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

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSSecureCoding for NSUnitEnergy {}
);

impl NSUnitEnergy {
    extern_methods!(
        #[unsafe(method(kilojoules))]
        #[unsafe(method_family = none)]
        pub fn kilojoules() -> Retained<NSUnitEnergy>;

        #[unsafe(method(joules))]
        #[unsafe(method_family = none)]
        pub fn joules() -> Retained<NSUnitEnergy>;

        #[unsafe(method(kilocalories))]
        #[unsafe(method_family = none)]
        pub fn kilocalories() -> Retained<NSUnitEnergy>;

        #[unsafe(method(calories))]
        #[unsafe(method_family = none)]
        pub fn calories() -> Retained<NSUnitEnergy>;

        #[unsafe(method(kilowattHours))]
        #[unsafe(method_family = none)]
        pub fn kilowattHours() -> Retained<NSUnitEnergy>;
    );
}

/// Methods declared on superclass `NSDimension`.
impl NSUnitEnergy {
    extern_methods!(
        #[cfg(feature = "NSString")]
        #[unsafe(method(initWithSymbol:converter:))]
        #[unsafe(method_family = init)]
        pub fn initWithSymbol_converter(
            this: Allocated<Self>,
            symbol: &NSString,
            converter: &NSUnitConverter,
        ) -> Retained<Self>;

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

/// Methods declared on superclass `NSUnit`.
impl NSUnitEnergy {
    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>;

        #[cfg(feature = "NSString")]
        #[unsafe(method(initWithSymbol:))]
        #[unsafe(method_family = init)]
        pub fn initWithSymbol(this: Allocated<Self>, symbol: &NSString) -> Retained<Self>;
    );
}

extern_class!(
    /// [Apple's documentation](https://developer.apple.com/documentation/foundation/nsunitfrequency?language=objc)
    #[unsafe(super(NSDimension, NSUnit, NSObject))]
    #[derive(Debug, PartialEq, Eq, Hash)]
    pub struct NSUnitFrequency;
);

unsafe impl Send for NSUnitFrequency {}

unsafe impl Sync for NSUnitFrequency {}

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSCoding for NSUnitFrequency {}
);

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSCopying for NSUnitFrequency {}
);

#[cfg(feature = "NSObject")]
unsafe impl CopyingHelper for NSUnitFrequency {
    type Result = Self;
}

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

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSSecureCoding for NSUnitFrequency {}
);

impl NSUnitFrequency {
    extern_methods!(
        #[unsafe(method(terahertz))]
        #[unsafe(method_family = none)]
        pub fn terahertz() -> Retained<NSUnitFrequency>;

        #[unsafe(method(gigahertz))]
        #[unsafe(method_family = none)]
        pub fn gigahertz() -> Retained<NSUnitFrequency>;

        #[unsafe(method(megahertz))]
        #[unsafe(method_family = none)]
        pub fn megahertz() -> Retained<NSUnitFrequency>;

        #[unsafe(method(kilohertz))]
        #[unsafe(method_family = none)]
        pub fn kilohertz() -> Retained<NSUnitFrequency>;

        #[unsafe(method(hertz))]
        #[unsafe(method_family = none)]
        pub fn hertz() -> Retained<NSUnitFrequency>;

        #[unsafe(method(millihertz))]
        #[unsafe(method_family = none)]
        pub fn millihertz() -> Retained<NSUnitFrequency>;

        #[unsafe(method(microhertz))]
        #[unsafe(method_family = none)]
        pub fn microhertz() -> Retained<NSUnitFrequency>;

        #[unsafe(method(nanohertz))]
        #[unsafe(method_family = none)]
        pub fn nanohertz() -> Retained<NSUnitFrequency>;

        #[unsafe(method(framesPerSecond))]
        #[unsafe(method_family = none)]
        pub fn framesPerSecond() -> Retained<NSUnitFrequency>;
    );
}

/// Methods declared on superclass `NSDimension`.
impl NSUnitFrequency {
    extern_methods!(
        #[cfg(feature = "NSString")]
        #[unsafe(method(initWithSymbol:converter:))]
        #[unsafe(method_family = init)]
        pub fn initWithSymbol_converter(
            this: Allocated<Self>,
            symbol: &NSString,
            converter: &NSUnitConverter,
        ) -> Retained<Self>;

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

/// Methods declared on superclass `NSUnit`.
impl NSUnitFrequency {
    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>;

        #[cfg(feature = "NSString")]
        #[unsafe(method(initWithSymbol:))]
        #[unsafe(method_family = init)]
        pub fn initWithSymbol(this: Allocated<Self>, symbol: &NSString) -> Retained<Self>;
    );
}

extern_class!(
    /// [Apple's documentation](https://developer.apple.com/documentation/foundation/nsunitfuelefficiency?language=objc)
    #[unsafe(super(NSDimension, NSUnit, NSObject))]
    #[derive(Debug, PartialEq, Eq, Hash)]
    pub struct NSUnitFuelEfficiency;
);

unsafe impl Send for NSUnitFuelEfficiency {}

unsafe impl Sync for NSUnitFuelEfficiency {}

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSCoding for NSUnitFuelEfficiency {}
);

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSCopying for NSUnitFuelEfficiency {}
);

#[cfg(feature = "NSObject")]
unsafe impl CopyingHelper for NSUnitFuelEfficiency {
    type Result = Self;
}

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

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSSecureCoding for NSUnitFuelEfficiency {}
);

impl NSUnitFuelEfficiency {
    extern_methods!(
        #[unsafe(method(litersPer100Kilometers))]
        #[unsafe(method_family = none)]
        pub fn litersPer100Kilometers() -> Retained<NSUnitFuelEfficiency>;

        #[unsafe(method(milesPerImperialGallon))]
        #[unsafe(method_family = none)]
        pub fn milesPerImperialGallon() -> Retained<NSUnitFuelEfficiency>;

        #[unsafe(method(milesPerGallon))]
        #[unsafe(method_family = none)]
        pub fn milesPerGallon() -> Retained<NSUnitFuelEfficiency>;
    );
}

/// Methods declared on superclass `NSDimension`.
impl NSUnitFuelEfficiency {
    extern_methods!(
        #[cfg(feature = "NSString")]
        #[unsafe(method(initWithSymbol:converter:))]
        #[unsafe(method_family = init)]
        pub fn initWithSymbol_converter(
            this: Allocated<Self>,
            symbol: &NSString,
            converter: &NSUnitConverter,
        ) -> Retained<Self>;

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

/// Methods declared on superclass `NSUnit`.
impl NSUnitFuelEfficiency {
    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>;

        #[cfg(feature = "NSString")]
        #[unsafe(method(initWithSymbol:))]
        #[unsafe(method_family = init)]
        pub fn initWithSymbol(this: Allocated<Self>, symbol: &NSString) -> Retained<Self>;
    );
}

extern_class!(
    /// [Apple's documentation](https://developer.apple.com/documentation/foundation/nsunitinformationstorage?language=objc)
    #[unsafe(super(NSDimension, NSUnit, NSObject))]
    #[derive(Debug, PartialEq, Eq, Hash)]
    pub struct NSUnitInformationStorage;
);

unsafe impl Send for NSUnitInformationStorage {}

unsafe impl Sync for NSUnitInformationStorage {}

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSCoding for NSUnitInformationStorage {}
);

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSCopying for NSUnitInformationStorage {}
);

#[cfg(feature = "NSObject")]
unsafe impl CopyingHelper for NSUnitInformationStorage {
    type Result = Self;
}

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

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSSecureCoding for NSUnitInformationStorage {}
);

impl NSUnitInformationStorage {
    extern_methods!(
        #[unsafe(method(bytes))]
        #[unsafe(method_family = none)]
        pub fn bytes() -> Retained<NSUnitInformationStorage>;

        #[unsafe(method(bits))]
        #[unsafe(method_family = none)]
        pub fn bits() -> Retained<NSUnitInformationStorage>;

        #[unsafe(method(nibbles))]
        #[unsafe(method_family = none)]
        pub fn nibbles() -> Retained<NSUnitInformationStorage>;

        #[unsafe(method(yottabytes))]
        #[unsafe(method_family = none)]
        pub fn yottabytes() -> Retained<NSUnitInformationStorage>;

        #[unsafe(method(zettabytes))]
        #[unsafe(method_family = none)]
        pub fn zettabytes() -> Retained<NSUnitInformationStorage>;

        #[unsafe(method(exabytes))]
        #[unsafe(method_family = none)]
        pub fn exabytes() -> Retained<NSUnitInformationStorage>;

        #[unsafe(method(petabytes))]
        #[unsafe(method_family = none)]
        pub fn petabytes() -> Retained<NSUnitInformationStorage>;

        #[unsafe(method(terabytes))]
        #[unsafe(method_family = none)]
        pub fn terabytes() -> Retained<NSUnitInformationStorage>;

        #[unsafe(method(gigabytes))]
        #[unsafe(method_family = none)]
        pub fn gigabytes() -> Retained<NSUnitInformationStorage>;

        #[unsafe(method(megabytes))]
        #[unsafe(method_family = none)]
        pub fn megabytes() -> Retained<NSUnitInformationStorage>;

        #[unsafe(method(kilobytes))]
        #[unsafe(method_family = none)]
        pub fn kilobytes() -> Retained<NSUnitInformationStorage>;

        #[unsafe(method(yottabits))]
        #[unsafe(method_family = none)]
        pub fn yottabits() -> Retained<NSUnitInformationStorage>;

        #[unsafe(method(zettabits))]
        #[unsafe(method_family = none)]
        pub fn zettabits() -> Retained<NSUnitInformationStorage>;

        #[unsafe(method(exabits))]
        #[unsafe(method_family = none)]
        pub fn exabits() -> Retained<NSUnitInformationStorage>;

        #[unsafe(method(petabits))]
        #[unsafe(method_family = none)]
        pub fn petabits() -> Retained<NSUnitInformationStorage>;

        #[unsafe(method(terabits))]
        #[unsafe(method_family = none)]
        pub fn terabits() -> Retained<NSUnitInformationStorage>;

        #[unsafe(method(gigabits))]
        #[unsafe(method_family = none)]
        pub fn gigabits() -> Retained<NSUnitInformationStorage>;

        #[unsafe(method(megabits))]
        #[unsafe(method_family = none)]
        pub fn megabits() -> Retained<NSUnitInformationStorage>;

        #[unsafe(method(kilobits))]
        #[unsafe(method_family = none)]
        pub fn kilobits() -> Retained<NSUnitInformationStorage>;

        #[unsafe(method(yobibytes))]
        #[unsafe(method_family = none)]
        pub fn yobibytes() -> Retained<NSUnitInformationStorage>;

        #[unsafe(method(zebibytes))]
        #[unsafe(method_family = none)]
        pub fn zebibytes() -> Retained<NSUnitInformationStorage>;

        #[unsafe(method(exbibytes))]
        #[unsafe(method_family = none)]
        pub fn exbibytes() -> Retained<NSUnitInformationStorage>;

        #[unsafe(method(pebibytes))]
        #[unsafe(method_family = none)]
        pub fn pebibytes() -> Retained<NSUnitInformationStorage>;

        #[unsafe(method(tebibytes))]
        #[unsafe(method_family = none)]
        pub fn tebibytes() -> Retained<NSUnitInformationStorage>;

        #[unsafe(method(gibibytes))]
        #[unsafe(method_family = none)]
        pub fn gibibytes() -> Retained<NSUnitInformationStorage>;

        #[unsafe(method(mebibytes))]
        #[unsafe(method_family = none)]
        pub fn mebibytes() -> Retained<NSUnitInformationStorage>;

        #[unsafe(method(kibibytes))]
        #[unsafe(method_family = none)]
        pub fn kibibytes() -> Retained<NSUnitInformationStorage>;

        #[unsafe(method(yobibits))]
        #[unsafe(method_family = none)]
        pub fn yobibits() -> Retained<NSUnitInformationStorage>;

        #[unsafe(method(zebibits))]
        #[unsafe(method_family = none)]
        pub fn zebibits() -> Retained<NSUnitInformationStorage>;

        #[unsafe(method(exbibits))]
        #[unsafe(method_family = none)]
        pub fn exbibits() -> Retained<NSUnitInformationStorage>;

        #[unsafe(method(pebibits))]
        #[unsafe(method_family = none)]
        pub fn pebibits() -> Retained<NSUnitInformationStorage>;

        #[unsafe(method(tebibits))]
        #[unsafe(method_family = none)]
        pub fn tebibits() -> Retained<NSUnitInformationStorage>;

        #[unsafe(method(gibibits))]
        #[unsafe(method_family = none)]
        pub fn gibibits() -> Retained<NSUnitInformationStorage>;

        #[unsafe(method(mebibits))]
        #[unsafe(method_family = none)]
        pub fn mebibits() -> Retained<NSUnitInformationStorage>;

        #[unsafe(method(kibibits))]
        #[unsafe(method_family = none)]
        pub fn kibibits() -> Retained<NSUnitInformationStorage>;
    );
}

/// Methods declared on superclass `NSDimension`.
impl NSUnitInformationStorage {
    extern_methods!(
        #[cfg(feature = "NSString")]
        #[unsafe(method(initWithSymbol:converter:))]
        #[unsafe(method_family = init)]
        pub fn initWithSymbol_converter(
            this: Allocated<Self>,
            symbol: &NSString,
            converter: &NSUnitConverter,
        ) -> Retained<Self>;

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

/// Methods declared on superclass `NSUnit`.
impl NSUnitInformationStorage {
    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>;

        #[cfg(feature = "NSString")]
        #[unsafe(method(initWithSymbol:))]
        #[unsafe(method_family = init)]
        pub fn initWithSymbol(this: Allocated<Self>, symbol: &NSString) -> Retained<Self>;
    );
}

extern_class!(
    /// [Apple's documentation](https://developer.apple.com/documentation/foundation/nsunitlength?language=objc)
    #[unsafe(super(NSDimension, NSUnit, NSObject))]
    #[derive(Debug, PartialEq, Eq, Hash)]
    pub struct NSUnitLength;
);

unsafe impl Send for NSUnitLength {}

unsafe impl Sync for NSUnitLength {}

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSCoding for NSUnitLength {}
);

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSCopying for NSUnitLength {}
);

#[cfg(feature = "NSObject")]
unsafe impl CopyingHelper for NSUnitLength {
    type Result = Self;
}

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

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSSecureCoding for NSUnitLength {}
);

impl NSUnitLength {
    extern_methods!(
        #[unsafe(method(megameters))]
        #[unsafe(method_family = none)]
        pub fn megameters() -> Retained<NSUnitLength>;

        #[unsafe(method(kilometers))]
        #[unsafe(method_family = none)]
        pub fn kilometers() -> Retained<NSUnitLength>;

        #[unsafe(method(hectometers))]
        #[unsafe(method_family = none)]
        pub fn hectometers() -> Retained<NSUnitLength>;

        #[unsafe(method(decameters))]
        #[unsafe(method_family = none)]
        pub fn decameters() -> Retained<NSUnitLength>;

        #[unsafe(method(meters))]
        #[unsafe(method_family = none)]
        pub fn meters() -> Retained<NSUnitLength>;

        #[unsafe(method(decimeters))]
        #[unsafe(method_family = none)]
        pub fn decimeters() -> Retained<NSUnitLength>;

        #[unsafe(method(centimeters))]
        #[unsafe(method_family = none)]
        pub fn centimeters() -> Retained<NSUnitLength>;

        #[unsafe(method(millimeters))]
        #[unsafe(method_family = none)]
        pub fn millimeters() -> Retained<NSUnitLength>;

        #[unsafe(method(micrometers))]
        #[unsafe(method_family = none)]
        pub fn micrometers() -> Retained<NSUnitLength>;

        #[unsafe(method(nanometers))]
        #[unsafe(method_family = none)]
        pub fn nanometers() -> Retained<NSUnitLength>;

        #[unsafe(method(picometers))]
        #[unsafe(method_family = none)]
        pub fn picometers() -> Retained<NSUnitLength>;

        #[unsafe(method(inches))]
        #[unsafe(method_family = none)]
        pub fn inches() -> Retained<NSUnitLength>;

        #[unsafe(method(feet))]
        #[unsafe(method_family = none)]
        pub fn feet() -> Retained<NSUnitLength>;

        #[unsafe(method(yards))]
        #[unsafe(method_family = none)]
        pub fn yards() -> Retained<NSUnitLength>;

        #[unsafe(method(miles))]
        #[unsafe(method_family = none)]
        pub fn miles() -> Retained<NSUnitLength>;

        #[unsafe(method(scandinavianMiles))]
        #[unsafe(method_family = none)]
        pub fn scandinavianMiles() -> Retained<NSUnitLength>;

        #[unsafe(method(lightyears))]
        #[unsafe(method_family = none)]
        pub fn lightyears() -> Retained<NSUnitLength>;

        #[unsafe(method(nauticalMiles))]
        #[unsafe(method_family = none)]
        pub fn nauticalMiles() -> Retained<NSUnitLength>;

        #[unsafe(method(fathoms))]
        #[unsafe(method_family = none)]
        pub fn fathoms() -> Retained<NSUnitLength>;

        #[unsafe(method(furlongs))]
        #[unsafe(method_family = none)]
        pub fn furlongs() -> Retained<NSUnitLength>;

        #[unsafe(method(astronomicalUnits))]
        #[unsafe(method_family = none)]
        pub fn astronomicalUnits() -> Retained<NSUnitLength>;

        #[unsafe(method(parsecs))]
        #[unsafe(method_family = none)]
        pub fn parsecs() -> Retained<NSUnitLength>;
    );
}

/// Methods declared on superclass `NSDimension`.
impl NSUnitLength {
    extern_methods!(
        #[cfg(feature = "NSString")]
        #[unsafe(method(initWithSymbol:converter:))]
        #[unsafe(method_family = init)]
        pub fn initWithSymbol_converter(
            this: Allocated<Self>,
            symbol: &NSString,
            converter: &NSUnitConverter,
        ) -> Retained<Self>;

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

/// Methods declared on superclass `NSUnit`.
impl NSUnitLength {
    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>;

        #[cfg(feature = "NSString")]
        #[unsafe(method(initWithSymbol:))]
        #[unsafe(method_family = init)]
        pub fn initWithSymbol(this: Allocated<Self>, symbol: &NSString) -> Retained<Self>;
    );
}

extern_class!(
    /// [Apple's documentation](https://developer.apple.com/documentation/foundation/nsunitilluminance?language=objc)
    #[unsafe(super(NSDimension, NSUnit, NSObject))]
    #[derive(Debug, PartialEq, Eq, Hash)]
    pub struct NSUnitIlluminance;
);

unsafe impl Send for NSUnitIlluminance {}

unsafe impl Sync for NSUnitIlluminance {}

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSCoding for NSUnitIlluminance {}
);

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSCopying for NSUnitIlluminance {}
);

#[cfg(feature = "NSObject")]
unsafe impl CopyingHelper for NSUnitIlluminance {
    type Result = Self;
}

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

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSSecureCoding for NSUnitIlluminance {}
);

impl NSUnitIlluminance {
    extern_methods!(
        #[unsafe(method(lux))]
        #[unsafe(method_family = none)]
        pub fn lux() -> Retained<NSUnitIlluminance>;
    );
}

/// Methods declared on superclass `NSDimension`.
impl NSUnitIlluminance {
    extern_methods!(
        #[cfg(feature = "NSString")]
        #[unsafe(method(initWithSymbol:converter:))]
        #[unsafe(method_family = init)]
        pub fn initWithSymbol_converter(
            this: Allocated<Self>,
            symbol: &NSString,
            converter: &NSUnitConverter,
        ) -> Retained<Self>;

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

/// Methods declared on superclass `NSUnit`.
impl NSUnitIlluminance {
    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>;

        #[cfg(feature = "NSString")]
        #[unsafe(method(initWithSymbol:))]
        #[unsafe(method_family = init)]
        pub fn initWithSymbol(this: Allocated<Self>, symbol: &NSString) -> Retained<Self>;
    );
}

extern_class!(
    /// [Apple's documentation](https://developer.apple.com/documentation/foundation/nsunitmass?language=objc)
    #[unsafe(super(NSDimension, NSUnit, NSObject))]
    #[derive(Debug, PartialEq, Eq, Hash)]
    pub struct NSUnitMass;
);

unsafe impl Send for NSUnitMass {}

unsafe impl Sync for NSUnitMass {}

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSCoding for NSUnitMass {}
);

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSCopying for NSUnitMass {}
);

#[cfg(feature = "NSObject")]
unsafe impl CopyingHelper for NSUnitMass {
    type Result = Self;
}

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

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSSecureCoding for NSUnitMass {}
);

impl NSUnitMass {
    extern_methods!(
        #[unsafe(method(kilograms))]
        #[unsafe(method_family = none)]
        pub fn kilograms() -> Retained<NSUnitMass>;

        #[unsafe(method(grams))]
        #[unsafe(method_family = none)]
        pub fn grams() -> Retained<NSUnitMass>;

        #[unsafe(method(decigrams))]
        #[unsafe(method_family = none)]
        pub fn decigrams() -> Retained<NSUnitMass>;

        #[unsafe(method(centigrams))]
        #[unsafe(method_family = none)]
        pub fn centigrams() -> Retained<NSUnitMass>;

        #[unsafe(method(milligrams))]
        #[unsafe(method_family = none)]
        pub fn milligrams() -> Retained<NSUnitMass>;

        #[unsafe(method(micrograms))]
        #[unsafe(method_family = none)]
        pub fn micrograms() -> Retained<NSUnitMass>;

        #[unsafe(method(nanograms))]
        #[unsafe(method_family = none)]
        pub fn nanograms() -> Retained<NSUnitMass>;

        #[unsafe(method(picograms))]
        #[unsafe(method_family = none)]
        pub fn picograms() -> Retained<NSUnitMass>;

        #[unsafe(method(ounces))]
        #[unsafe(method_family = none)]
        pub fn ounces() -> Retained<NSUnitMass>;

        #[unsafe(method(poundsMass))]
        #[unsafe(method_family = none)]
        pub fn poundsMass() -> Retained<NSUnitMass>;

        #[unsafe(method(stones))]
        #[unsafe(method_family = none)]
        pub fn stones() -> Retained<NSUnitMass>;

        #[unsafe(method(metricTons))]
        #[unsafe(method_family = none)]
        pub fn metricTons() -> Retained<NSUnitMass>;

        #[unsafe(method(shortTons))]
        #[unsafe(method_family = none)]
        pub fn shortTons() -> Retained<NSUnitMass>;

        #[unsafe(method(carats))]
        #[unsafe(method_family = none)]
        pub fn carats() -> Retained<NSUnitMass>;

        #[unsafe(method(ouncesTroy))]
        #[unsafe(method_family = none)]
        pub fn ouncesTroy() -> Retained<NSUnitMass>;

        #[unsafe(method(slugs))]
        #[unsafe(method_family = none)]
        pub fn slugs() -> Retained<NSUnitMass>;
    );
}

/// Methods declared on superclass `NSDimension`.
impl NSUnitMass {
    extern_methods!(
        #[cfg(feature = "NSString")]
        #[unsafe(method(initWithSymbol:converter:))]
        #[unsafe(method_family = init)]
        pub fn initWithSymbol_converter(
            this: Allocated<Self>,
            symbol: &NSString,
            converter: &NSUnitConverter,
        ) -> Retained<Self>;

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

/// Methods declared on superclass `NSUnit`.
impl NSUnitMass {
    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>;

        #[cfg(feature = "NSString")]
        #[unsafe(method(initWithSymbol:))]
        #[unsafe(method_family = init)]
        pub fn initWithSymbol(this: Allocated<Self>, symbol: &NSString) -> Retained<Self>;
    );
}

extern_class!(
    /// [Apple's documentation](https://developer.apple.com/documentation/foundation/nsunitpower?language=objc)
    #[unsafe(super(NSDimension, NSUnit, NSObject))]
    #[derive(Debug, PartialEq, Eq, Hash)]
    pub struct NSUnitPower;
);

unsafe impl Send for NSUnitPower {}

unsafe impl Sync for NSUnitPower {}

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSCoding for NSUnitPower {}
);

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSCopying for NSUnitPower {}
);

#[cfg(feature = "NSObject")]
unsafe impl CopyingHelper for NSUnitPower {
    type Result = Self;
}

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

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSSecureCoding for NSUnitPower {}
);

impl NSUnitPower {
    extern_methods!(
        #[unsafe(method(terawatts))]
        #[unsafe(method_family = none)]
        pub fn terawatts() -> Retained<NSUnitPower>;

        #[unsafe(method(gigawatts))]
        #[unsafe(method_family = none)]
        pub fn gigawatts() -> Retained<NSUnitPower>;

        #[unsafe(method(megawatts))]
        #[unsafe(method_family = none)]
        pub fn megawatts() -> Retained<NSUnitPower>;

        #[unsafe(method(kilowatts))]
        #[unsafe(method_family = none)]
        pub fn kilowatts() -> Retained<NSUnitPower>;

        #[unsafe(method(watts))]
        #[unsafe(method_family = none)]
        pub fn watts() -> Retained<NSUnitPower>;

        #[unsafe(method(milliwatts))]
        #[unsafe(method_family = none)]
        pub fn milliwatts() -> Retained<NSUnitPower>;

        #[unsafe(method(microwatts))]
        #[unsafe(method_family = none)]
        pub fn microwatts() -> Retained<NSUnitPower>;

        #[unsafe(method(nanowatts))]
        #[unsafe(method_family = none)]
        pub fn nanowatts() -> Retained<NSUnitPower>;

        #[unsafe(method(picowatts))]
        #[unsafe(method_family = none)]
        pub fn picowatts() -> Retained<NSUnitPower>;

        #[unsafe(method(femtowatts))]
        #[unsafe(method_family = none)]
        pub fn femtowatts() -> Retained<NSUnitPower>;

        #[unsafe(method(horsepower))]
        #[unsafe(method_family = none)]
        pub fn horsepower() -> Retained<NSUnitPower>;
    );
}

/// Methods declared on superclass `NSDimension`.
impl NSUnitPower {
    extern_methods!(
        #[cfg(feature = "NSString")]
        #[unsafe(method(initWithSymbol:converter:))]
        #[unsafe(method_family = init)]
        pub fn initWithSymbol_converter(
            this: Allocated<Self>,
            symbol: &NSString,
            converter: &NSUnitConverter,
        ) -> Retained<Self>;

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

/// Methods declared on superclass `NSUnit`.
impl NSUnitPower {
    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>;

        #[cfg(feature = "NSString")]
        #[unsafe(method(initWithSymbol:))]
        #[unsafe(method_family = init)]
        pub fn initWithSymbol(this: Allocated<Self>, symbol: &NSString) -> Retained<Self>;
    );
}

extern_class!(
    /// [Apple's documentation](https://developer.apple.com/documentation/foundation/nsunitpressure?language=objc)
    #[unsafe(super(NSDimension, NSUnit, NSObject))]
    #[derive(Debug, PartialEq, Eq, Hash)]
    pub struct NSUnitPressure;
);

unsafe impl Send for NSUnitPressure {}

unsafe impl Sync for NSUnitPressure {}

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSCoding for NSUnitPressure {}
);

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSCopying for NSUnitPressure {}
);

#[cfg(feature = "NSObject")]
unsafe impl CopyingHelper for NSUnitPressure {
    type Result = Self;
}

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

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSSecureCoding for NSUnitPressure {}
);

impl NSUnitPressure {
    extern_methods!(
        #[unsafe(method(newtonsPerMetersSquared))]
        #[unsafe(method_family = none)]
        pub fn newtonsPerMetersSquared() -> Retained<NSUnitPressure>;

        #[unsafe(method(gigapascals))]
        #[unsafe(method_family = none)]
        pub fn gigapascals() -> Retained<NSUnitPressure>;

        #[unsafe(method(megapascals))]
        #[unsafe(method_family = none)]
        pub fn megapascals() -> Retained<NSUnitPressure>;

        #[unsafe(method(kilopascals))]
        #[unsafe(method_family = none)]
        pub fn kilopascals() -> Retained<NSUnitPressure>;

        #[unsafe(method(hectopascals))]
        #[unsafe(method_family = none)]
        pub fn hectopascals() -> Retained<NSUnitPressure>;

        #[unsafe(method(inchesOfMercury))]
        #[unsafe(method_family = none)]
        pub fn inchesOfMercury() -> Retained<NSUnitPressure>;

        #[unsafe(method(bars))]
        #[unsafe(method_family = none)]
        pub fn bars() -> Retained<NSUnitPressure>;

        #[unsafe(method(millibars))]
        #[unsafe(method_family = none)]
        pub fn millibars() -> Retained<NSUnitPressure>;

        #[unsafe(method(millimetersOfMercury))]
        #[unsafe(method_family = none)]
        pub fn millimetersOfMercury() -> Retained<NSUnitPressure>;

        #[unsafe(method(poundsForcePerSquareInch))]
        #[unsafe(method_family = none)]
        pub fn poundsForcePerSquareInch() -> Retained<NSUnitPressure>;
    );
}

/// Methods declared on superclass `NSDimension`.
impl NSUnitPressure {
    extern_methods!(
        #[cfg(feature = "NSString")]
        #[unsafe(method(initWithSymbol:converter:))]
        #[unsafe(method_family = init)]
        pub fn initWithSymbol_converter(
            this: Allocated<Self>,
            symbol: &NSString,
            converter: &NSUnitConverter,
        ) -> Retained<Self>;

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

/// Methods declared on superclass `NSUnit`.
impl NSUnitPressure {
    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>;

        #[cfg(feature = "NSString")]
        #[unsafe(method(initWithSymbol:))]
        #[unsafe(method_family = init)]
        pub fn initWithSymbol(this: Allocated<Self>, symbol: &NSString) -> Retained<Self>;
    );
}

extern_class!(
    /// [Apple's documentation](https://developer.apple.com/documentation/foundation/nsunitspeed?language=objc)
    #[unsafe(super(NSDimension, NSUnit, NSObject))]
    #[derive(Debug, PartialEq, Eq, Hash)]
    pub struct NSUnitSpeed;
);

unsafe impl Send for NSUnitSpeed {}

unsafe impl Sync for NSUnitSpeed {}

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSCoding for NSUnitSpeed {}
);

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSCopying for NSUnitSpeed {}
);

#[cfg(feature = "NSObject")]
unsafe impl CopyingHelper for NSUnitSpeed {
    type Result = Self;
}

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

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSSecureCoding for NSUnitSpeed {}
);

impl NSUnitSpeed {
    extern_methods!(
        #[unsafe(method(metersPerSecond))]
        #[unsafe(method_family = none)]
        pub fn metersPerSecond() -> Retained<NSUnitSpeed>;

        #[unsafe(method(kilometersPerHour))]
        #[unsafe(method_family = none)]
        pub fn kilometersPerHour() -> Retained<NSUnitSpeed>;

        #[unsafe(method(milesPerHour))]
        #[unsafe(method_family = none)]
        pub fn milesPerHour() -> Retained<NSUnitSpeed>;

        #[unsafe(method(knots))]
        #[unsafe(method_family = none)]
        pub fn knots() -> Retained<NSUnitSpeed>;
    );
}

/// Methods declared on superclass `NSDimension`.
impl NSUnitSpeed {
    extern_methods!(
        #[cfg(feature = "NSString")]
        #[unsafe(method(initWithSymbol:converter:))]
        #[unsafe(method_family = init)]
        pub fn initWithSymbol_converter(
            this: Allocated<Self>,
            symbol: &NSString,
            converter: &NSUnitConverter,
        ) -> Retained<Self>;

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

/// Methods declared on superclass `NSUnit`.
impl NSUnitSpeed {
    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>;

        #[cfg(feature = "NSString")]
        #[unsafe(method(initWithSymbol:))]
        #[unsafe(method_family = init)]
        pub fn initWithSymbol(this: Allocated<Self>, symbol: &NSString) -> Retained<Self>;
    );
}

extern_class!(
    /// [Apple's documentation](https://developer.apple.com/documentation/foundation/nsunittemperature?language=objc)
    #[unsafe(super(NSDimension, NSUnit, NSObject))]
    #[derive(Debug, PartialEq, Eq, Hash)]
    pub struct NSUnitTemperature;
);

unsafe impl Send for NSUnitTemperature {}

unsafe impl Sync for NSUnitTemperature {}

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSCoding for NSUnitTemperature {}
);

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSCopying for NSUnitTemperature {}
);

#[cfg(feature = "NSObject")]
unsafe impl CopyingHelper for NSUnitTemperature {
    type Result = Self;
}

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

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSSecureCoding for NSUnitTemperature {}
);

impl NSUnitTemperature {
    extern_methods!(
        #[unsafe(method(kelvin))]
        #[unsafe(method_family = none)]
        pub fn kelvin() -> Retained<NSUnitTemperature>;

        #[unsafe(method(celsius))]
        #[unsafe(method_family = none)]
        pub fn celsius() -> Retained<NSUnitTemperature>;

        #[unsafe(method(fahrenheit))]
        #[unsafe(method_family = none)]
        pub fn fahrenheit() -> Retained<NSUnitTemperature>;
    );
}

/// Methods declared on superclass `NSDimension`.
impl NSUnitTemperature {
    extern_methods!(
        #[cfg(feature = "NSString")]
        #[unsafe(method(initWithSymbol:converter:))]
        #[unsafe(method_family = init)]
        pub fn initWithSymbol_converter(
            this: Allocated<Self>,
            symbol: &NSString,
            converter: &NSUnitConverter,
        ) -> Retained<Self>;

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

/// Methods declared on superclass `NSUnit`.
impl NSUnitTemperature {
    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>;

        #[cfg(feature = "NSString")]
        #[unsafe(method(initWithSymbol:))]
        #[unsafe(method_family = init)]
        pub fn initWithSymbol(this: Allocated<Self>, symbol: &NSString) -> Retained<Self>;
    );
}

extern_class!(
    /// [Apple's documentation](https://developer.apple.com/documentation/foundation/nsunitvolume?language=objc)
    #[unsafe(super(NSDimension, NSUnit, NSObject))]
    #[derive(Debug, PartialEq, Eq, Hash)]
    pub struct NSUnitVolume;
);

unsafe impl Send for NSUnitVolume {}

unsafe impl Sync for NSUnitVolume {}

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSCoding for NSUnitVolume {}
);

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSCopying for NSUnitVolume {}
);

#[cfg(feature = "NSObject")]
unsafe impl CopyingHelper for NSUnitVolume {
    type Result = Self;
}

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

#[cfg(feature = "NSObject")]
extern_conformance!(
    unsafe impl NSSecureCoding for NSUnitVolume {}
);

impl NSUnitVolume {
    extern_methods!(
        #[unsafe(method(megaliters))]
        #[unsafe(method_family = none)]
        pub fn megaliters() -> Retained<NSUnitVolume>;

        #[unsafe(method(kiloliters))]
        #[unsafe(method_family = none)]
        pub fn kiloliters() -> Retained<NSUnitVolume>;

        #[unsafe(method(liters))]
        #[unsafe(method_family = none)]
        pub fn liters() -> Retained<NSUnitVolume>;

        #[unsafe(method(deciliters))]
        #[unsafe(method_family = none)]
        pub fn deciliters() -> Retained<NSUnitVolume>;

        #[unsafe(method(centiliters))]
        #[unsafe(method_family = none)]
        pub fn centiliters() -> Retained<NSUnitVolume>;

        #[unsafe(method(milliliters))]
        #[unsafe(method_family = none)]
        pub fn milliliters() -> Retained<NSUnitVolume>;

        #[unsafe(method(cubicKilometers))]
        #[unsafe(method_family = none)]
        pub fn cubicKilometers() -> Retained<NSUnitVolume>;

        #[unsafe(method(cubicMeters))]
        #[unsafe(method_family = none)]
        pub fn cubicMeters() -> Retained<NSUnitVolume>;

        #[unsafe(method(cubicDecimeters))]
        #[unsafe(method_family = none)]
        pub fn cubicDecimeters() -> Retained<NSUnitVolume>;

        #[unsafe(method(cubicCentimeters))]
        #[unsafe(method_family = none)]
        pub fn cubicCentimeters() -> Retained<NSUnitVolume>;

        #[unsafe(method(cubicMillimeters))]
        #[unsafe(method_family = none)]
        pub fn cubicMillimeters() -> Retained<NSUnitVolume>;

        #[unsafe(method(cubicInches))]
        #[unsafe(method_family = none)]
        pub fn cubicInches() -> Retained<NSUnitVolume>;

        #[unsafe(method(cubicFeet))]
        #[unsafe(method_family = none)]
        pub fn cubicFeet() -> Retained<NSUnitVolume>;

        #[unsafe(method(cubicYards))]
        #[unsafe(method_family = none)]
        pub fn cubicYards() -> Retained<NSUnitVolume>;

        #[unsafe(method(cubicMiles))]
        #[unsafe(method_family = none)]
        pub fn cubicMiles() -> Retained<NSUnitVolume>;

        #[unsafe(method(acreFeet))]
        #[unsafe(method_family = none)]
        pub fn acreFeet() -> Retained<NSUnitVolume>;

        #[unsafe(method(bushels))]
        #[unsafe(method_family = none)]
        pub fn bushels() -> Retained<NSUnitVolume>;

        #[unsafe(method(teaspoons))]
        #[unsafe(method_family = none)]
        pub fn teaspoons() -> Retained<NSUnitVolume>;

        #[unsafe(method(tablespoons))]
        #[unsafe(method_family = none)]
        pub fn tablespoons() -> Retained<NSUnitVolume>;

        #[unsafe(method(fluidOunces))]
        #[unsafe(method_family = none)]
        pub fn fluidOunces() -> Retained<NSUnitVolume>;

        #[unsafe(method(cups))]
        #[unsafe(method_family = none)]
        pub fn cups() -> Retained<NSUnitVolume>;

        #[unsafe(method(pints))]
        #[unsafe(method_family = none)]
        pub fn pints() -> Retained<NSUnitVolume>;

        #[unsafe(method(quarts))]
        #[unsafe(method_family = none)]
        pub fn quarts() -> Retained<NSUnitVolume>;

        #[unsafe(method(gallons))]
        #[unsafe(method_family = none)]
        pub fn gallons() -> Retained<NSUnitVolume>;

        #[unsafe(method(imperialTeaspoons))]
        #[unsafe(method_family = none)]
        pub fn imperialTeaspoons() -> Retained<NSUnitVolume>;

        #[unsafe(method(imperialTablespoons))]
        #[unsafe(method_family = none)]
        pub fn imperialTablespoons() -> Retained<NSUnitVolume>;

        #[unsafe(method(imperialFluidOunces))]
        #[unsafe(method_family = none)]
        pub fn imperialFluidOunces() -> Retained<NSUnitVolume>;

        #[unsafe(method(imperialPints))]
        #[unsafe(method_family = none)]
        pub fn imperialPints() -> Retained<NSUnitVolume>;

        #[unsafe(method(imperialQuarts))]
        #[unsafe(method_family = none)]
        pub fn imperialQuarts() -> Retained<NSUnitVolume>;

        #[unsafe(method(imperialGallons))]
        #[unsafe(method_family = none)]
        pub fn imperialGallons() -> Retained<NSUnitVolume>;

        #[unsafe(method(metricCups))]
        #[unsafe(method_family = none)]
        pub fn metricCups() -> Retained<NSUnitVolume>;
    );
}

/// Methods declared on superclass `NSDimension`.
impl NSUnitVolume {
    extern_methods!(
        #[cfg(feature = "NSString")]
        #[unsafe(method(initWithSymbol:converter:))]
        #[unsafe(method_family = init)]
        pub fn initWithSymbol_converter(
            this: Allocated<Self>,
            symbol: &NSString,
            converter: &NSUnitConverter,
        ) -> Retained<Self>;

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

/// Methods declared on superclass `NSUnit`.
impl NSUnitVolume {
    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>;

        #[cfg(feature = "NSString")]
        #[unsafe(method(initWithSymbol:))]
        #[unsafe(method_family = init)]
        pub fn initWithSymbol(this: Allocated<Self>, symbol: &NSString) -> Retained<Self>;
    );
}
