@@ -13,7 +13,7 @@ use crate::metadata::{
13
13
use crate :: query_result:: cass_raw_value:: CassRawValue ;
14
14
use crate :: query_result:: {
15
15
CassRawRow , CassResult , CassResultKind , CassResultMetadata , CassRow , CassValue ,
16
- NonNullDeserializationError , cass_value_type ,
16
+ NonNullDeserializationError ,
17
17
} ;
18
18
use crate :: types:: { cass_bool_t, cass_false, size_t} ;
19
19
@@ -1157,16 +1157,15 @@ pub unsafe extern "C" fn cass_iterator_from_row<'result>(
1157
1157
pub unsafe extern "C" fn cass_iterator_from_collection < ' result > (
1158
1158
value : CassBorrowedSharedPtr < ' result , CassValue < ' result > , CConst > ,
1159
1159
) -> CassOwnedExclusivePtr < CassIterator < ' result > , CMut > {
1160
- if RefFFI :: is_null ( & value) {
1160
+ let Some ( val) = RefFFI :: as_ref ( value) else {
1161
+ tracing:: error!( "Provided null value pointer to cass_iterator_from_collection!" ) ;
1161
1162
return BoxFFI :: null_mut ( ) ;
1162
- }
1163
+ } ;
1163
1164
1164
1165
// SAFETY: We assume that user provided a valid pointer to the value.
1165
1166
// The `value.value_type` is a `CassDataType` obtained from `CassResultMetadata`, which is immutable
1166
- // (thus, underlying `get_unchecked()` is safe).
1167
- let value_type = unsafe { cass_value_type ( value. borrow ( ) ) } ;
1168
-
1169
- let val = RefFFI :: as_ref ( value) . unwrap ( ) ;
1167
+ // (thus, `get_unchecked()` is safe).
1168
+ let value_type = unsafe { val. value_type . get_unchecked ( ) } . get_value_type ( ) ;
1170
1169
1171
1170
let iterator_result = match value_type {
1172
1171
CassValueType :: CASS_VALUE_TYPE_SET | CassValueType :: CASS_VALUE_TYPE_LIST => {
0 commit comments