@@ -14,6 +14,7 @@ use std::os::raw::c_void;
14
14
use base:: { id, BOOL , NO , SEL , nil} ;
15
15
use block:: Block ;
16
16
use libc;
17
+ use objc_encode:: { Encode , Encoding } ;
17
18
18
19
19
20
#[ cfg( target_pointer_width = "32" ) ]
@@ -37,7 +38,7 @@ mod macos {
37
38
use base:: id;
38
39
use core_graphics_types:: base:: CGFloat ;
39
40
use core_graphics_types:: geometry:: CGRect ;
40
- use objc ;
41
+ use objc_encode :: { Encode , Encoding } ;
41
42
42
43
#[ repr( C ) ]
43
44
#[ derive( Copy , Clone ) ]
@@ -56,13 +57,9 @@ mod macos {
56
57
}
57
58
}
58
59
59
- unsafe impl objc:: Encode for NSPoint {
60
- fn encode ( ) -> objc:: Encoding {
61
- let encoding = format ! ( "{{CGPoint={}{}}}" ,
62
- CGFloat :: encode( ) . as_str( ) ,
63
- CGFloat :: encode( ) . as_str( ) ) ;
64
- unsafe { objc:: Encoding :: from_str ( & encoding) }
65
- }
60
+ unsafe impl Encode for NSPoint {
61
+ const ENCODING : Encoding < ' static > =
62
+ Encoding :: Struct ( "CGPoint" , & [ CGFloat :: ENCODING , CGFloat :: ENCODING ] ) ;
66
63
}
67
64
68
65
#[ repr( C ) ]
@@ -82,13 +79,9 @@ mod macos {
82
79
}
83
80
}
84
81
85
- unsafe impl objc:: Encode for NSSize {
86
- fn encode ( ) -> objc:: Encoding {
87
- let encoding = format ! ( "{{CGSize={}{}}}" ,
88
- CGFloat :: encode( ) . as_str( ) ,
89
- CGFloat :: encode( ) . as_str( ) ) ;
90
- unsafe { objc:: Encoding :: from_str ( & encoding) }
91
- }
82
+ unsafe impl Encode for NSSize {
83
+ const ENCODING : Encoding < ' static > =
84
+ Encoding :: Struct ( "CGSize" , & [ CGFloat :: ENCODING , CGFloat :: ENCODING ] ) ;
92
85
}
93
86
94
87
#[ repr( C ) ]
@@ -122,13 +115,9 @@ mod macos {
122
115
}
123
116
}
124
117
125
- unsafe impl objc:: Encode for NSRect {
126
- fn encode ( ) -> objc:: Encoding {
127
- let encoding = format ! ( "{{CGRect={}{}}}" ,
128
- NSPoint :: encode( ) . as_str( ) ,
129
- NSSize :: encode( ) . as_str( ) ) ;
130
- unsafe { objc:: Encoding :: from_str ( & encoding) }
131
- }
118
+ unsafe impl Encode for NSRect {
119
+ const ENCODING : Encoding < ' static > =
120
+ Encoding :: Struct ( "CGRect" , & [ NSPoint :: ENCODING , NSSize :: ENCODING ] ) ;
132
121
}
133
122
134
123
// Same as CGRectEdge
@@ -140,6 +129,8 @@ mod macos {
140
129
NSRectMaxYEdge ,
141
130
}
142
131
132
+ impl_Encode ! ( NSRectEdge , u32 ) ;
133
+
143
134
#[ link( name = "Foundation" , kind = "framework" ) ]
144
135
extern {
145
136
fn NSInsetRect ( rect : NSRect , x : CGFloat , y : CGFloat ) -> NSRect ;
@@ -169,6 +160,11 @@ pub struct NSRange {
169
160
pub length : NSUInteger ,
170
161
}
171
162
163
+ unsafe impl Encode for NSRange {
164
+ const ENCODING : Encoding < ' static > =
165
+ Encoding :: Struct ( "_NSRange" , & [ NSUInteger :: ENCODING , NSUInteger :: ENCODING ] ) ;
166
+ }
167
+
172
168
impl NSRange {
173
169
#[ inline]
174
170
pub fn new ( location : NSUInteger , length : NSUInteger ) -> NSRange {
@@ -212,6 +208,17 @@ pub struct NSOperatingSystemVersion {
212
208
pub patchVersion : NSUInteger ,
213
209
}
214
210
211
+ unsafe impl Encode for NSOperatingSystemVersion {
212
+ const ENCODING : Encoding < ' static > = Encoding :: Struct (
213
+ "NSOperatingSystemVersion" ,
214
+ & [
215
+ NSUInteger :: ENCODING ,
216
+ NSUInteger :: ENCODING ,
217
+ NSUInteger :: ENCODING ,
218
+ ] ,
219
+ ) ;
220
+ }
221
+
215
222
impl NSOperatingSystemVersion {
216
223
#[ inline]
217
224
pub fn new ( majorVersion : NSUInteger , minorVersion : NSUInteger , patchVersion : NSUInteger ) -> NSOperatingSystemVersion {
@@ -593,6 +600,8 @@ bitflags! {
593
600
}
594
601
}
595
602
603
+ impl_Encode ! ( NSEnumerationOptions , libc:: c_ulonglong) ;
604
+
596
605
pub type NSComparator = * mut Block < ( id , id ) , NSComparisonResult > ;
597
606
598
607
#[ repr( isize ) ]
@@ -603,6 +612,8 @@ pub enum NSComparisonResult {
603
612
NSOrderedDescending = 1
604
613
}
605
614
615
+ impl_Encode ! ( NSComparisonResult , isize ) ;
616
+
606
617
pub trait NSString : Sized {
607
618
unsafe fn alloc ( _: Self ) -> id {
608
619
msg_send ! [ class!( NSString ) , alloc]
@@ -669,6 +680,23 @@ struct NSFastEnumerationState {
669
680
pub extra : [ libc:: c_ulong ; 5 ]
670
681
}
671
682
683
+ unsafe impl Encode for NSFastEnumerationState {
684
+ const ENCODING : Encoding < ' static > = Encoding :: Struct (
685
+ "?" ,
686
+ & [
687
+ libc:: c_ulong:: ENCODING ,
688
+ Encoding :: Pointer ( & Encoding :: Object ) ,
689
+ Encoding :: Pointer ( & libc:: c_ulong:: ENCODING ) ,
690
+ Encoding :: Array ( 5 , & libc:: c_ulong:: ENCODING ) ,
691
+ ] ,
692
+ ) ;
693
+ }
694
+
695
+ unsafe impl Encode for & ' _ NSFastEnumerationState {
696
+ const ENCODING : Encoding < ' static > =
697
+ Encoding :: Pointer ( & NSFastEnumerationState :: ENCODING ) ;
698
+ }
699
+
672
700
const NS_FAST_ENUM_BUF_SIZE : usize = 16 ;
673
701
674
702
pub struct NSFastIterator {
@@ -677,7 +705,7 @@ pub struct NSFastIterator {
677
705
mut_val : Option < libc:: c_ulong > ,
678
706
len : usize ,
679
707
idx : usize ,
680
- object : id
708
+ object : id ,
681
709
}
682
710
683
711
impl Iterator for NSFastIterator {
@@ -774,6 +802,8 @@ bitflags! {
774
802
}
775
803
}
776
804
805
+ impl_Encode ! ( NSURLBookmarkCreationOptions , NSUInteger ) ;
806
+
777
807
pub type NSURLBookmarkFileCreationOptions = NSURLBookmarkCreationOptions ;
778
808
779
809
bitflags ! {
@@ -784,6 +814,7 @@ bitflags! {
784
814
}
785
815
}
786
816
817
+ impl_Encode ! ( NSURLBookmarkResolutionOptions , NSUInteger ) ;
787
818
788
819
pub trait NSURL : Sized {
789
820
unsafe fn alloc ( _: Self ) -> id ;
@@ -1337,6 +1368,8 @@ bitflags! {
1337
1368
}
1338
1369
}
1339
1370
1371
+ impl_Encode ! ( NSDataReadingOptions , libc:: c_ulonglong) ;
1372
+
1340
1373
bitflags ! {
1341
1374
pub struct NSDataBase64EncodingOptions : libc:: c_ulonglong {
1342
1375
const NSDataBase64Encoding64CharacterLineLength = 1 << 0 ;
@@ -1346,26 +1379,34 @@ bitflags! {
1346
1379
}
1347
1380
}
1348
1381
1382
+ impl_Encode ! ( NSDataBase64EncodingOptions , libc:: c_ulonglong) ;
1383
+
1349
1384
bitflags ! {
1350
1385
pub struct NSDataBase64DecodingOptions : libc:: c_ulonglong {
1351
1386
const NSDataBase64DecodingIgnoreUnknownCharacters = 1 << 0 ;
1352
1387
}
1353
1388
}
1354
1389
1390
+ impl_Encode ! ( NSDataBase64DecodingOptions , libc:: c_ulonglong) ;
1391
+
1355
1392
bitflags ! {
1356
1393
pub struct NSDataWritingOptions : libc:: c_ulonglong {
1357
1394
const NSDataWritingAtomic = 1 << 0 ;
1358
1395
const NSDataWritingWithoutOverwriting = 1 << 1 ;
1359
1396
}
1360
1397
}
1361
1398
1399
+ impl_Encode ! ( NSDataWritingOptions , libc:: c_ulonglong) ;
1400
+
1362
1401
bitflags ! {
1363
1402
pub struct NSDataSearchOptions : libc:: c_ulonglong {
1364
1403
const NSDataSearchBackwards = 1 << 0 ;
1365
1404
const NSDataSearchAnchored = 1 << 1 ;
1366
1405
}
1367
1406
}
1368
1407
1408
+ impl_Encode ! ( NSDataSearchOptions , libc:: c_ulonglong) ;
1409
+
1369
1410
pub trait NSUserDefaults {
1370
1411
unsafe fn standardUserDefaults ( ) -> Self ;
1371
1412
0 commit comments