Trait Decode

Source
pub trait Decode<'r, DB>: Sized
where DB: Database,
{ // Required method fn decode( value: <DB as HasValueRef<'r>>::ValueRef, ) -> Result<Self, Box<dyn Error + Sync + Send>>; }
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>>

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

Dyn Compatibilityยง

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Typesยง

Sourceยง

impl Decode<'_, Postgres> for bool

Sourceยง

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

Sourceยง

impl Decode<'_, Postgres> for f32

Sourceยง

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

Sourceยง

impl Decode<'_, Postgres> for f64

Sourceยง

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

Sourceยง

impl Decode<'_, Postgres> for i8

Sourceยง

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

Sourceยง

impl Decode<'_, Postgres> for i16

Sourceยง

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

Sourceยง

impl Decode<'_, Postgres> for i32

Sourceยง

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

Sourceยง

impl Decode<'_, Postgres> for i64

Sourceยง

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

Sourceยง

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

Sourceยง

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

Sourceยง

impl Decode<'_, Postgres> for String

Sourceยง

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

Sourceยง

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

Sourceยง

impl Decode<'_, Sqlite> for Box<str>

Sourceยง

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

Sourceยง

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

Sourceยง

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

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

Sourceยง

impl<'db> Decode<'db, Postgres> for IpAddr
where IpNetwork: Decode<'db, Postgres>,

Sourceยง

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

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

Sourceยง

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

Sourceยง

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

Sourceยง

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

Sourceยง

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

Sourceยง

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

Sourceยง

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

Sourceยง

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

Sourceยง

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

Sourceยง

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

Sourceยง

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

Sourceยง

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

Sourceยง

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

Sourceยง

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

Sourceยง

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

Sourceยง

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

Sourceยง

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

Sourceยง

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

Sourceยง

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

Sourceยง

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

Sourceยง

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

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

Sourceยง

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

Sourceยง

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

Sourceยง

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

Sourceยง

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

Sourceยง

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

Sourceยง

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

Sourceยง

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

Sourceยง

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

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

Sourceยง

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

Sourceยง

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

Sourceยง

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

Sourceยง

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

Sourceยง

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

Sourceยง

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

Sourceยง

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

Sourceยง

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

Sourceยง

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

Sourceยง

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

Sourceยง

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

Sourceยง

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

Sourceยง

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

Sourceยง

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

Sourceยง

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

Sourceยง

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

Sourceยง

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

Sourceยง

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

Sourceยง

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

Sourceยง

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

Sourceยง

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

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

Sourceยง

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

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

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, 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> 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, 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<'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<'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<'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> Decode<'r, Postgres> for Vec<T>
where T: for<'a> Decode<'a, Postgres> + Type<Postgres>,

Sourceยง

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

Sourceยง

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

Sourceยง

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

Sourceยง

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

Implementorsยง

Sourceยง

impl Decode<'_, Postgres> for IpNetwork

Sourceยง

impl Decode<'_, Postgres> for Oid

Sourceยง

impl Decode<'_, Postgres> for PgCiText

Sourceยง

impl Decode<'_, Postgres> for PgMoney

Sourceยง

impl Decode<'_, Postgres> for MacAddress

Sourceยง

impl Decode<'_, Postgres> for BigDecimal

ยงNote: NaN

BigDecimal has a greater range than NUMERIC (see the corresponding Encode impl for details) but cannot represent NaN, so decoding may return an error.

Sourceยง

impl Decode<'_, Postgres> for BitVec

Sourceยง

impl Decode<'_, Postgres> for Decimal

ยงNote: rust_decimal::Decimal Has a Smaller Range than NUMERIC

NUMERIC is can have up to 131,072 digits before the decimal point, and 16,384 digits after it. See [Section 8.1, Numeric Types] of the Postgres manual for details.

However, rust_decimal::Decimal is limited to a maximum absolute magnitude of 296 - 1, a number with 67 decimal digits, and a minimum absolute magnitude of 10-28, a number with, unsurprisingly, 28 decimal digits.

Thus, in contrast with BigDecimal, NUMERIC can actually represent every possible value of rust_decimal::Decimal, but not the other way around. This means that encoding should never fail, but decoding can.

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

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> 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 RawValue
where Json<&'r RawValue>: Decode<'r, DB>, DB: Database,

Sourceยง

impl<'r, DB> Decode<'r, DB> for Value
where 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>: From<<T as FromStr>::Err>,

Sourceยง

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

Sourceยง

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