pub trait Decode<'a>: 'a + Sized {
// Required methods
fn compatible(data_type: &DataTypeNode) -> bool;
fn decode(
reader: &mut ValueReader<'a>,
) -> Result<Self, Box<dyn StdError + Send + Sync>>;
// Provided methods
fn decode_null(
data_type: &DataTypeNode,
) -> Result<Self, Box<dyn StdError + Send + Sync>> { ... }
fn decode_array(
data: ArrayData<'a>,
) -> Result<Self, Box<dyn StdError + Send + Sync>> { ... }
fn decode_tuple(
data: TupleIter<'a>,
) -> Result<Self, Box<dyn StdError + Send + Sync>> { ... }
fn decode_map(
key_data: ArrayData<'a>,
value_data: ArrayData<'a>,
) -> Result<Self, Box<dyn StdError + Send + Sync>> { ... }
}Expand description
Decode a Rust type from its equivalent in ClickHouse’s Native format.
Required Methods§
Sourcefn compatible(data_type: &DataTypeNode) -> bool
fn compatible(data_type: &DataTypeNode) -> bool
Return true if the given data type is compatible with this Rust type.
The implementation should accept both LowCardinality(_)
and SimpleAggregateFunction(_, _) as valid; the data provided during decode will be
identical to the unwrapped type.
Use DataTypeNode::remove_compatible_wrappers() when matching on types.
Provided Methods§
Sourcefn decode_null(
data_type: &DataTypeNode,
) -> Result<Self, Box<dyn StdError + Send + Sync>>
fn decode_null( data_type: &DataTypeNode, ) -> Result<Self, Box<dyn StdError + Send + Sync>>
Decode a NULL value.
Default implementation returns an error.
Sourcefn decode_array(
data: ArrayData<'a>,
) -> Result<Self, Box<dyn StdError + Send + Sync>>
fn decode_array( data: ArrayData<'a>, ) -> Result<Self, Box<dyn StdError + Send + Sync>>
Decode an array of values.
Default implementation returns an error.
Do not override unless implementing a custom array/slice type like Vec<T>.
Generic implementations for Vec<T> and Box<[T]> are already provided.
Sourcefn decode_tuple(
data: TupleIter<'a>,
) -> Result<Self, Box<dyn StdError + Send + Sync>>
fn decode_tuple( data: TupleIter<'a>, ) -> Result<Self, Box<dyn StdError + Send + Sync>>
Decode a tuple of values.
Default implementation returns an error.
Do not override unless implementing a custom tuple struct type.
Generic implementations for (T...) up to 16 elements are already provided.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".
Implementations on Foreign Types§
Source§impl Decode<'_> for IpAddr
Accepts either a IPv4 or IPv6 type.
impl Decode<'_> for IpAddr
Accepts either a IPv4 or IPv6 type.
§Note: No Encode Impl
ClickHouse does not have a polymorphic IP address type, so this cannot be infallibly encoded.
fn compatible(data_type: &DataTypeNode) -> bool
fn decode( reader: &mut ValueReader<'_>, ) -> Result<Self, Box<dyn StdError + Send + Sync>>
Source§impl Decode<'_> for Ipv4Addr
impl Decode<'_> for Ipv4Addr
fn compatible(data_type: &DataTypeNode) -> bool
fn decode( reader: &mut ValueReader<'_>, ) -> Result<Self, Box<dyn StdError + Send + Sync>>
Source§impl Decode<'_> for Ipv6Addr
impl Decode<'_> for Ipv6Addr
fn compatible(data_type: &DataTypeNode) -> bool
fn decode( reader: &mut ValueReader<'_>, ) -> Result<Self, Box<dyn StdError + Send + Sync>>
Source§impl Decode<'_> for Uuid
Available on crate feature uuid only.
impl Decode<'_> for Uuid
uuid only.fn compatible(data_type: &DataTypeNode) -> bool
fn decode( reader: &mut ValueReader<'_>, ) -> Result<Self, Box<dyn StdError + Send + Sync>>
Source§impl Decode<'_> for bool
impl Decode<'_> for bool
Source§fn decode(
reader: &mut ValueReader<'_>,
) -> Result<Self, Box<dyn StdError + Send + Sync>>
fn decode( reader: &mut ValueReader<'_>, ) -> Result<Self, Box<dyn StdError + Send + Sync>>
Decode this type from Bool.
fn compatible(data_type: &DataTypeNode) -> bool
Source§impl<'a, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16> Decode<'a> for (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16)
impl<'a, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16> Decode<'a> for (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16)
Source§impl<'a, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16> Decode<'a> for (T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16)
impl<'a, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16> Decode<'a> for (T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16)
Source§impl<'a, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16> Decode<'a> for (T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16)
impl<'a, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16> Decode<'a> for (T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16)
Source§impl<'a, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16> Decode<'a> for (T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16)
impl<'a, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16> Decode<'a> for (T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16)
Source§impl<'a, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16> Decode<'a> for (T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16)
impl<'a, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16> Decode<'a> for (T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16)
Source§impl<'a, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16> Decode<'a> for (T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16)
impl<'a, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16> Decode<'a> for (T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16)
Source§impl<'a, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16> Decode<'a> for (T7, T8, T9, T10, T11, T12, T13, T14, T15, T16)
impl<'a, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16> Decode<'a> for (T7, T8, T9, T10, T11, T12, T13, T14, T15, T16)
Source§impl<'a, T8, T9, T10, T11, T12, T13, T14, T15, T16> Decode<'a> for (T8, T9, T10, T11, T12, T13, T14, T15, T16)
impl<'a, T8, T9, T10, T11, T12, T13, T14, T15, T16> Decode<'a> for (T8, T9, T10, T11, T12, T13, T14, T15, T16)
Source§impl<'a, T9, T10, T11, T12, T13, T14, T15, T16> Decode<'a> for (T9, T10, T11, T12, T13, T14, T15, T16)
impl<'a, T9, T10, T11, T12, T13, T14, T15, T16> Decode<'a> for (T9, T10, T11, T12, T13, T14, T15, T16)
Source§impl<'a, T10, T11, T12, T13, T14, T15, T16> Decode<'a> for (T10, T11, T12, T13, T14, T15, T16)
impl<'a, T10, T11, T12, T13, T14, T15, T16> Decode<'a> for (T10, T11, T12, T13, T14, T15, T16)
Source§impl<'a, T11, T12, T13, T14, T15, T16> Decode<'a> for (T11, T12, T13, T14, T15, T16)
impl<'a, T11, T12, T13, T14, T15, T16> Decode<'a> for (T11, T12, T13, T14, T15, T16)
Source§impl<'a, T12, T13, T14, T15, T16> Decode<'a> for (T12, T13, T14, T15, T16)
impl<'a, T12, T13, T14, T15, T16> Decode<'a> for (T12, T13, T14, T15, T16)
Source§impl<'a, T13, T14, T15, T16> Decode<'a> for (T13, T14, T15, T16)
impl<'a, T13, T14, T15, T16> Decode<'a> for (T13, T14, T15, T16)
Source§impl<'a, T14, T15, T16> Decode<'a> for (T14, T15, T16)
impl<'a, T14, T15, T16> Decode<'a> for (T14, T15, T16)
Source§impl<'a, T15, T16> Decode<'a> for (T15, T16)
impl<'a, T15, T16> Decode<'a> for (T15, T16)
Source§impl<'a, T: Decode<'a>> Decode<'a> for Option<T>
impl<'a, T: Decode<'a>> Decode<'a> for Option<T>
fn compatible(data_type: &DataTypeNode) -> bool
fn decode( reader: &mut ValueReader<'a>, ) -> Result<Self, Box<dyn StdError + Send + Sync>>
fn decode_null( _data_type: &DataTypeNode, ) -> Result<Self, Box<dyn StdError + Send + Sync>>
fn decode_array( data: ArrayData<'a>, ) -> Result<Self, Box<dyn StdError + Send + Sync>>
fn decode_tuple( data: TupleIter<'a>, ) -> Result<Self, Box<dyn StdError + Send + Sync>>
Source§impl<'a> Decode<'a> for &'a str
Zero-copy decoding for strings.
impl<'a> Decode<'a> for &'a str
Zero-copy decoding for strings.
fn compatible(data_type: &DataTypeNode) -> bool
Source§impl<'a> Decode<'a> for String
impl<'a> Decode<'a> for String
fn compatible(data_type: &DataTypeNode) -> bool
Source§impl<'a> Decode<'a> for f32
impl<'a> Decode<'a> for f32
Source§fn decode(
reader: &mut ValueReader<'a>,
) -> Result<Self, Box<dyn StdError + Send + Sync>>
fn decode( reader: &mut ValueReader<'a>, ) -> Result<Self, Box<dyn StdError + Send + Sync>>
Decode this type from Float32.
fn compatible(data_type: &DataTypeNode) -> bool
Source§impl<'a> Decode<'a> for f64
impl<'a> Decode<'a> for f64
Source§fn decode(
reader: &mut ValueReader<'a>,
) -> Result<Self, Box<dyn StdError + Send + Sync>>
fn decode( reader: &mut ValueReader<'a>, ) -> Result<Self, Box<dyn StdError + Send + Sync>>
Decode this type from Float64.
fn compatible(data_type: &DataTypeNode) -> bool
Source§impl<'a> Decode<'a> for i8
impl<'a> Decode<'a> for i8
Source§fn decode(
reader: &mut ValueReader<'a>,
) -> Result<Self, Box<dyn StdError + Send + Sync>>
fn decode( reader: &mut ValueReader<'a>, ) -> Result<Self, Box<dyn StdError + Send + Sync>>
Decode this type from Int8.
fn compatible(data_type: &DataTypeNode) -> bool
Source§impl<'a> Decode<'a> for i16
impl<'a> Decode<'a> for i16
Source§fn decode(
reader: &mut ValueReader<'a>,
) -> Result<Self, Box<dyn StdError + Send + Sync>>
fn decode( reader: &mut ValueReader<'a>, ) -> Result<Self, Box<dyn StdError + Send + Sync>>
Decode this type from Int16.
fn compatible(data_type: &DataTypeNode) -> bool
Source§impl<'a> Decode<'a> for i32
impl<'a> Decode<'a> for i32
Source§fn decode(
reader: &mut ValueReader<'a>,
) -> Result<Self, Box<dyn StdError + Send + Sync>>
fn decode( reader: &mut ValueReader<'a>, ) -> Result<Self, Box<dyn StdError + Send + Sync>>
Decode this type from Int32.
fn compatible(data_type: &DataTypeNode) -> bool
Source§impl<'a> Decode<'a> for i64
impl<'a> Decode<'a> for i64
Source§fn decode(
reader: &mut ValueReader<'a>,
) -> Result<Self, Box<dyn StdError + Send + Sync>>
fn decode( reader: &mut ValueReader<'a>, ) -> Result<Self, Box<dyn StdError + Send + Sync>>
Decode this type from Int64.
fn compatible(data_type: &DataTypeNode) -> bool
Source§impl<'a> Decode<'a> for i128
impl<'a> Decode<'a> for i128
Source§fn decode(
reader: &mut ValueReader<'a>,
) -> Result<Self, Box<dyn StdError + Send + Sync>>
fn decode( reader: &mut ValueReader<'a>, ) -> Result<Self, Box<dyn StdError + Send + Sync>>
Decode this type from Int128.
fn compatible(data_type: &DataTypeNode) -> bool
Source§impl<'a> Decode<'a> for u8
impl<'a> Decode<'a> for u8
Source§fn decode(
reader: &mut ValueReader<'a>,
) -> Result<Self, Box<dyn StdError + Send + Sync>>
fn decode( reader: &mut ValueReader<'a>, ) -> Result<Self, Box<dyn StdError + Send + Sync>>
Decode this type from UInt8.
fn compatible(data_type: &DataTypeNode) -> bool
Source§impl<'a> Decode<'a> for u16
impl<'a> Decode<'a> for u16
Source§fn decode(
reader: &mut ValueReader<'a>,
) -> Result<Self, Box<dyn StdError + Send + Sync>>
fn decode( reader: &mut ValueReader<'a>, ) -> Result<Self, Box<dyn StdError + Send + Sync>>
Decode this type from UInt16.
fn compatible(data_type: &DataTypeNode) -> bool
Source§impl<'a> Decode<'a> for u32
impl<'a> Decode<'a> for u32
Source§fn decode(
reader: &mut ValueReader<'a>,
) -> Result<Self, Box<dyn StdError + Send + Sync>>
fn decode( reader: &mut ValueReader<'a>, ) -> Result<Self, Box<dyn StdError + Send + Sync>>
Decode this type from UInt32.
fn compatible(data_type: &DataTypeNode) -> bool
Source§impl<'a> Decode<'a> for u64
impl<'a> Decode<'a> for u64
Source§fn decode(
reader: &mut ValueReader<'a>,
) -> Result<Self, Box<dyn StdError + Send + Sync>>
fn decode( reader: &mut ValueReader<'a>, ) -> Result<Self, Box<dyn StdError + Send + Sync>>
Decode this type from UInt64.
fn compatible(data_type: &DataTypeNode) -> bool
Source§impl<'a> Decode<'a> for u128
impl<'a> Decode<'a> for u128
Source§fn decode(
reader: &mut ValueReader<'a>,
) -> Result<Self, Box<dyn StdError + Send + Sync>>
fn decode( reader: &mut ValueReader<'a>, ) -> Result<Self, Box<dyn StdError + Send + Sync>>
Decode this type from UInt128.