scylla_cql/types/serialize/mod.rs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
#![warn(missing_docs)]
//! Types and traits related to serialization of values to the CQL format.
use std::{error::Error, fmt::Display, sync::Arc};
use thiserror::Error;
pub mod batch;
pub mod raw_batch;
pub mod row;
pub mod value;
pub mod writers;
pub use writers::{CellValueBuilder, CellWriter, RowWriter};
/// An error indicating that a failure happened during serialization.
///
/// The error is type-erased so that the crate users can define their own
/// serialization impls and their errors. As for the impls defined or generated
/// by the driver itself, the following errors can be returned:
///
/// - [`row::BuiltinSerializationError`] is returned when serialization of
/// one of types with an impl built into the driver fails. It is also returned
/// from impls generated by the `SerializeRow` macro.
/// - [`value::BuiltinSerializationError`] is analogous to the above but is
/// returned from [`SerializeCql::serialize`](value::SerializeCql::serialize)
/// instead both in the case of builtin impls and impls generated by the
/// `SerializeCql` macro. It won't be returned by the `Session` directly,
/// but it might be nested in the [`row::BuiltinSerializationError`].
/// - [`row::ValueListToSerializeRowAdapterError`] is returned in case when
/// a list of named values encoded with the legacy `ValueList` trait is passed
/// as an argument to the statement, and rewriting it using the new
/// `SerializeRow` interface fails.
#[derive(Debug, Clone, Error)]
pub struct SerializationError(Arc<dyn Error + Send + Sync>);
impl SerializationError {
/// Constructs a new `SerializationError`.
#[inline]
pub fn new(err: impl Error + Send + Sync + 'static) -> SerializationError {
SerializationError(Arc::new(err))
}
}
impl Display for SerializationError {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "SerializationError: {}", self.0)
}
}