@@ -37,16 +37,21 @@ pub struct PyByteInner {
37
37
38
38
impl TryFromObject for PyByteInner {
39
39
fn try_from_object ( vm : & VirtualMachine , obj : PyObjectRef ) -> PyResult < Self > {
40
- match_class ! ( obj,
41
-
42
- i @ PyBytes => Ok ( PyByteInner { elements: i. get_value( ) . to_vec( ) } ) ,
43
- j @ PyByteArray => Ok ( PyByteInner { elements: j. inner. borrow( ) . elements. to_vec( ) } ) ,
44
- k @ PyMemoryView => Ok ( PyByteInner { elements: k. get_obj_value( ) . unwrap( ) } ) ,
40
+ match_class ! ( match obj {
41
+ i @ PyBytes => Ok ( PyByteInner {
42
+ elements: i. get_value( ) . to_vec( )
43
+ } ) ,
44
+ j @ PyByteArray => Ok ( PyByteInner {
45
+ elements: j. inner. borrow( ) . elements. to_vec( )
46
+ } ) ,
47
+ k @ PyMemoryView => Ok ( PyByteInner {
48
+ elements: k. get_obj_value( ) . unwrap( )
49
+ } ) ,
45
50
obj => Err ( vm. new_type_error( format!(
46
- "a bytes-like object is required, not {}" ,
47
- obj. class( )
48
- ) ) )
49
- )
51
+ "a bytes-like object is required, not {}" ,
52
+ obj. class( )
53
+ ) ) ) ,
54
+ } )
50
55
}
51
56
}
52
57
@@ -110,28 +115,38 @@ impl ByteInnerNewOptions {
110
115
// Only one argument
111
116
} else {
112
117
let value = if let OptionalArg :: Present ( ival) = self . val_option {
113
- match_class ! ( ival. clone( ) ,
118
+ match_class ! ( match ival. clone( ) {
114
119
i @ PyInt => {
115
- let size = objint:: get_value( & i. into_object( ) ) . to_usize( ) . unwrap( ) ;
116
- Ok ( vec![ 0 ; size] ) } ,
117
- _l @ PyString => { return Err ( vm. new_type_error( "string argument without an encoding" . to_string( ) ) ) ; } ,
120
+ let size = objint:: get_value( & i. into_object( ) ) . to_usize( ) . unwrap( ) ;
121
+ Ok ( vec![ 0 ; size] )
122
+ }
123
+ _l @ PyString => {
124
+ return Err (
125
+ vm. new_type_error( "string argument without an encoding" . to_string( ) )
126
+ ) ;
127
+ }
118
128
obj => {
119
- let elements = vm. extract_elements( & obj) . or_else( |_| { Err ( vm. new_type_error( format!(
120
- "cannot convert {} object to bytes" , obj. class( ) . name) ) ) } ) ;
129
+ let elements = vm. extract_elements( & obj) . or_else( |_| {
130
+ Err ( vm. new_type_error( format!(
131
+ "cannot convert {} object to bytes" ,
132
+ obj. class( ) . name
133
+ ) ) )
134
+ } ) ;
121
135
122
136
let mut data_bytes = vec![ ] ;
123
- for elem in elements. unwrap( ) {
137
+ for elem in elements. unwrap( ) {
124
138
let v = objint:: to_int( vm, & elem, 10 ) ?;
125
139
if let Some ( i) = v. to_u8( ) {
126
140
data_bytes. push( i) ;
127
141
} else {
128
- return Err ( vm. new_value_error( "bytes must be in range(0, 256)" . to_string ( ) ) ) ;
129
- }
130
-
142
+ return Err ( vm. new_value_error(
143
+ "bytes must be in range(0, 256)" . to_string ( ) ,
144
+ ) ) ;
131
145
}
132
- Ok ( data_bytes)
133
146
}
134
- )
147
+ Ok ( data_bytes)
148
+ }
149
+ } )
135
150
} else {
136
151
Ok ( vec ! [ ] )
137
152
} ;
@@ -451,16 +466,16 @@ impl PyByteInner {
451
466
452
467
fn setindex ( & mut self , int : PyIntRef , object : PyObjectRef , vm : & VirtualMachine ) -> PyResult {
453
468
if let Some ( idx) = self . elements . get_pos ( int. as_bigint ( ) . to_i32 ( ) . unwrap ( ) ) {
454
- let result = match_class ! ( object,
455
- i @ PyInt => {
456
- if let Some ( value) = i. as_bigint( ) . to_u8( ) {
457
- Ok ( value)
458
- } else{
459
- Err ( vm. new_value_error( "byte must be in range(0, 256)" . to_string( ) ) )
469
+ let result = match_class ! ( match object {
470
+ i @ PyInt => {
471
+ if let Some ( value) = i. as_bigint( ) . to_u8( ) {
472
+ Ok ( value)
473
+ } else {
474
+ Err ( vm. new_value_error( "byte must be in range(0, 256)" . to_string( ) ) )
475
+ }
460
476
}
461
- } ,
462
- _ => { Err ( vm. new_type_error( "an integer is required" . to_string( ) ) ) }
463
- ) ;
477
+ _ => Err ( vm. new_type_error( "an integer is required" . to_string( ) ) ) ,
478
+ } ) ;
464
479
let value = result?;
465
480
self . elements [ idx] = value;
466
481
Ok ( vm. new_int ( value) )
@@ -483,13 +498,13 @@ impl PyByteInner {
483
498
. map ( |obj| u8:: try_from_object ( vm, obj) )
484
499
. collect :: < PyResult < Vec < _ > > > ( ) ?)
485
500
}
486
- _ => match_class ! ( object,
487
- i @ PyMemoryView => {
488
- Ok ( i . get_obj_value ( ) . unwrap ( ) )
489
- } ,
490
- _ => Err ( vm . new_index_error (
491
- "can assign only bytes, buffers, or iterables of ints in range(0, 256)"
492
- . to_string ( ) ) ) ) ,
501
+ _ => match_class ! ( match object {
502
+ i @ PyMemoryView => Ok ( i . get_obj_value ( ) . unwrap ( ) ) ,
503
+ _ => Err ( vm . new_index_error (
504
+ "can assign only bytes, buffers, or iterables of ints in range(0, 256)"
505
+ . to_string ( )
506
+ ) ) ,
507
+ } ) ,
493
508
} ;
494
509
let items = sec?;
495
510
let range = self
@@ -1134,11 +1149,11 @@ impl PyByteInner {
1134
1149
}
1135
1150
1136
1151
pub fn try_as_byte ( obj : & PyObjectRef ) -> Option < Vec < u8 > > {
1137
- match_class ! ( obj. clone( ) ,
1138
-
1139
- i @ PyBytes => Some ( i . get_value ( ) . to_vec( ) ) ,
1140
- j @ PyByteArray => Some ( j . inner . borrow ( ) . elements . to_vec ( ) ) ,
1141
- _ => None )
1152
+ match_class ! ( match obj. clone( ) {
1153
+ i @ PyBytes => Some ( i . get_value ( ) . to_vec ( ) ) ,
1154
+ j @ PyByteArray => Some ( j . inner . borrow ( ) . elements . to_vec( ) ) ,
1155
+ _ => None ,
1156
+ } )
1142
1157
}
1143
1158
1144
1159
pub trait ByteOr : ToPrimitive {
0 commit comments