12
12
use base:: { id, nil, BOOL , NO , SEL } ;
13
13
use block:: Block ;
14
14
use libc;
15
+ use objc_encode:: { Encode , Encoding } ;
15
16
use std:: os:: raw:: c_void;
16
17
use std:: ptr;
17
18
@@ -35,7 +36,7 @@ mod macos {
35
36
use base:: id;
36
37
use core_graphics_types:: base:: CGFloat ;
37
38
use core_graphics_types:: geometry:: CGRect ;
38
- use objc ;
39
+ use objc_encode :: { Encode , Encoding } ;
39
40
use std:: mem;
40
41
41
42
#[ repr( C ) ]
@@ -52,15 +53,9 @@ mod macos {
52
53
}
53
54
}
54
55
55
- unsafe impl objc:: Encode for NSPoint {
56
- fn encode ( ) -> objc:: Encoding {
57
- let encoding = format ! (
58
- "{{CGPoint={}{}}}" ,
59
- CGFloat :: encode( ) . as_str( ) ,
60
- CGFloat :: encode( ) . as_str( )
61
- ) ;
62
- unsafe { objc:: Encoding :: from_str ( & encoding) }
63
- }
56
+ unsafe impl Encode for NSPoint {
57
+ const ENCODING : Encoding < ' static > =
58
+ Encoding :: Struct ( "CGPoint" , & [ CGFloat :: ENCODING , CGFloat :: ENCODING ] ) ;
64
59
}
65
60
66
61
#[ repr( C ) ]
@@ -80,15 +75,9 @@ mod macos {
80
75
}
81
76
}
82
77
83
- unsafe impl objc:: Encode for NSSize {
84
- fn encode ( ) -> objc:: Encoding {
85
- let encoding = format ! (
86
- "{{CGSize={}{}}}" ,
87
- CGFloat :: encode( ) . as_str( ) ,
88
- CGFloat :: encode( ) . as_str( )
89
- ) ;
90
- unsafe { objc:: Encoding :: from_str ( & encoding) }
91
- }
78
+ unsafe impl Encode for NSSize {
79
+ const ENCODING : Encoding < ' static > =
80
+ Encoding :: Struct ( "CGSize" , & [ CGFloat :: ENCODING , CGFloat :: ENCODING ] ) ;
92
81
}
93
82
94
83
#[ repr( C ) ]
@@ -118,15 +107,9 @@ mod macos {
118
107
}
119
108
}
120
109
121
- unsafe impl objc:: Encode for NSRect {
122
- fn encode ( ) -> objc:: Encoding {
123
- let encoding = format ! (
124
- "{{CGRect={}{}}}" ,
125
- NSPoint :: encode( ) . as_str( ) ,
126
- NSSize :: encode( ) . as_str( )
127
- ) ;
128
- unsafe { objc:: Encoding :: from_str ( & encoding) }
129
- }
110
+ unsafe impl Encode for NSRect {
111
+ const ENCODING : Encoding < ' static > =
112
+ Encoding :: Struct ( "CGRect" , & [ NSPoint :: ENCODING , NSSize :: ENCODING ] ) ;
130
113
}
131
114
132
115
// Same as CGRectEdge
@@ -138,6 +121,8 @@ mod macos {
138
121
NSRectMaxYEdge ,
139
122
}
140
123
124
+ impl_Encode ! ( NSRectEdge , u32 ) ;
125
+
141
126
#[ link( name = "Foundation" , kind = "framework" ) ]
142
127
extern "C" {
143
128
fn NSInsetRect ( rect : NSRect , x : CGFloat , y : CGFloat ) -> NSRect ;
@@ -166,6 +151,11 @@ pub struct NSRange {
166
151
pub length : NSUInteger ,
167
152
}
168
153
154
+ unsafe impl Encode for NSRange {
155
+ const ENCODING : Encoding < ' static > =
156
+ Encoding :: Struct ( "_NSRange" , & [ NSUInteger :: ENCODING , NSUInteger :: ENCODING ] ) ;
157
+ }
158
+
169
159
impl NSRange {
170
160
#[ inline]
171
161
pub fn new ( location : NSUInteger , length : NSUInteger ) -> NSRange {
@@ -208,6 +198,17 @@ pub struct NSOperatingSystemVersion {
208
198
pub patchVersion : NSUInteger ,
209
199
}
210
200
201
+ unsafe impl Encode for NSOperatingSystemVersion {
202
+ const ENCODING : Encoding < ' static > = Encoding :: Struct (
203
+ "NSOperatingSystemVersion" ,
204
+ & [
205
+ NSUInteger :: ENCODING ,
206
+ NSUInteger :: ENCODING ,
207
+ NSUInteger :: ENCODING ,
208
+ ] ,
209
+ ) ;
210
+ }
211
+
211
212
impl NSOperatingSystemVersion {
212
213
#[ inline]
213
214
pub fn new (
@@ -629,6 +630,8 @@ bitflags! {
629
630
}
630
631
}
631
632
633
+ impl_Encode ! ( NSEnumerationOptions , libc:: c_ulonglong) ;
634
+
632
635
pub type NSComparator = * mut Block < ( id , id ) , NSComparisonResult > ;
633
636
634
637
#[ repr( isize ) ]
@@ -639,6 +642,8 @@ pub enum NSComparisonResult {
639
642
NSOrderedDescending = 1 ,
640
643
}
641
644
645
+ impl_Encode ! ( NSComparisonResult , isize ) ;
646
+
642
647
pub trait NSString : Sized {
643
648
unsafe fn alloc ( _: Self ) -> id {
644
649
msg_send ! [ class!( NSString ) , alloc]
@@ -703,6 +708,22 @@ struct NSFastEnumerationState {
703
708
pub extra : [ libc:: c_ulong ; 5 ] ,
704
709
}
705
710
711
+ unsafe impl Encode for NSFastEnumerationState {
712
+ const ENCODING : Encoding < ' static > = Encoding :: Struct (
713
+ "?" ,
714
+ & [
715
+ libc:: c_ulong:: ENCODING ,
716
+ Encoding :: Pointer ( & Encoding :: Object ) ,
717
+ Encoding :: Pointer ( & libc:: c_ulong:: ENCODING ) ,
718
+ Encoding :: Array ( 5 , & libc:: c_ulong:: ENCODING ) ,
719
+ ] ,
720
+ ) ;
721
+ }
722
+
723
+ unsafe impl Encode for & ' _ NSFastEnumerationState {
724
+ const ENCODING : Encoding < ' static > = Encoding :: Pointer ( & NSFastEnumerationState :: ENCODING ) ;
725
+ }
726
+
706
727
const NS_FAST_ENUM_BUF_SIZE : usize = 16 ;
707
728
708
729
pub struct NSFastIterator {
@@ -811,6 +832,8 @@ bitflags! {
811
832
}
812
833
}
813
834
835
+ impl_Encode ! ( NSURLBookmarkCreationOptions , NSUInteger ) ;
836
+
814
837
pub type NSURLBookmarkFileCreationOptions = NSURLBookmarkCreationOptions ;
815
838
816
839
bitflags ! {
@@ -821,6 +844,8 @@ bitflags! {
821
844
}
822
845
}
823
846
847
+ impl_Encode ! ( NSURLBookmarkResolutionOptions , NSUInteger ) ;
848
+
824
849
pub trait NSURL : Sized {
825
850
unsafe fn alloc ( _: Self ) -> id ;
826
851
@@ -1607,6 +1632,8 @@ bitflags! {
1607
1632
}
1608
1633
}
1609
1634
1635
+ impl_Encode ! ( NSDataReadingOptions , libc:: c_ulonglong) ;
1636
+
1610
1637
bitflags ! {
1611
1638
pub struct NSDataBase64EncodingOptions : libc:: c_ulonglong {
1612
1639
const NSDataBase64Encoding64CharacterLineLength = 1 << 0 ;
@@ -1616,26 +1643,34 @@ bitflags! {
1616
1643
}
1617
1644
}
1618
1645
1646
+ impl_Encode ! ( NSDataBase64EncodingOptions , libc:: c_ulonglong) ;
1647
+
1619
1648
bitflags ! {
1620
1649
pub struct NSDataBase64DecodingOptions : libc:: c_ulonglong {
1621
1650
const NSDataBase64DecodingIgnoreUnknownCharacters = 1 << 0 ;
1622
1651
}
1623
1652
}
1624
1653
1654
+ impl_Encode ! ( NSDataBase64DecodingOptions , libc:: c_ulonglong) ;
1655
+
1625
1656
bitflags ! {
1626
1657
pub struct NSDataWritingOptions : libc:: c_ulonglong {
1627
1658
const NSDataWritingAtomic = 1 << 0 ;
1628
1659
const NSDataWritingWithoutOverwriting = 1 << 1 ;
1629
1660
}
1630
1661
}
1631
1662
1663
+ impl_Encode ! ( NSDataWritingOptions , libc:: c_ulonglong) ;
1664
+
1632
1665
bitflags ! {
1633
1666
pub struct NSDataSearchOptions : libc:: c_ulonglong {
1634
1667
const NSDataSearchBackwards = 1 << 0 ;
1635
1668
const NSDataSearchAnchored = 1 << 1 ;
1636
1669
}
1637
1670
}
1638
1671
1672
+ impl_Encode ! ( NSDataSearchOptions , libc:: c_ulonglong) ;
1673
+
1639
1674
pub trait NSUserDefaults {
1640
1675
unsafe fn standardUserDefaults ( ) -> Self ;
1641
1676
0 commit comments