File tree Expand file tree Collapse file tree 3 files changed +47
-0
lines changed Expand file tree Collapse file tree 3 files changed +47
-0
lines changed Original file line number Diff line number Diff line change @@ -309,6 +309,18 @@ impl<'v> Value<'v> {
309
309
}
310
310
}
311
311
312
+ pub ( crate ) fn unpack_integer < I > ( self ) -> Option < I >
313
+ where
314
+ I : TryFrom < i32 > ,
315
+ I : TryFrom < & ' v BigInt > ,
316
+ {
317
+ match self . unpack_num ( ) ? {
318
+ Num :: Float ( _) => None ,
319
+ Num :: Int ( x) => I :: try_from ( x) . ok ( ) ,
320
+ Num :: BigInt ( x) => x. unpack_integer ( ) ,
321
+ }
322
+ }
323
+
312
324
/// Obtain the underlying `bool` if it is a boolean.
313
325
pub fn unpack_bool ( self ) -> Option < bool > {
314
326
let p = self . 0 . raw ( ) . ptr_value ( ) ;
Original file line number Diff line number Diff line change @@ -22,6 +22,7 @@ use crate::values::AllocValue;
22
22
use crate :: values:: FrozenHeap ;
23
23
use crate :: values:: FrozenValue ;
24
24
use crate :: values:: Heap ;
25
+ use crate :: values:: UnpackValue ;
25
26
use crate :: values:: Value ;
26
27
27
28
impl StarlarkTypeRepr for u32 {
@@ -143,3 +144,33 @@ impl AllocFrozenValue for isize {
143
144
}
144
145
}
145
146
}
147
+
148
+ impl < ' v > UnpackValue < ' v > for u32 {
149
+ fn unpack_value ( value : Value < ' v > ) -> Option < u32 > {
150
+ value. unpack_integer ( )
151
+ }
152
+ }
153
+
154
+ impl < ' v > UnpackValue < ' v > for u64 {
155
+ fn unpack_value ( value : Value < ' v > ) -> Option < u64 > {
156
+ value. unpack_integer ( )
157
+ }
158
+ }
159
+
160
+ impl < ' v > UnpackValue < ' v > for i64 {
161
+ fn unpack_value ( value : Value < ' v > ) -> Option < i64 > {
162
+ value. unpack_integer ( )
163
+ }
164
+ }
165
+
166
+ impl < ' v > UnpackValue < ' v > for usize {
167
+ fn unpack_value ( value : Value < ' v > ) -> Option < usize > {
168
+ value. unpack_integer ( )
169
+ }
170
+ }
171
+
172
+ impl < ' v > UnpackValue < ' v > for isize {
173
+ fn unpack_value ( value : Value < ' v > ) -> Option < isize > {
174
+ value. unpack_integer ( )
175
+ }
176
+ }
Original file line number Diff line number Diff line change @@ -160,6 +160,10 @@ impl StarlarkBigInt {
160
160
) )
161
161
}
162
162
}
163
+
164
+ pub ( crate ) fn unpack_integer < ' v , I : TryFrom < & ' v BigInt > > ( & ' v self ) -> Option < I > {
165
+ I :: try_from ( & self . value ) . ok ( )
166
+ }
163
167
}
164
168
165
169
impl PartialEq < i32 > for StarlarkBigInt {
You can’t perform that action at this time.
0 commit comments