Skip to content

Commit 82b5d96

Browse files
wprzytulapiodul
andcommitted
deser/row: test deser as ColumnIterator
Co-authored-by: Piotr Dulikowski <[email protected]>
1 parent b02f021 commit 82b5d96

File tree

1 file changed

+61
-0
lines changed
  • scylla-cql/src/types/deserialize

1 file changed

+61
-0
lines changed

scylla-cql/src/types/deserialize/row.rs

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,3 +231,64 @@ impl Display for BuiltinDeserializationErrorKind {
231231
}
232232
}
233233
}
234+
235+
#[cfg(test)]
236+
mod tests {
237+
use bytes::Bytes;
238+
239+
use crate::frame::response::result::{ColumnSpec, ColumnType};
240+
use crate::types::deserialize::{DeserializationError, FrameSlice};
241+
242+
use super::super::tests::{serialize_cells, spec};
243+
use super::{ColumnIterator, DeserializeRow};
244+
245+
#[test]
246+
fn test_deserialization_as_column_iterator() {
247+
let col_specs = [
248+
spec("i1", ColumnType::Int),
249+
spec("i2", ColumnType::Text),
250+
spec("i3", ColumnType::Counter),
251+
];
252+
let serialized_values = serialize_cells([val_int(123), val_str("ScyllaDB"), None]);
253+
let mut iter = deserialize::<ColumnIterator>(&col_specs, &serialized_values).unwrap();
254+
255+
let col1 = iter.next().unwrap().unwrap();
256+
assert_eq!(col1.spec.name, "i1");
257+
assert_eq!(col1.spec.typ, ColumnType::Int);
258+
assert_eq!(col1.slice.unwrap().as_slice(), &123i32.to_be_bytes());
259+
260+
let col2 = iter.next().unwrap().unwrap();
261+
assert_eq!(col2.spec.name, "i2");
262+
assert_eq!(col2.spec.typ, ColumnType::Text);
263+
assert_eq!(col2.slice.unwrap().as_slice(), "ScyllaDB".as_bytes());
264+
265+
let col3 = iter.next().unwrap().unwrap();
266+
assert_eq!(col3.spec.name, "i3");
267+
assert_eq!(col3.spec.typ, ColumnType::Counter);
268+
assert!(col3.slice.is_none());
269+
270+
assert!(iter.next().is_none());
271+
}
272+
273+
fn val_int(i: i32) -> Option<Vec<u8>> {
274+
Some(i.to_be_bytes().to_vec())
275+
}
276+
277+
fn val_str(s: &str) -> Option<Vec<u8>> {
278+
Some(s.as_bytes().to_vec())
279+
}
280+
281+
fn deserialize<'frame, R>(
282+
specs: &'frame [ColumnSpec],
283+
byts: &'frame Bytes,
284+
) -> Result<R, DeserializationError>
285+
where
286+
R: DeserializeRow<'frame>,
287+
{
288+
<R as DeserializeRow<'frame>>::type_check(specs)
289+
.map_err(|typecheck_err| DeserializationError(typecheck_err.0))?;
290+
let slice = FrameSlice::new(byts);
291+
let iter = ColumnIterator::new(specs, slice);
292+
<R as DeserializeRow<'frame>>::deserialize(iter)
293+
}
294+
}

0 commit comments

Comments
 (0)