Skip to content

Commit ca5c2bb

Browse files
It seems we do not need specific Nullable types
According to rust-lang/rust#60300
1 parent 5ce536c commit ca5c2bb

File tree

8 files changed

+52
-127
lines changed

8 files changed

+52
-127
lines changed

src/avfoundation.rs

Lines changed: 19 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ extern "C" {
4242
fn choco_AVFoundation_AVAsynchronousKeyValueLoadingProtocol_instance_statusOfValueForKey_error(
4343
self_: ptr::objc::RawPtr,
4444
key: ptr::objc::RawPtr,
45-
error: *mut ptr::objc::NullableRawPtr,
45+
error: *mut Option<ptr::objc::RawPtr>,
4646
) -> AVKeyValueStatus;
4747

4848
fn choco_AVFoundation_AVAsynchronousKeyValueLoadingProtocol_instance_loadValuesAsynchronouslyForKeys_completionHandler(
@@ -58,7 +58,7 @@ pub trait AVAsynchronousKeyValueLoadingProtocol: NSObjectProtocol {
5858
key: &impl NSStringInterface,
5959
) -> Result<AVKeyValueStatus, NSError> {
6060
let self_raw = self.as_raw_ptr();
61-
let mut raw_unowned_error = ptr::objc::NullableRawPtr::default();
61+
let mut raw_unowned_error: Option<ptr::objc::RawPtr> = None;
6262
unsafe {
6363
let status = choco_AVFoundation_AVAsynchronousKeyValueLoadingProtocol_instance_statusOfValueForKey_error(
6464
self_raw,
@@ -97,7 +97,7 @@ extern "C" {
9797
fn choco_AVFoundation_AVAsset_class() -> ptr::objc::ClassPtr;
9898
fn choco_AVFoundation_AVAssetInterface_instance_tracks(
9999
self_: ptr::objc::RawPtr,
100-
) -> ptr::objc::NullableRawPtr;
100+
) -> Option<ptr::objc::RawPtr>;
101101
fn choco_AVFoundation_AVAssetInterface_instance_playable(self_: ptr::objc::RawPtr) -> BOOL;
102102
}
103103

@@ -169,7 +169,7 @@ extern "C" {
169169
class: ptr::objc::ClassPtr,
170170
url: ptr::objc::RawPtr,
171171
options: ptr::objc::RawPtr,
172-
) -> ptr::objc::NullableRawPtr;
172+
) -> Option<ptr::objc::RawPtr>;
173173
}
174174

175175
pub trait AVURLAssetInterface: AVAssetInterface {
@@ -356,10 +356,10 @@ extern "C" {
356356
fn choco_AVFoundation_AVAssetTrack_class() -> ptr::objc::ClassPtr;
357357
fn choco_AVFoundation_AVAssetTrackInterface_instance_mediaType(
358358
self_: ptr::objc::RawPtr,
359-
) -> ptr::objc::NullableRawPtr;
359+
) -> Option<ptr::objc::RawPtr>;
360360
fn choco_AVFoundation_AVAssetTrackInterface_instance_formatDescriptions(
361361
self_: ptr::objc::RawPtr,
362-
) -> ptr::objc::NullableRawPtr;
362+
) -> Option<ptr::objc::RawPtr>;
363363
}
364364

365365
pub trait AVAssetTrackInterface: NSObjectInterface
@@ -430,13 +430,13 @@ extern "C" {
430430
fn choco_AVFoundation_AVAssetReaderInterface_class_newWithAsset_error(
431431
class: ptr::objc::ClassPtr,
432432
asset: ptr::objc::RawPtr,
433-
error: *mut ptr::objc::NullableRawPtr,
434-
) -> ptr::objc::NullableRawPtr;
433+
error: *mut Option<ptr::objc::RawPtr>,
434+
) -> Option<ptr::objc::RawPtr>;
435435
}
436436

437437
pub trait AVAssetReaderInterface: NSObjectInterface {
438438
fn new_with_asset(asset: &impl AVAssetInterface) -> Result<Self::Owned, NSError> {
439-
let mut raw_unowned_error = ptr::objc::NullableRawPtr::default();
439+
let mut raw_unowned_error: Option<ptr::objc::RawPtr> = None;
440440
let raw_ptr = unsafe {
441441
choco_AVFoundation_AVAssetReaderInterface_class_newWithAsset_error(
442442
Self::class(),
@@ -605,14 +605,14 @@ extern "C" {
605605
fn choco_AVFoundation_AVPlayerItemInterface_class_newWithURL(
606606
class: ptr::objc::ClassPtr,
607607
url: ptr::objc::RawPtr,
608-
) -> ptr::objc::NullableRawPtr;
608+
) -> Option<ptr::objc::RawPtr>;
609609
fn choco_AVFoundation_AVPlayerItemInterface_class_newWithAsset(
610610
class: ptr::objc::ClassPtr,
611611
asset: ptr::objc::RawPtr,
612-
) -> ptr::objc::NullableRawPtr;
612+
) -> Option<ptr::objc::RawPtr>;
613613
fn choco_AVFoundation_AVPlayerItemInterface_instance_error(
614614
self_: ptr::objc::RawPtr,
615-
) -> ptr::objc::NullableRawPtr;
615+
) -> Option<ptr::objc::RawPtr>;
616616
}
617617

618618
pub trait AVPlayerItemInterface: NSObjectInterface
@@ -647,7 +647,6 @@ where
647647
let self_raw = self.as_raw_ptr();
648648
unsafe {
649649
choco_AVFoundation_AVPlayerItemInterface_instance_error(self_raw)
650-
.into_opt()
651650
.map(|raw| NSError::from_owned_ptr_unchecked(raw.consider_owned()))
652651
}
653652
}
@@ -694,20 +693,20 @@ extern "C" {
694693
fn choco_AVFoundation_AVPlayerInterface_class_newWithURL(
695694
class: ptr::objc::ClassPtr,
696695
url: ptr::objc::RawPtr,
697-
) -> ptr::objc::NullableRawPtr;
696+
) -> Option<ptr::objc::RawPtr>;
698697
fn choco_AVFoundation_AVPlayerInterface_class_newWithPlayerItem(
699698
class: ptr::objc::ClassPtr,
700699
item: ptr::objc::RawPtr,
701-
) -> ptr::objc::NullableRawPtr;
700+
) -> Option<ptr::objc::RawPtr>;
702701
fn choco_AVFoundation_AVPlayerInterface_instance_play(self_: ptr::objc::RawPtr);
703702
fn choco_AVFoundation_AVPlayerInterface_instance_pause(self_: ptr::objc::RawPtr);
704703
fn choco_AVFoundation_AVPlayerInterface_instance_rate(self_: ptr::objc::RawPtr) -> f32;
705704
fn choco_AVFoundation_AVPlayerInterface_instance_currentItem(
706705
self_: ptr::objc::RawPtr,
707-
) -> ptr::objc::NullableRawPtr;
706+
) -> Option<ptr::objc::RawPtr>;
708707
fn choco_AVFoundation_AVPlayerInterface_instance_error(
709708
self_: ptr::objc::RawPtr,
710-
) -> ptr::objc::NullableRawPtr;
709+
) -> Option<ptr::objc::RawPtr>;
711710
}
712711

713712
pub trait AVPlayerInterface: NSObjectInterface {
@@ -739,7 +738,6 @@ pub trait AVPlayerInterface: NSObjectInterface {
739738
let self_raw = self.as_raw_ptr();
740739
unsafe {
741740
choco_AVFoundation_AVPlayerInterface_instance_error(self_raw)
742-
.into_opt()
743741
.map(|raw| NSError::from_owned_ptr_unchecked(raw.consider_owned()))
744742
}
745743
}
@@ -748,7 +746,6 @@ pub trait AVPlayerInterface: NSObjectInterface {
748746
let self_raw = self.as_raw_ptr();
749747
unsafe {
750748
choco_AVFoundation_AVPlayerInterface_instance_currentItem(self_raw)
751-
.into_opt()
752749
.map(|raw| AVPlayerItem::from_owned_ptr_unchecked(raw.consider_owned()))
753750
}
754751
}
@@ -808,8 +805,8 @@ extern "C" {
808805
fn choco_AVFoundation_AVAudioPlayerInterface_class_newWithContentsOfURL_error(
809806
class: ptr::objc::ClassPtr,
810807
url: ptr::objc::RawPtr,
811-
error: *mut ptr::objc::NullableRawPtr,
812-
) -> ptr::objc::NullableRawPtr;
808+
error: *mut Option<ptr::objc::RawPtr>,
809+
) -> Option<ptr::objc::RawPtr>;
813810
fn choco_AVFoundation_AVAudioPlayerInterface_instance_play(self_: ptr::objc::RawPtr) -> BOOL;
814811
fn choco_AVFoundation_AVAudioPlayerInterface_instance_pause(self_: ptr::objc::RawPtr);
815812
fn choco_AVFoundation_AVAudioPlayerInterface_instance_stop(self_: ptr::objc::RawPtr);
@@ -818,7 +815,7 @@ extern "C" {
818815

819816
pub trait AVAudioPlayerInterface: NSObjectInterface {
820817
fn new_with_contents_of_url(url: &impl NSURLInterface) -> Result<Self::Owned, NSError> {
821-
let mut raw_unowned_error = ptr::objc::NullableRawPtr::default();
818+
let mut raw_unowned_error: Option<ptr::objc::RawPtr> = None;
822819
let raw_ptr = unsafe {
823820
choco_AVFoundation_AVAudioPlayerInterface_class_newWithContentsOfURL_error(
824821
Self::class(),

src/base/core_foundation.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ pub struct CFTypeID(usize);
3535
#[link(name = "CoreFoundation", kind = "framework")]
3636
extern "C" {
3737
fn CFRelease(cf: ptr::cf::RawRef);
38-
fn CFRetain(cf: ptr::cf::RawRef) -> ptr::cf::NullableRawRef;
38+
fn CFRetain(cf: ptr::cf::RawRef) -> Option<ptr::cf::RawRef>;
3939
fn CFShow(cf: ptr::cf::RawRef);
4040
fn CFGetRetainCount(cf: ptr::cf::RawRef) -> CFIndex;
4141
fn CFHash(cf: ptr::cf::RawRef) -> CFHashCode;

src/base/objc.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,23 +25,23 @@ extern "C" {
2525
fn choco_base_NSObjectProtocol_instance_hash(self_: ptr::objc::RawPtr) -> NSUInteger;
2626
fn choco_base_NSObjectProtocol_instance_isEqual(
2727
self_: ptr::objc::RawPtr,
28-
other: ptr::objc::NullableRawPtr,
28+
other: Option<ptr::objc::RawPtr>,
2929
) -> BOOL;
3030
fn choco_base_NSObjectProtocol_instance_isKindOfClass(
3131
self_: ptr::objc::RawPtr,
3232
class: ptr::objc::ClassPtr,
3333
) -> BOOL;
3434
fn choco_base_NSObjectProtocol_instance_description(
3535
self_: ptr::objc::RawPtr,
36-
) -> ptr::objc::NullableRawPtr;
36+
) -> Option<ptr::objc::RawPtr>;
3737
fn choco_base_NSObjectProtocol_instance_debugDescription(
3838
self_: ptr::objc::RawPtr,
39-
) -> ptr::objc::NullableRawPtr;
39+
) -> Option<ptr::objc::RawPtr>;
4040

4141
fn choco_base_NSObject_class() -> ptr::objc::ClassPtr;
4242
fn choco_base_NSObjectInterface_class_new(
4343
class: ptr::objc::ClassPtr,
44-
) -> ptr::objc::NullableRawPtr;
44+
) -> Option<ptr::objc::RawPtr>;
4545
}
4646

4747
impl<T> ptr::Retain for T

src/base/ptr.rs

Lines changed: 2 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ pub(crate) mod objc {
3535
#[link(name = "objc", kind = "dylib")]
3636
extern "C" {
3737
fn objc_release(value: RawPtr);
38-
fn objc_retain(value: RawPtr) -> NullableRawPtr;
38+
fn objc_retain(value: RawPtr) -> Option<RawPtr>;
3939
}
4040

4141
#[repr(C)]
@@ -64,30 +64,6 @@ pub(crate) mod objc {
6464
}
6565
}
6666

67-
// I would like to use Option<RawPtr> instead but I'm not sure
68-
// if its memory layout is guaranted to be the same.
69-
#[derive(Copy, Clone, Default)]
70-
#[repr(transparent)]
71-
pub struct NullableRawPtr {
72-
ptr: Option<NonNull<OpaqueObject>>,
73-
}
74-
75-
impl NullableRawPtr {
76-
pub fn into_opt(self) -> Option<RawPtr> {
77-
self.ptr.map(|ptr| RawPtr { ptr })
78-
}
79-
80-
pub fn unwrap(self) -> RawPtr {
81-
self.into_opt().expect("expecting a non null pointer")
82-
}
83-
}
84-
85-
impl From<RawPtr> for NullableRawPtr {
86-
fn from(ptr: RawPtr) -> Self {
87-
Self { ptr: Some(ptr.ptr) }
88-
}
89-
}
90-
9167
pub struct OwnedPtr {
9268
raw: RawPtr,
9369
}
@@ -153,35 +129,11 @@ pub(crate) mod objc {
153129
_private: [u8; 0],
154130
}
155131

156-
// I would like to use Option<ClassPtr> instead but I'm not sure
157-
// if its memory layout is guaranted to be the same.
158-
#[derive(Copy, Clone)]
159-
#[repr(transparent)]
160-
pub struct NullableClassPtr {
161-
ptr: Option<NonNull<OpaqueClass>>,
162-
}
163-
164-
impl NullableClassPtr {
165-
pub fn into_opt(self) -> Option<ClassPtr> {
166-
self.ptr.map(|ptr| ClassPtr { ptr })
167-
}
168-
169-
pub fn unwrap(self) -> ClassPtr {
170-
self.into_opt().expect("expecting a non-null class")
171-
}
172-
}
173-
174132
#[derive(Copy, Clone)]
175133
#[repr(transparent)]
176134
pub struct ClassPtr {
177135
ptr: NonNull<OpaqueClass>,
178136
}
179-
180-
impl From<ClassPtr> for NullableClassPtr {
181-
fn from(ptr: ClassPtr) -> Self {
182-
Self { ptr: Some(ptr.ptr) }
183-
}
184-
}
185137
}
186138

187139
pub(crate) mod cf {
@@ -190,7 +142,7 @@ pub(crate) mod cf {
190142
#[link(name = "CoreFoundation", kind = "framework")]
191143
extern "C" {
192144
fn CFRelease(cf: RawRef);
193-
fn CFRetain(cf: RawRef) -> NullableRawRef;
145+
fn CFRetain(cf: RawRef) -> Option<RawRef>;
194146
}
195147

196148
#[repr(C)]
@@ -204,24 +156,6 @@ pub(crate) mod cf {
204156
pub(super) ptr: NonNull<OpaqueCFType>,
205157
}
206158

207-
// I would like to use Option<RawRef> instead but I'm not sure
208-
// if its memory layout is guaranted to be the same.
209-
#[derive(Copy, Clone)]
210-
#[repr(transparent)]
211-
pub struct NullableRawRef {
212-
ptr: Option<NonNull<OpaqueCFType>>,
213-
}
214-
215-
impl NullableRawRef {
216-
fn into_opt(self) -> Option<RawRef> {
217-
self.ptr.map(|ptr| RawRef { ptr })
218-
}
219-
220-
pub fn unwrap(self) -> RawRef {
221-
self.into_opt().expect("expecting a non-null pointer")
222-
}
223-
}
224-
225159
pub struct OwnedRef {
226160
pub(super) raw: RawRef,
227161
}

0 commit comments

Comments
 (0)