Trait sqlx_clickhouse_ext::value::Decode[][src]

pub trait Decode<'r, DB> where
    DB: Database
{ pub fn decode(
        value: <DB as HasValueRef<'r>>::ValueRef
    ) -> Result<Self, Box<dyn Error + 'static + Sync + Send, Global>>; }

A type that can be decoded from the database.

How can I implement Decode?

A manual implementation of Decode can be useful when adding support for types externally to SQLx.

The following showcases how to implement Decode to be generic over Database. The implementation can be marginally simpler if you remove the DB type parameter and explicitly use the concrete ValueRef and TypeInfo types.

struct MyType;

// DB is the database driver
// `'r` is the lifetime of the `Row` being decoded
impl<'r, DB: Database> Decode<'r, DB> for MyType
where
    // we want to delegate some of the work to string decoding so let's make sure strings
    // are supported by the database
    &'r str: Decode<'r, DB>
{
    fn decode(
        value: <DB as HasValueRef<'r>>::ValueRef,
    ) -> Result<MyType, Box<dyn Error + 'static + Send + Sync>> {
        // the interface of ValueRef is largely unstable at the moment
        // so this is not directly implementable

        // however, you can delegate to a type that matches the format of the type you want
        // to decode (such as a UTF-8 string)

        let value = <&str as Decode<DB>>::decode(value)?;

        // now you can parse this into your type (assuming there is a `FromStr`)

        Ok(value.parse()?)
    }
}

Required methods

pub fn decode(
    value: <DB as HasValueRef<'r>>::ValueRef
) -> Result<Self, Box<dyn Error + 'static + Sync + Send, Global>>
[src]

Decode a new value of this type using a raw value from the database.

Loading content...

Implementations on Foreign Types

impl<'r, DB> Decode<'r, DB> for &'r RawValue where
    DB: Database,
    &'r RawValue: Type<DB>,
    Json<&'r RawValue>: Decode<'r, DB>, 
[src]

impl<'r> Decode<'r, Postgres> for ()[src]

impl<'r, DB, T> Decode<'r, DB> for Option<T> where
    DB: Database,
    T: Decode<'r, DB>, 
[src]

impl<'_> Decode<'_, Postgres> for i64[src]

impl<'r> Decode<'r, Postgres> for NaiveDateTime[src]

impl<'_> Decode<'_, Postgres> for bool[src]

impl<'de> Decode<'de, Postgres> for PgInterval[src]

impl<'_> Decode<'_, Postgres> for f32[src]

impl<'r, T1, T2> Decode<'r, Postgres> for (T1, T2) where
    T1: 'r + Type<Postgres> + for<'a> Decode<'a, Postgres>,
    T2: 'r + Type<Postgres> + for<'a> Decode<'a, Postgres>, 
[src]

impl<'r> Decode<'r, Postgres> for NaiveTime[src]

impl<'_> Decode<'_, Postgres> for BigDecimal[src]

impl<'r, T1, T2, T3, T4, T5, T6, T7> Decode<'r, Postgres> for (T1, T2, T3, T4, T5, T6, T7) where
    T3: 'r + Type<Postgres> + for<'a> Decode<'a, Postgres>,
    T4: 'r + Type<Postgres> + for<'a> Decode<'a, Postgres>,
    T5: 'r + Type<Postgres> + for<'a> Decode<'a, Postgres>,
    T6: 'r + Type<Postgres> + for<'a> Decode<'a, Postgres>,
    T7: 'r + Type<Postgres> + for<'a> Decode<'a, Postgres>,
    T1: 'r + Type<Postgres> + for<'a> Decode<'a, Postgres>,
    T2: 'r + Type<Postgres> + for<'a> Decode<'a, Postgres>, 
[src]

impl<'r, T1, T2, T3, T4, T5> Decode<'r, Postgres> for (T1, T2, T3, T4, T5) where
    T3: 'r + Type<Postgres> + for<'a> Decode<'a, Postgres>,
    T4: 'r + Type<Postgres> + for<'a> Decode<'a, Postgres>,
    T5: 'r + Type<Postgres> + for<'a> Decode<'a, Postgres>,
    T1: 'r + Type<Postgres> + for<'a> Decode<'a, Postgres>,
    T2: 'r + Type<Postgres> + for<'a> Decode<'a, Postgres>, 
[src]

impl<'_> Decode<'_, Postgres> for f64[src]

impl<'r, T> Decode<'r, Postgres> for Vec<T, Global> where
    T: for<'a> Decode<'a, Postgres> + Type<Postgres>,
    Vec<T, Global>: Type<Postgres>, 
[src]

impl<'r, T1, T2, T3, T4, T5, T6, T7, T8> Decode<'r, Postgres> for (T1, T2, T3, T4, T5, T6, T7, T8) where
    T3: 'r + Type<Postgres> + for<'a> Decode<'a, Postgres>,
    T4: 'r + Type<Postgres> + for<'a> Decode<'a, Postgres>,
    T5: 'r + Type<Postgres> + for<'a> Decode<'a, Postgres>,
    T6: 'r + Type<Postgres> + for<'a> Decode<'a, Postgres>,
    T7: 'r + Type<Postgres> + for<'a> Decode<'a, Postgres>,
    T8: 'r + Type<Postgres> + for<'a> Decode<'a, Postgres>,
    T1: 'r + Type<Postgres> + for<'a> Decode<'a, Postgres>,
    T2: 'r + Type<Postgres> + for<'a> Decode<'a, Postgres>, 
[src]

impl<'r, T> Decode<'r, Postgres> for Json<T> where
    T: 'r + Deserialize<'r>, 
[src]

impl<'_> Decode<'_, Postgres> for PgMoney[src]

impl<'r, T1, T2, T3> Decode<'r, Postgres> for (T1, T2, T3) where
    T3: 'r + Type<Postgres> + for<'a> Decode<'a, Postgres>,
    T1: 'r + Type<Postgres> + for<'a> Decode<'a, Postgres>,
    T2: 'r + Type<Postgres> + for<'a> Decode<'a, Postgres>, 
[src]

impl<'r> Decode<'r, Postgres> for DateTime<Local>[src]

impl<'_> Decode<'_, Postgres> for i16[src]

impl<'_> Decode<'_, Postgres> for Vec<u8, Global>[src]

impl<'r, T1, T2, T3, T4> Decode<'r, Postgres> for (T1, T2, T3, T4) where
    T3: 'r + Type<Postgres> + for<'a> Decode<'a, Postgres>,
    T4: 'r + Type<Postgres> + for<'a> Decode<'a, Postgres>,
    T1: 'r + Type<Postgres> + for<'a> Decode<'a, Postgres>,
    T2: 'r + Type<Postgres> + for<'a> Decode<'a, Postgres>, 
[src]

impl<'r, T1, T2, T3, T4, T5, T6> Decode<'r, Postgres> for (T1, T2, T3, T4, T5, T6) where
    T3: 'r + Type<Postgres> + for<'a> Decode<'a, Postgres>,
    T4: 'r + Type<Postgres> + for<'a> Decode<'a, Postgres>,
    T5: 'r + Type<Postgres> + for<'a> Decode<'a, Postgres>,
    T6: 'r + Type<Postgres> + for<'a> Decode<'a, Postgres>,
    T1: 'r + Type<Postgres> + for<'a> Decode<'a, Postgres>,
    T2: 'r + Type<Postgres> + for<'a> Decode<'a, Postgres>, 
[src]

impl<'r> Decode<'r, Postgres> for NaiveDate[src]

impl<'r> Decode<'r, Postgres> for &'r [u8][src]

impl<'_> Decode<'_, Postgres> for Uuid[src]

impl<'r, T> Decode<'r, Postgres> for PgRange<T> where
    T: Type<Postgres> + for<'a> Decode<'a, Postgres>, 
[src]

impl<'r, T1> Decode<'r, Postgres> for (T1,) where
    T1: 'r + Type<Postgres> + for<'a> Decode<'a, Postgres>, 
[src]

impl<'r> Decode<'r, Postgres> for PgTimeTz<NaiveTime, FixedOffset>[src]

impl<'_> Decode<'_, Postgres> for String[src]

impl<'r> Decode<'r, Postgres> for DateTime<Utc>[src]

impl<'r> Decode<'r, Postgres> for DateTime<FixedOffset>[src]

impl<'_> Decode<'_, Postgres> for i32[src]

impl<'r> Decode<'r, Postgres> for &'r str[src]

impl<'r, T1, T2, T3, T4, T5, T6, T7, T8, T9> Decode<'r, Postgres> for (T1, T2, T3, T4, T5, T6, T7, T8, T9) where
    T3: 'r + Type<Postgres> + for<'a> Decode<'a, Postgres>,
    T4: 'r + Type<Postgres> + for<'a> Decode<'a, Postgres>,
    T5: 'r + Type<Postgres> + for<'a> Decode<'a, Postgres>,
    T6: 'r + Type<Postgres> + for<'a> Decode<'a, Postgres>,
    T7: 'r + Type<Postgres> + for<'a> Decode<'a, Postgres>,
    T8: 'r + Type<Postgres> + for<'a> Decode<'a, Postgres>,
    T9: 'r + Type<Postgres> + for<'a> Decode<'a, Postgres>,
    T1: 'r + Type<Postgres> + for<'a> Decode<'a, Postgres>,
    T2: 'r + Type<Postgres> + for<'a> Decode<'a, Postgres>, 
[src]

impl<'r, DB> Decode<'r, DB> for Value where
    DB: Database,
    Value: Type<DB>,
    Json<Value>: Decode<'r, DB>, 
[src]

impl<'_> Decode<'_, Postgres> for i8[src]

impl<'_> Decode<'_, Postgres> for u32[src]

Loading content...

Implementors

Loading content...