1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
//! This file has been automatically generated by `objc2`'s `header-translator`.
//! DO NOT EDIT
use objc2::__framework_prelude::*;
use objc2_foundation::*;

use crate::*;

// NS_ENUM
#[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct SKProductPeriodUnit(pub NSUInteger);
impl SKProductPeriodUnit {
    #[doc(alias = "SKProductPeriodUnitDay")]
    pub const Day: Self = Self(0);
    #[doc(alias = "SKProductPeriodUnitWeek")]
    pub const Week: Self = Self(1);
    #[doc(alias = "SKProductPeriodUnitMonth")]
    pub const Month: Self = Self(2);
    #[doc(alias = "SKProductPeriodUnitYear")]
    pub const Year: Self = Self(3);
}

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

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

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

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

unsafe impl Send for SKProductSubscriptionPeriod {}

unsafe impl Sync for SKProductSubscriptionPeriod {}

unsafe impl NSObjectProtocol for SKProductSubscriptionPeriod {}

extern_methods!(
    unsafe impl SKProductSubscriptionPeriod {
        #[method(numberOfUnits)]
        pub unsafe fn numberOfUnits(&self) -> NSUInteger;

        #[method(unit)]
        pub unsafe fn unit(&self) -> SKProductPeriodUnit;
    }
);

extern_methods!(
    /// Methods declared on superclass `NSObject`
    unsafe impl SKProductSubscriptionPeriod {
        #[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>;
    }
);

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

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

unsafe impl Send for SKProduct {}

unsafe impl Sync for SKProduct {}

unsafe impl NSObjectProtocol for SKProduct {}

extern_methods!(
    unsafe impl SKProduct {
        #[method_id(@__retain_semantics Other localizedDescription)]
        pub unsafe fn localizedDescription(&self) -> Retained<NSString>;

        #[method_id(@__retain_semantics Other localizedTitle)]
        pub unsafe fn localizedTitle(&self) -> Retained<NSString>;

        #[method_id(@__retain_semantics Other price)]
        pub unsafe fn price(&self) -> Retained<NSDecimalNumber>;

        #[method_id(@__retain_semantics Other priceLocale)]
        pub unsafe fn priceLocale(&self) -> Retained<NSLocale>;

        #[method_id(@__retain_semantics Other productIdentifier)]
        pub unsafe fn productIdentifier(&self) -> Retained<NSString>;

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

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

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

        #[deprecated]
        #[method_id(@__retain_semantics Other contentLengths)]
        pub unsafe fn contentLengths(&self) -> Retained<NSArray<NSNumber>>;

        #[method_id(@__retain_semantics Other downloadContentLengths)]
        pub unsafe fn downloadContentLengths(&self) -> Retained<NSArray<NSNumber>>;

        #[deprecated]
        #[method_id(@__retain_semantics Other contentVersion)]
        pub unsafe fn contentVersion(&self) -> Retained<NSString>;

        #[method_id(@__retain_semantics Other downloadContentVersion)]
        pub unsafe fn downloadContentVersion(&self) -> Retained<NSString>;

        #[method_id(@__retain_semantics Other subscriptionPeriod)]
        pub unsafe fn subscriptionPeriod(&self) -> Option<Retained<SKProductSubscriptionPeriod>>;

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

        #[method_id(@__retain_semantics Other subscriptionGroupIdentifier)]
        pub unsafe fn subscriptionGroupIdentifier(&self) -> Option<Retained<NSString>>;

        #[cfg(feature = "SKProductDiscount")]
        #[method_id(@__retain_semantics Other discounts)]
        pub unsafe fn discounts(&self) -> Retained<NSArray<SKProductDiscount>>;
    }
);

extern_methods!(
    /// Methods declared on superclass `NSObject`
    unsafe impl SKProduct {
        #[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>;
    }
);