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

use crate::*;

extern_class!(
    /// Represents a read or write request from a central.
    ///
    /// See also [Apple's documentation](https://developer.apple.com/documentation/corebluetooth/cbattrequest?language=objc)
    #[unsafe(super(NSObject))]
    #[derive(Debug, PartialEq, Eq, Hash)]
    pub struct CBATTRequest;
);

unsafe impl NSObjectProtocol for CBATTRequest {}

impl CBATTRequest {
    extern_methods!(
        #[unsafe(method(init))]
        #[unsafe(method_family = init)]
        pub unsafe fn init(this: Allocated<Self>) -> Retained<Self>;

        #[cfg(all(feature = "CBCentral", feature = "CBPeer"))]
        /// The central that originated the request.
        #[unsafe(method(central))]
        #[unsafe(method_family = none)]
        pub unsafe fn central(&self) -> Retained<CBCentral>;

        #[cfg(all(feature = "CBAttribute", feature = "CBCharacteristic"))]
        /// The characteristic whose value will be read or written.
        #[unsafe(method(characteristic))]
        #[unsafe(method_family = none)]
        pub unsafe fn characteristic(&self) -> Retained<CBCharacteristic>;

        /// The zero-based index of the first byte for the read or write.
        #[unsafe(method(offset))]
        #[unsafe(method_family = none)]
        pub unsafe fn offset(&self) -> NSUInteger;

        /// The data being read or written.
        /// For read requests,
        /// <i>
        /// value
        /// </i>
        /// will be nil and should be set before responding via
        ///
        /// ```text
        ///  respondToRequest:withResult:
        /// ```
        ///
        /// .
        /// For write requests,
        /// <i>
        /// value
        /// </i>
        /// will contain the data to be written.
        #[unsafe(method(value))]
        #[unsafe(method_family = none)]
        pub unsafe fn value(&self) -> Option<Retained<NSData>>;

        /// Setter for [`value`][Self::value].
        #[unsafe(method(setValue:))]
        #[unsafe(method_family = none)]
        pub unsafe fn setValue(&self, value: Option<&NSData>);
    );
}

/// Methods declared on superclass `NSObject`.
impl CBATTRequest {
    extern_methods!(
        #[unsafe(method(new))]
        #[unsafe(method_family = new)]
        pub unsafe fn new() -> Retained<Self>;
    );
}
