Skip to content

Commit f1e7e02

Browse files
committed
codewide: introduce DeserializeOwned{Row,Value}
As noted in a review comment, parsing `for<'r> DeserializeValue<'r, 'r>` to understand it's requiring an owned type is nontrivial and could be replaced with a subtrait with an informative name. Therefore, this commit introduces DeserializeOwnedRow and DeserializeOwnedValue (to be used by the `scylla` crate itself only).
1 parent e99b875 commit f1e7e02

File tree

6 files changed

+18
-10
lines changed

6 files changed

+18
-10
lines changed

scylla/src/lib.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,13 @@ pub mod deserialize {
230230
UdtIterator, UdtTypeCheckErrorKind,
231231
};
232232
}
233+
234+
// Shorthands for better readability.
235+
#[cfg_attr(not(test), allow(unused))]
236+
pub(crate) trait DeserializeOwnedValue: for<'r> DeserializeValue<'r, 'r> {}
237+
impl<T> DeserializeOwnedValue for T where T: for<'r> DeserializeValue<'r, 'r> {}
238+
pub(crate) trait DeserializeOwnedRow: for<'r> DeserializeRow<'r, 'r> {}
239+
impl<T> DeserializeOwnedRow for T where T: for<'r> DeserializeRow<'r, 'r> {}
233240
}
234241

235242
pub mod authentication;

scylla/src/transport/cql_collections_test.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1+
use crate::deserialize::DeserializeOwnedValue;
12
use crate::transport::session::Session;
2-
use scylla_cql::types::deserialize::value::DeserializeValue;
33

44
use crate::frame::response::result::CqlValue;
55
use crate::test_utils::{create_new_session_builder, setup_tracing};
@@ -36,7 +36,7 @@ async fn insert_and_select<InsertT, SelectT>(
3636
expected: &SelectT,
3737
) where
3838
InsertT: SerializeValue,
39-
SelectT: for<'r> DeserializeValue<'r, 'r> + PartialEq + std::fmt::Debug,
39+
SelectT: DeserializeOwnedValue + PartialEq + std::fmt::Debug,
4040
{
4141
session
4242
.query_unpaged(

scylla/src/transport/cql_types_test.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
use crate as scylla;
2+
use crate::deserialize::DeserializeOwnedValue;
23
use crate::frame::response::result::CqlValue;
34
use crate::frame::value::{Counter, CqlDate, CqlTime, CqlTimestamp};
45
use crate::test_utils::{create_new_session_builder, scylla_supports_tablets, setup_tracing};
56
use crate::transport::session::Session;
67
use crate::utils::test_utils::unique_keyspace_name;
78
use itertools::Itertools;
89
use scylla_cql::frame::value::{CqlTimeuuid, CqlVarint};
9-
use scylla_cql::types::deserialize::value::DeserializeValue;
1010
use scylla_cql::types::serialize::value::SerializeValue;
1111
use scylla_macros::{DeserializeValue, SerializeValue};
1212
use std::cmp::PartialEq;
@@ -74,7 +74,7 @@ async fn init_test(table_name: &str, type_name: &str) -> Session {
7474
// Expected values and bound values are computed using T::from_str
7575
async fn run_tests<T>(tests: &[&str], type_name: &str)
7676
where
77-
T: SerializeValue + for<'r> DeserializeValue<'r, 'r> + FromStr + Debug + Clone + PartialEq,
77+
T: SerializeValue + DeserializeOwnedValue + FromStr + Debug + Clone + PartialEq,
7878
{
7979
let session: Session = init_test(type_name, type_name).await;
8080
session.await_schema_agreement().await.unwrap();
@@ -1799,7 +1799,7 @@ async fn test_udt_with_missing_field() {
17991799
expected: TR,
18001800
) where
18011801
TQ: SerializeValue,
1802-
TR: for<'r> DeserializeValue<'r, 'r> + PartialEq + Debug,
1802+
TR: DeserializeOwnedValue + PartialEq + Debug,
18031803
{
18041804
session
18051805
.query_unpaged(

scylla/src/transport/iterator.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ use super::query_result::ColumnSpecs;
2424
use super::session::RequestSpan;
2525
use crate::cql_to_rust::{FromRow, FromRowError};
2626

27+
use crate::deserialize::DeserializeOwnedRow;
2728
use crate::frame::response::{
2829
result,
2930
result::{ColumnSpec, Row},
@@ -1076,7 +1077,7 @@ impl<RowT> TypedRowStream<RowT> {
10761077
/// It only works with owned types! For example, &str is not supported.
10771078
impl<RowT> Stream for TypedRowStream<RowT>
10781079
where
1079-
RowT: for<'r> DeserializeRow<'r, 'r>,
1080+
RowT: DeserializeOwnedRow,
10801081
{
10811082
type Item = Result<RowT, QueryError>;
10821083

scylla/src/transport/session_test.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use crate::batch::{Batch, BatchStatement};
2-
use crate::deserialize::DeserializeValue;
2+
use crate::deserialize::DeserializeOwnedValue;
33
use crate::prepared_statement::PreparedStatement;
44
use crate::query::Query;
55
use crate::retry_policy::{QueryInfo, RetryDecision, RetryPolicy, RetrySession};
@@ -3100,7 +3100,7 @@ async fn test_deserialize_empty_collections() {
31003100
session.use_keyspace(&ks, true).await.unwrap();
31013101

31023102
async fn deserialize_empty_collection<
3103-
Collection: Default + for<'frame> DeserializeValue<'frame, 'frame> + SerializeValue,
3103+
Collection: Default + DeserializeOwnedValue + SerializeValue,
31043104
>(
31053105
session: &Session,
31063106
collection_name: &str,

scylla/src/transport/topology.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
use crate::deserialize::DeserializeOwnedRow;
12
use crate::frame::response::event::Event;
23
use crate::routing::Token;
34
use crate::statement::query::Query;
@@ -15,7 +16,6 @@ use futures::Stream;
1516
use rand::seq::SliceRandom;
1617
use rand::{thread_rng, Rng};
1718
use scylla_cql::frame::frame_errors::RowsParseError;
18-
use scylla_cql::types::deserialize::row::DeserializeRow;
1919
use scylla_cql::types::deserialize::TypeCheckError;
2020
use scylla_macros::DeserializeRow;
2121
use std::borrow::BorrowMut;
@@ -930,7 +930,7 @@ fn query_filter_keyspace_name<'a, R>(
930930
convert_typecheck_error: impl FnOnce(TypeCheckError) -> MetadataError + 'a,
931931
) -> impl Stream<Item = Result<R, QueryError>> + 'a
932932
where
933-
R: for<'r> DeserializeRow<'r, 'r> + 'static,
933+
R: DeserializeOwnedRow + 'static,
934934
{
935935
let conn = conn.clone();
936936

0 commit comments

Comments
 (0)