Trait sqlx::prelude::Decode

source ·
pub trait Decode<'r, DB>: Sizedwhere
    DB: Database,{
    // Required method
    fn decode(
        value: <DB as HasValueRef<'r>>::ValueRef
    ) -> Result<Self, Box<dyn Error + Sync + Send + 'static, Global>>;
}
Expand description

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§

source

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

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

Implementations on Foreign Types§

source§

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

source§

fn decode( value: <DB as HasValueRef<'r>>::ValueRef ) -> Result<Option<T>, Box<dyn Error + Sync + Send + 'static, Global>>

source§

impl<'r, T, const N: usize> Decode<'r, Postgres> for [T; N]where T: for<'a> Decode<'a, Postgres> + Type<Postgres>,

source§

fn decode( value: PgValueRef<'r> ) -> Result<[T; N], Box<dyn Error + Sync + Send + 'static, Global>>

source§

impl<'r, T1, T2, T3, T4, T5, T6> Decode<'r, Postgres> for (T1, T2, T3, T4, T5, T6)where T1: 'r + Type<Postgres> + for<'a> Decode<'a, Postgres>, T2: 'r + Type<Postgres> + for<'a> Decode<'a, Postgres>, 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>,

source§

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

source§

fn decode( value: PgValueRef<'_> ) -> Result<Vec<u8, Global>, Box<dyn Error + Sync + Send + 'static, Global>>

source§

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

source§

fn decode( value: PgValueRef<'r> ) -> Result<&'r [u8], Box<dyn Error + Sync + Send + 'static, Global>>

source§

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

source§

fn decode( value: PgValueRef<'r> ) -> Result<(T1, T2, T3, T4), Box<dyn Error + Sync + Send + 'static, Global>>

source§

impl Decode<'_, Postgres> for f64

source§

fn decode( value: PgValueRef<'_> ) -> Result<f64, Box<dyn Error + Sync + Send + 'static, Global>>

source§

impl Decode<'_, Postgres> for i64

source§

fn decode( value: PgValueRef<'_> ) -> Result<i64, Box<dyn Error + Sync + Send + 'static, Global>>

source§

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>,

source§

fn decode( value: PgValueRef<'r> ) -> Result<(T1, T2), Box<dyn Error + Sync + Send + 'static, Global>>

source§

impl<'r> Decode<'r, Postgres> for Cow<'r, str>

source§

fn decode( value: PgValueRef<'r> ) -> Result<Cow<'r, str>, Box<dyn Error + Sync + Send + 'static, Global>>

source§

impl<'r> Decode<'r, Postgres> for Box<str, Global>

source§

fn decode( value: PgValueRef<'r> ) -> Result<Box<str, Global>, Box<dyn Error + Sync + Send + 'static, Global>>

source§

impl<'r> Decode<'r, Postgres> for &'r str

source§

fn decode( value: PgValueRef<'r> ) -> Result<&'r str, Box<dyn Error + Sync + Send + 'static, Global>>

source§

impl Decode<'_, Postgres> for f32

source§

fn decode( value: PgValueRef<'_> ) -> Result<f32, Box<dyn Error + Sync + Send + 'static, Global>>

source§

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

source§

fn decode( value: PgValueRef<'r> ) -> Result<(T1, T2, T3), Box<dyn Error + Sync + Send + 'static, Global>>

source§

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 T1: 'r + Type<Postgres> + for<'a> Decode<'a, Postgres>, T2: 'r + Type<Postgres> + for<'a> Decode<'a, Postgres>, 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>,

source§

impl<const N: usize> Decode<'_, Postgres> for [u8; N]

source§

fn decode( value: PgValueRef<'_> ) -> Result<[u8; N], Box<dyn Error + Sync + Send + 'static, Global>>

source§

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

source§

fn decode( value: PgValueRef<'r> ) -> Result<(T1,), Box<dyn Error + Sync + Send + 'static, Global>>

source§

impl Decode<'_, Postgres> for i8

source§

fn decode( value: PgValueRef<'_> ) -> Result<i8, Box<dyn Error + Sync + Send + 'static, Global>>

source§

impl Decode<'_, Postgres> for i32

source§

fn decode( value: PgValueRef<'_> ) -> Result<i32, Box<dyn Error + Sync + Send + 'static, Global>>

source§

impl<'r, T1, T2, T3, T4, T5, T6, T7, T8> Decode<'r, Postgres> for (T1, T2, T3, T4, T5, T6, T7, T8)where T1: 'r + Type<Postgres> + for<'a> Decode<'a, Postgres>, T2: 'r + Type<Postgres> + for<'a> Decode<'a, Postgres>, 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>,

source§

impl Decode<'_, Postgres> for bool

source§

fn decode( value: PgValueRef<'_> ) -> Result<bool, Box<dyn Error + Sync + Send + 'static, Global>>

source§

impl<'r, T1, T2, T3, T4, T5, T6, T7> Decode<'r, Postgres> for (T1, T2, T3, T4, T5, T6, T7)where T1: 'r + Type<Postgres> + for<'a> Decode<'a, Postgres>, T2: 'r + Type<Postgres> + for<'a> Decode<'a, Postgres>, 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>,

source§

impl Decode<'_, Postgres> for String

source§

fn decode( value: PgValueRef<'_> ) -> Result<String, Box<dyn Error + Sync + Send + 'static, Global>>

source§

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

source§

fn decode( value: PgValueRef<'_> ) -> Result<Box<[u8], Global>, Box<dyn Error + Sync + Send + 'static, Global>>

source§

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

source§

fn decode( value: PgValueRef<'r> ) -> Result<Vec<T, Global>, Box<dyn Error + Sync + Send + 'static, Global>>

source§

impl<'r> Decode<'r, Postgres> for ()

source§

fn decode( _value: PgValueRef<'r> ) -> Result<(), Box<dyn Error + Sync + Send + 'static, Global>>

source§

impl Decode<'_, Postgres> for i16

source§

fn decode( value: PgValueRef<'_> ) -> Result<i16, Box<dyn Error + Sync + Send + 'static, Global>>

source§

impl<'r, T1, T2, T3, T4, T5> Decode<'r, Postgres> for (T1, T2, T3, T4, T5)where T1: 'r + Type<Postgres> + for<'a> Decode<'a, Postgres>, T2: 'r + Type<Postgres> + for<'a> Decode<'a, Postgres>, 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>,

source§

fn decode( value: PgValueRef<'r> ) -> Result<(T1, T2, T3, T4, T5), Box<dyn Error + Sync + Send + 'static, Global>>

Implementors§

source§

impl Decode<'_, Postgres> for Oid

source§

impl Decode<'_, Postgres> for PgCiText

source§

impl Decode<'_, Postgres> for PgMoney

source§

impl Decode<'_, Postgres> for Uuid

source§

impl<'de> Decode<'de, Postgres> for PgInterval

source§

impl<'r> Decode<'r, Postgres> for PgLQuery

source§

impl<'r> Decode<'r, Postgres> for PgLTree

source§

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

source§

impl<'r> Decode<'r, Postgres> for DateTime<FixedOffset>

source§

impl<'r> Decode<'r, Postgres> for DateTime<Local>

source§

impl<'r> Decode<'r, Postgres> for DateTime<Utc>

source§

impl<'r> Decode<'r, Postgres> for NaiveDate

source§

impl<'r> Decode<'r, Postgres> for NaiveDateTime

source§

impl<'r> Decode<'r, Postgres> for NaiveTime

source§

impl<'r, DB> Decode<'r, DB> for &'r RawValuewhere Json<&'r RawValue>: Decode<'r, DB>, DB: Database,

source§

impl<'r, DB> Decode<'r, DB> for Valuewhere Json<Value>: Decode<'r, DB>, DB: Database,

source§

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

source§

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

source§

impl<'r, T> Decode<'r, Postgres> for Text<T>where T: FromStr, Box<dyn Error + Sync + Send + 'static, Global>: From<<T as FromStr>::Err>,