1
1
#[ cfg( feature = "block" ) ]
2
2
use alloc:: vec:: Vec ;
3
- use core:: ops:: Range ;
3
+ use core:: ops:: { Deref , DerefMut , Range } ;
4
4
use core:: slice;
5
5
use core:: { ffi:: c_void, ptr:: NonNull } ;
6
6
@@ -98,45 +98,45 @@ unsafe impl INSMutableCopying for NSData {
98
98
type Output = NSMutableData ;
99
99
}
100
100
101
+ impl Deref for NSData {
102
+ type Target = [ u8 ] ;
103
+
104
+ fn deref ( & self ) -> & [ u8 ] {
105
+ self . bytes ( )
106
+ }
107
+ }
108
+
101
109
pub unsafe trait INSMutableData : INSData {
102
110
fn bytes_mut ( & mut self ) -> & mut [ u8 ] {
103
111
let ptr: * mut c_void = unsafe { msg_send ! [ self , mutableBytes] } ;
104
112
// The bytes pointer may be null for length zero
105
- let ( ptr , len ) = if ptr. is_null ( ) {
106
- ( 0x1 as * mut u8 , 0 )
113
+ if ptr. is_null ( ) {
114
+ & mut [ ]
107
115
} else {
108
- ( ptr as * mut u8 , self . len ( ) )
109
- } ;
110
- unsafe { slice:: from_raw_parts_mut ( ptr, len) }
116
+ unsafe { slice:: from_raw_parts_mut ( ptr as * mut u8 , self . len ( ) ) }
117
+ }
111
118
}
112
119
120
+ /// Expands with zeroes, or truncates the buffer.
113
121
fn set_len ( & mut self , len : usize ) {
114
- unsafe {
115
- let _: ( ) = msg_send ! [ self , setLength: len] ;
116
- }
122
+ unsafe { msg_send ! [ self , setLength: len] }
117
123
}
118
124
119
125
fn append ( & mut self , bytes : & [ u8 ] ) {
120
126
let bytes_ptr = bytes. as_ptr ( ) as * const c_void ;
121
- unsafe {
122
- let _: ( ) = msg_send ! [
123
- self ,
124
- appendBytes: bytes_ptr,
125
- length: bytes. len( ) ,
126
- ] ;
127
- }
127
+ unsafe { msg_send ! [ self , appendBytes: bytes_ptr, length: bytes. len( ) ] }
128
128
}
129
129
130
130
fn replace_range ( & mut self , range : Range < usize > , bytes : & [ u8 ] ) {
131
131
let range = NSRange :: from ( range) ;
132
132
let bytes_ptr = bytes. as_ptr ( ) as * const c_void ;
133
133
unsafe {
134
- let _ : ( ) = msg_send ! [
134
+ msg_send ! [
135
135
self ,
136
- replaceBytesInRange: range,
137
- withBytes: bytes_ptr,
138
- length: bytes. len( ) ,
139
- ] ;
136
+ replaceBytesInRange: range,
137
+ withBytes: bytes_ptr,
138
+ length: bytes. len( ) ,
139
+ ]
140
140
}
141
141
}
142
142
@@ -160,6 +160,20 @@ unsafe impl INSMutableCopying for NSMutableData {
160
160
type Output = NSMutableData ;
161
161
}
162
162
163
+ impl Deref for NSMutableData {
164
+ type Target = [ u8 ] ;
165
+
166
+ fn deref ( & self ) -> & [ u8 ] {
167
+ self . bytes ( )
168
+ }
169
+ }
170
+
171
+ impl DerefMut for NSMutableData {
172
+ fn deref_mut ( & mut self ) -> & mut [ u8 ] {
173
+ self . bytes_mut ( )
174
+ }
175
+ }
176
+
163
177
#[ cfg( test) ]
164
178
mod tests {
165
179
use super :: { INSData , INSMutableData , NSData , NSMutableData } ;
@@ -171,8 +185,8 @@ mod tests {
171
185
fn test_bytes ( ) {
172
186
let bytes = [ 3 , 7 , 16 , 52 , 112 , 19 ] ;
173
187
let data = NSData :: with_bytes ( & bytes) ;
174
- assert ! ( data. len( ) == bytes. len( ) ) ;
175
- assert ! ( data. bytes( ) == bytes) ;
188
+ assert_eq ! ( data. len( ) , bytes. len( ) ) ;
189
+ assert_eq ! ( data. bytes( ) , bytes) ;
176
190
}
177
191
178
192
#[ test]
@@ -185,43 +199,43 @@ mod tests {
185
199
fn test_bytes_mut ( ) {
186
200
let mut data = NSMutableData :: with_bytes ( & [ 7 , 16 ] ) ;
187
201
data. bytes_mut ( ) [ 0 ] = 3 ;
188
- assert ! ( data. bytes( ) == [ 3 , 16 ] ) ;
202
+ assert_eq ! ( data. bytes( ) , [ 3 , 16 ] ) ;
189
203
}
190
204
191
205
#[ test]
192
206
fn test_set_len ( ) {
193
207
let mut data = NSMutableData :: with_bytes ( & [ 7 , 16 ] ) ;
194
208
data. set_len ( 4 ) ;
195
- assert ! ( data. len( ) == 4 ) ;
196
- assert ! ( data. bytes( ) == [ 7 , 16 , 0 , 0 ] ) ;
209
+ assert_eq ! ( data. len( ) , 4 ) ;
210
+ assert_eq ! ( data. bytes( ) , [ 7 , 16 , 0 , 0 ] ) ;
197
211
198
212
data. set_len ( 1 ) ;
199
- assert ! ( data. len( ) == 1 ) ;
200
- assert ! ( data. bytes( ) == [ 7 ] ) ;
213
+ assert_eq ! ( data. len( ) , 1 ) ;
214
+ assert_eq ! ( data. bytes( ) , [ 7 ] ) ;
201
215
}
202
216
203
217
#[ test]
204
218
fn test_append ( ) {
205
219
let mut data = NSMutableData :: with_bytes ( & [ 7 , 16 ] ) ;
206
220
data. append ( & [ 3 , 52 ] ) ;
207
- assert ! ( data. len( ) == 4 ) ;
208
- assert ! ( data. bytes( ) == [ 7 , 16 , 3 , 52 ] ) ;
221
+ assert_eq ! ( data. len( ) , 4 ) ;
222
+ assert_eq ! ( data. bytes( ) , [ 7 , 16 , 3 , 52 ] ) ;
209
223
}
210
224
211
225
#[ test]
212
226
fn test_replace ( ) {
213
227
let mut data = NSMutableData :: with_bytes ( & [ 7 , 16 ] ) ;
214
228
data. replace_range ( 0 ..0 , & [ 3 ] ) ;
215
- assert ! ( data. bytes( ) == [ 3 , 7 , 16 ] ) ;
229
+ assert_eq ! ( data. bytes( ) , [ 3 , 7 , 16 ] ) ;
216
230
217
231
data. replace_range ( 1 ..2 , & [ 52 , 13 ] ) ;
218
- assert ! ( data. bytes( ) == [ 3 , 52 , 13 , 16 ] ) ;
232
+ assert_eq ! ( data. bytes( ) , [ 3 , 52 , 13 , 16 ] ) ;
219
233
220
234
data. replace_range ( 2 ..4 , & [ 6 ] ) ;
221
- assert ! ( data. bytes( ) == [ 3 , 52 , 6 ] ) ;
235
+ assert_eq ! ( data. bytes( ) , [ 3 , 52 , 6 ] ) ;
222
236
223
237
data. set_bytes ( & [ 8 , 17 ] ) ;
224
- assert ! ( data. bytes( ) == [ 8 , 17 ] ) ;
238
+ assert_eq ! ( data. bytes( ) , [ 8 , 17 ] ) ;
225
239
}
226
240
227
241
#[ cfg( feature = "block" ) ]
0 commit comments