objc2-av-foundation 0.3.2

Bindings to the AVFoundation framework
Documentation
//! 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::*;

/// These constants represents the eviction priority of downloaded assets.
///
/// See also [Apple's documentation](https://developer.apple.com/documentation/avfoundation/avassetdownloadedassetevictionpriority?language=objc)
// NS_TYPED_ENUM
pub type AVAssetDownloadedAssetEvictionPriority = NSString;

extern "C" {
    /// Used to mark assets with the highest priority. They will be the last to be purged.
    ///
    /// See also [Apple's documentation](https://developer.apple.com/documentation/avfoundation/avassetdownloadedassetevictionpriorityimportant?language=objc)
    pub static AVAssetDownloadedAssetEvictionPriorityImportant:
        &'static AVAssetDownloadedAssetEvictionPriority;
}

extern "C" {
    /// Used to mark assets have the default priority. They will be the first to be purged.
    ///
    /// See also [Apple's documentation](https://developer.apple.com/documentation/avfoundation/avassetdownloadedassetevictionprioritydefault?language=objc)
    pub static AVAssetDownloadedAssetEvictionPriorityDefault:
        &'static AVAssetDownloadedAssetEvictionPriority;
}

extern_class!(
    /// An AVAssetDownloadStorageManager manages the policy for automatic purging of downloaded AVAssets. The policy is vended as AVAssetDownloadStorageManagementPolicy object.
    ///
    /// When a storage management policy needs to be set on an asset, sharedDownloadStorageManager singleton needs to be fetched.
    /// The new policy can then be set by using setStorageManagementPolicy and the location of the downloaded asset.
    ///
    /// See also [Apple's documentation](https://developer.apple.com/documentation/avfoundation/avassetdownloadstoragemanager?language=objc)
    #[unsafe(super(NSObject))]
    #[derive(Debug, PartialEq, Eq, Hash)]
    pub struct AVAssetDownloadStorageManager;
);

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

impl AVAssetDownloadStorageManager {
    extern_methods!(
        /// returns singleton instance.
        #[unsafe(method(sharedDownloadStorageManager))]
        #[unsafe(method_family = none)]
        pub unsafe fn sharedDownloadStorageManager() -> Retained<AVAssetDownloadStorageManager>;

        /// Sets the policy for asset with disk backing at downloadStorageURL.
        ///
        /// - Parameter downloadStorageURL: The location of downloaded asset.
        #[unsafe(method(setStorageManagementPolicy:forURL:))]
        #[unsafe(method_family = none)]
        pub unsafe fn setStorageManagementPolicy_forURL(
            &self,
            storage_management_policy: &AVAssetDownloadStorageManagementPolicy,
            download_storage_url: &NSURL,
        );

        /// Returns the storage management policy for asset downloaded at downloadStorageURL. This may be nil if a storageManagementPolicy was never set on the downloaded asset.
        ///
        /// - Parameter downloadStorageURL: The location of downloaded asset.
        #[unsafe(method(storageManagementPolicyForURL:))]
        #[unsafe(method_family = none)]
        pub unsafe fn storageManagementPolicyForURL(
            &self,
            download_storage_url: &NSURL,
        ) -> Option<Retained<AVAssetDownloadStorageManagementPolicy>>;
    );
}

/// Methods declared on superclass `NSObject`.
impl AVAssetDownloadStorageManager {
    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>;
    );
}

extern_class!(
    /// A class to inform the system of a policy for automatic purging of downloaded AVAssets.
    ///
    /// System will put in best-effort to evict all the assets based on expirationDate before evicting based on priority.
    ///
    /// See also [Apple's documentation](https://developer.apple.com/documentation/avfoundation/avassetdownloadstoragemanagementpolicy?language=objc)
    #[unsafe(super(NSObject))]
    #[derive(Debug, PartialEq, Eq, Hash)]
    pub struct AVAssetDownloadStorageManagementPolicy;
);

extern_conformance!(
    unsafe impl NSCopying for AVAssetDownloadStorageManagementPolicy {}
);

unsafe impl CopyingHelper for AVAssetDownloadStorageManagementPolicy {
    type Result = Self;
}

extern_conformance!(
    unsafe impl NSMutableCopying for AVAssetDownloadStorageManagementPolicy {}
);

unsafe impl MutableCopyingHelper for AVAssetDownloadStorageManagementPolicy {
    type Result = AVMutableAssetDownloadStorageManagementPolicy;
}

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

impl AVAssetDownloadStorageManagementPolicy {
    extern_methods!(
        /// Indicates the eviction priority of downloaded asset.
        ///
        /// Assets with default priority will be purged first before assets with higher priorities.
        /// In case this is not set, default priority is used.
        #[unsafe(method(priority))]
        #[unsafe(method_family = none)]
        pub unsafe fn priority(&self) -> Retained<AVAssetDownloadedAssetEvictionPriority>;

        /// Returns the expiration date of asset.
        #[unsafe(method(expirationDate))]
        #[unsafe(method_family = none)]
        pub unsafe fn expirationDate(&self) -> Retained<NSDate>;
    );
}

/// Methods declared on superclass `NSObject`.
impl AVAssetDownloadStorageManagementPolicy {
    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>;
    );
}

extern_class!(
    /// A mutable subclass of AVAssetDownloadStorageManagementPolicy.
    ///
    /// System will put in best-effort to evict all the assets based on expirationDate before evicting based on priority.
    ///
    /// See also [Apple's documentation](https://developer.apple.com/documentation/avfoundation/avmutableassetdownloadstoragemanagementpolicy?language=objc)
    #[unsafe(super(AVAssetDownloadStorageManagementPolicy, NSObject))]
    #[derive(Debug, PartialEq, Eq, Hash)]
    pub struct AVMutableAssetDownloadStorageManagementPolicy;
);

extern_conformance!(
    unsafe impl NSCopying for AVMutableAssetDownloadStorageManagementPolicy {}
);

unsafe impl CopyingHelper for AVMutableAssetDownloadStorageManagementPolicy {
    type Result = AVAssetDownloadStorageManagementPolicy;
}

extern_conformance!(
    unsafe impl NSMutableCopying for AVMutableAssetDownloadStorageManagementPolicy {}
);

unsafe impl MutableCopyingHelper for AVMutableAssetDownloadStorageManagementPolicy {
    type Result = Self;
}

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

impl AVMutableAssetDownloadStorageManagementPolicy {
    extern_methods!(
        /// Indicates the eviction priority of downloaded asset.
        ///
        /// Assets with default priority will be purged first before assets with higher priorities.
        /// In case this is not set, default priority is used.
        #[unsafe(method(priority))]
        #[unsafe(method_family = none)]
        pub unsafe fn priority(&self) -> Retained<AVAssetDownloadedAssetEvictionPriority>;

        /// Setter for [`priority`][Self::priority].
        ///
        /// This is [copied][objc2_foundation::NSCopying::copy] when set.
        #[unsafe(method(setPriority:))]
        #[unsafe(method_family = none)]
        pub unsafe fn setPriority(&self, priority: &AVAssetDownloadedAssetEvictionPriority);

        /// Returns the expiration date of asset.
        #[unsafe(method(expirationDate))]
        #[unsafe(method_family = none)]
        pub unsafe fn expirationDate(&self) -> Retained<NSDate>;

        /// Setter for [`expirationDate`][Self::expirationDate].
        ///
        /// This is [copied][objc2_foundation::NSCopying::copy] when set.
        #[unsafe(method(setExpirationDate:))]
        #[unsafe(method_family = none)]
        pub unsafe fn setExpirationDate(&self, expiration_date: &NSDate);
    );
}

/// Methods declared on superclass `NSObject`.
impl AVMutableAssetDownloadStorageManagementPolicy {
    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>;
    );
}