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
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
//! This file has been automatically generated by `objc2`'s `header-translator`.
//! DO NOT EDIT
use objc2::__framework_prelude::*;

use crate::*;

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

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

unsafe impl Send for NSTimeZone {}

unsafe impl Sync for NSTimeZone {}

#[cfg(feature = "NSObject")]
unsafe impl NSCoding for NSTimeZone {}

#[cfg(feature = "NSObject")]
unsafe impl NSCopying for NSTimeZone {}

unsafe impl NSObjectProtocol for NSTimeZone {}

#[cfg(feature = "NSObject")]
unsafe impl NSSecureCoding for NSTimeZone {}

extern_methods!(
    unsafe impl NSTimeZone {
        #[cfg(feature = "NSString")]
        #[method_id(@__retain_semantics Other name)]
        pub unsafe fn name(&self) -> Retained<NSString>;

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

        #[cfg(feature = "NSDate")]
        #[method(secondsFromGMTForDate:)]
        pub unsafe fn secondsFromGMTForDate(&self, a_date: &NSDate) -> NSInteger;

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

        #[cfg(feature = "NSDate")]
        #[method(isDaylightSavingTimeForDate:)]
        pub unsafe fn isDaylightSavingTimeForDate(&self, a_date: &NSDate) -> bool;

        #[cfg(feature = "NSDate")]
        #[method(daylightSavingTimeOffsetForDate:)]
        pub unsafe fn daylightSavingTimeOffsetForDate(&self, a_date: &NSDate) -> NSTimeInterval;

        #[cfg(feature = "NSDate")]
        #[method_id(@__retain_semantics Other nextDaylightSavingTimeTransitionAfterDate:)]
        pub unsafe fn nextDaylightSavingTimeTransitionAfterDate(
            &self,
            a_date: &NSDate,
        ) -> Option<Retained<NSDate>>;
    }
);

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

// NS_ENUM
#[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct NSTimeZoneNameStyle(pub NSInteger);
impl NSTimeZoneNameStyle {
    #[doc(alias = "NSTimeZoneNameStyleStandard")]
    pub const Standard: Self = Self(0);
    #[doc(alias = "NSTimeZoneNameStyleShortStandard")]
    pub const ShortStandard: Self = Self(1);
    #[doc(alias = "NSTimeZoneNameStyleDaylightSaving")]
    pub const DaylightSaving: Self = Self(2);
    #[doc(alias = "NSTimeZoneNameStyleShortDaylightSaving")]
    pub const ShortDaylightSaving: Self = Self(3);
    #[doc(alias = "NSTimeZoneNameStyleGeneric")]
    pub const Generic: Self = Self(4);
    #[doc(alias = "NSTimeZoneNameStyleShortGeneric")]
    pub const ShortGeneric: Self = Self(5);
}

unsafe impl Encode for NSTimeZoneNameStyle {
    const ENCODING: Encoding = NSInteger::ENCODING;
}

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

extern_methods!(
    /// NSExtendedTimeZone
    unsafe impl NSTimeZone {
        #[method_id(@__retain_semantics Other systemTimeZone)]
        pub unsafe fn systemTimeZone() -> Retained<NSTimeZone>;

        #[method(resetSystemTimeZone)]
        pub unsafe fn resetSystemTimeZone();

        #[method_id(@__retain_semantics Other defaultTimeZone)]
        pub unsafe fn defaultTimeZone() -> Retained<NSTimeZone>;

        #[method(setDefaultTimeZone:)]
        pub unsafe fn setDefaultTimeZone(default_time_zone: &NSTimeZone);

        #[method_id(@__retain_semantics Other localTimeZone)]
        pub unsafe fn localTimeZone() -> Retained<NSTimeZone>;

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

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

        #[cfg(all(feature = "NSDictionary", feature = "NSString"))]
        #[method(setAbbreviationDictionary:)]
        pub unsafe fn setAbbreviationDictionary(
            abbreviation_dictionary: &NSDictionary<NSString, NSString>,
        );

        #[cfg(feature = "NSString")]
        #[method_id(@__retain_semantics Other timeZoneDataVersion)]
        pub unsafe fn timeZoneDataVersion() -> Retained<NSString>;

        #[method(secondsFromGMT)]
        pub unsafe fn secondsFromGMT(&self) -> NSInteger;

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

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

        #[cfg(feature = "NSDate")]
        #[method(daylightSavingTimeOffset)]
        pub unsafe fn daylightSavingTimeOffset(&self) -> NSTimeInterval;

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

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

        #[method(isEqualToTimeZone:)]
        pub unsafe fn isEqualToTimeZone(&self, a_time_zone: &NSTimeZone) -> bool;

        #[cfg(all(feature = "NSLocale", feature = "NSString"))]
        #[method_id(@__retain_semantics Other localizedName:locale:)]
        pub unsafe fn localizedName_locale(
            &self,
            style: NSTimeZoneNameStyle,
            locale: Option<&NSLocale>,
        ) -> Option<Retained<NSString>>;
    }
);

extern_methods!(
    /// NSTimeZoneCreation
    unsafe impl NSTimeZone {
        #[cfg(feature = "NSString")]
        #[method_id(@__retain_semantics Other timeZoneWithName:)]
        pub unsafe fn timeZoneWithName(tz_name: &NSString) -> Option<Retained<Self>>;

        #[cfg(all(feature = "NSData", feature = "NSString"))]
        #[method_id(@__retain_semantics Other timeZoneWithName:data:)]
        pub unsafe fn timeZoneWithName_data(
            tz_name: &NSString,
            a_data: Option<&NSData>,
        ) -> Option<Retained<Self>>;

        #[cfg(feature = "NSString")]
        #[method_id(@__retain_semantics Init initWithName:)]
        pub unsafe fn initWithName(
            this: Allocated<Self>,
            tz_name: &NSString,
        ) -> Option<Retained<Self>>;

        #[cfg(all(feature = "NSData", feature = "NSString"))]
        #[method_id(@__retain_semantics Init initWithName:data:)]
        pub unsafe fn initWithName_data(
            this: Allocated<Self>,
            tz_name: &NSString,
            a_data: Option<&NSData>,
        ) -> Option<Retained<Self>>;

        #[method_id(@__retain_semantics Other timeZoneForSecondsFromGMT:)]
        pub unsafe fn timeZoneForSecondsFromGMT(seconds: NSInteger) -> Retained<Self>;

        #[cfg(feature = "NSString")]
        #[method_id(@__retain_semantics Other timeZoneWithAbbreviation:)]
        pub unsafe fn timeZoneWithAbbreviation(abbreviation: &NSString) -> Option<Retained<Self>>;
    }
);

extern "C" {
    #[cfg(all(feature = "NSNotification", feature = "NSString"))]
    pub static NSSystemTimeZoneDidChangeNotification: &'static NSNotificationName;
}