Trait sqlx::decode::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, 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, Global>>

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

Implementations on Foreign Types§

source§

impl<'r> Decode<'r, Any> for i64

source§

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

source§

impl<'r> Decode<'r, Any> for i16

source§

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

source§

impl<'r> Decode<'r, Any> for String

source§

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

source§

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

source§

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

source§

impl<'a> Decode<'a, Any> for &'a str

source§

fn decode( value: <Any as HasValueRef<'a>>::ValueRef ) -> Result<&'a str, Box<dyn Error + Sync + Send, Global>>

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

source§

impl<'r> Decode<'r, Any> for bool

source§

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

source§

impl<'r> Decode<'r, Any> for f64

source§

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

source§

impl<'r> Decode<'r, Any> for i32

source§

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

source§

impl<'r> Decode<'r, Any> for f32

source§

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

source§

impl<'r> Decode<'r, Any> for Vec<u8, Global>

source§

fn decode( value: <Any as HasValueRef<'r>>::ValueRef ) -> Result<Vec<u8, Global>, Box<dyn Error + Sync + Send, Global>>

source§

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

source§

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

source§

impl Decode<'_, MySql> for i8

source§

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

source§

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

source§

impl Decode<'_, MySql> for u8

source§

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

source§

impl Decode<'_, MySql> for i32

source§

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

source§

impl Decode<'_, MySql> for f32

source§

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

source§

impl Decode<'_, MySql> for i64

source§

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

source§

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

source§

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

source§

impl Decode<'_, MySql> for String

source§

impl Decode<'_, MySql> for u32

source§

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

source§

impl Decode<'_, MySql> for bool

source§

impl Decode<'_, MySql> for f64

source§

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

source§

impl Decode<'_, MySql> for u16

source§

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

source§

impl Decode<'_, MySql> for i16

source§

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

source§

impl Decode<'_, MySql> for u64

source§

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

source§

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

source§

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

source§

impl<'r> Decode<'r, Postgres> for PgTimeTz<Time, UtcOffset>

source§

impl Decode<'_, Postgres> for String

source§

fn decode( value: PgValueRef<'_> ) -> Result<String, Box<dyn Error + Sync + Send, 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§

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

source§

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

source§

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

source§

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

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

source§

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

source§

impl<'db> Decode<'db, Postgres> for IpAddrwhere IpNetwork: Decode<'db, Postgres>,

source§

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

source§

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

source§

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

source§

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

source§

fn decode( value: PgValueRef<'_> ) -> Result<Vec<u8, Global>, Box<dyn Error + Sync + Send, 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, Global>>

source§

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

source§

fn decode( _value: PgValueRef<'r> ) -> Result<(), Box<dyn Error + Sync + Send, 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§

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 PgMoney

source§

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

source§

impl Decode<'_, Postgres> for i64

source§

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

source§

impl Decode<'_, Postgres> for i8

source§

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

source§

impl Decode<'_, Postgres> for f64

source§

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

source§

impl Decode<'_, Postgres> for Oid

source§

fn decode( value: PgValueRef<'_> ) -> Result<Oid, Box<dyn Error + Sync + Send, 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§

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

source§

fn decode( value: PgValueRef<'r> ) -> Result<&'r str, Box<dyn Error + Sync + Send, 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§

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

source§

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

source§

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

source§

impl Decode<'_, Postgres> for i16

source§

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

source§

impl Decode<'_, Postgres> for i32

source§

fn decode( value: PgValueRef<'_> ) -> Result<i32, Box<dyn Error + Sync + Send, 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, 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, Global>>

source§

impl<'r> Decode<'r, Sqlite> for String

source§

impl<'r> Decode<'r, Sqlite> for u8

source§

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

source§

impl<'r> Decode<'r, Sqlite> for Vec<u8, Global>

source§

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

source§

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

source§

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

source§

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

source§

impl<'r> Decode<'r, Sqlite> for u32

source§

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

source§

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

source§

impl<'r> Decode<'r, Sqlite> for i32

source§

impl<'r> Decode<'r, Sqlite> for i8

source§

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

source§

impl<'r> Decode<'r, Sqlite> for u16

source§

impl<'r> Decode<'r, Sqlite> for bool

source§

impl<'r> Decode<'r, Sqlite> for i64

source§

impl<'r> Decode<'r, Sqlite> for i16

source§

impl<'r> Decode<'r, Sqlite> for f32

source§

impl<'r> Decode<'r, Sqlite> for f64

Implementors§

source§

impl Decode<'_, MySql> for BigDecimal

source§

impl Decode<'_, MySql> for Decimal

source§

impl Decode<'_, MySql> for Uuid

source§

impl Decode<'_, MySql> for Hyphenated

source§

impl Decode<'_, MySql> for Simple

source§

impl Decode<'_, Postgres> for IpNetwork

source§

impl Decode<'_, Postgres> for MacAddress

source§

impl Decode<'_, Postgres> for BigDecimal

source§

impl Decode<'_, Postgres> for BitVec<u32>

source§

impl Decode<'_, Postgres> for Decimal

source§

impl Decode<'_, Postgres> for Uuid

source§

impl Decode<'_, Sqlite> for Uuid

source§

impl Decode<'_, Sqlite> for Hyphenated

source§

impl Decode<'_, Sqlite> for Simple

source§

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

Note: assumes the connection’s time_zone is set to +00:00 (UTC).

source§

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

Note: assumes the connection’s time_zone is set to +00:00 (UTC).

source§

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

source§

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

source§

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

source§

impl<'r> Decode<'r, MySql> for Date

source§

impl<'r> Decode<'r, MySql> for OffsetDateTime

source§

impl<'r> Decode<'r, MySql> for PrimitiveDateTime

source§

impl<'r> Decode<'r, MySql> for Time

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> Decode<'r, Postgres> for Date

source§

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

source§

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

source§

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

source§

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

source§

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

source§

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

source§

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

source§

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

source§

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

source§

impl<'r> Decode<'r, Sqlite> for Date

source§

impl<'r> Decode<'r, Sqlite> for OffsetDateTime

source§

impl<'r> Decode<'r, Sqlite> for PrimitiveDateTime

source§

impl<'r> Decode<'r, Sqlite> for Time

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, MySql> for Json<T>where T: 'r + Deserialize<'r>,

source§

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

source§

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