pub trait QueryableByName<DB>where
    Self: Sized,
    DB: Backend,{
    // Required method
    fn build<'a>(row: &impl NamedRow<'a, DB>) -> Result<Self>;
}
Expand description

Deserializes the result of a query constructed with sql_query.

This trait can be derived

Examples

If we just want to map a query to our struct, we can use derive.

#[derive(QueryableByName, PartialEq, Debug)]
struct User {
    id: i32,
    name: String,
}

let first_user = sql_query("SELECT * FROM users ORDER BY id LIMIT 1")
    .get_result(connection)?;
let expected = User { id: 1, name: "Sean".into() };
assert_eq!(expected, first_user);

If we want to do additional work during deserialization, we can use deserialize_as to use a different implementation.

struct LowercaseString(String);

impl Into<String> for LowercaseString {
    fn into(self) -> String {
        self.0
    }
}

impl<DB, ST> FromSql<ST, DB> for LowercaseString
where
    DB: Backend,
    String: FromSql<ST, DB>,
{
    fn from_sql(bytes: DB::RawValue<'_>) -> deserialize::Result<Self> {
        String::from_sql(bytes)
            .map(|s| LowercaseString(s.to_lowercase()))
    }
}

#[derive(QueryableByName, PartialEq, Debug)]
struct User {
    id: i32,
    #[diesel(deserialize_as = LowercaseString)]
    name: String,
}

let first_user = sql_query("SELECT * FROM users ORDER BY id LIMIT 1")
    .get_result(connection)?;
let expected = User { id: 1, name: "sean".into() };
assert_eq!(expected, first_user);

Required Methods§

source

fn build<'a>(row: &impl NamedRow<'a, DB>) -> Result<Self>

Construct an instance of Self from the database row

Implementations on Foreign Types§

source§

impl<T0, T1, __DB> QueryableByName<__DB> for (T0, T1)where __DB: Backend, T0: QueryableByName<__DB>, T1: QueryableByName<__DB>,

source§

fn build<'a>(row: &impl NamedRow<'a, __DB>) -> Result<Self>

source§

impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, __DB> QueryableByName<__DB> for (T0, T1, T2, T3, T4, T5, T6, T7, T8)where __DB: Backend, T0: QueryableByName<__DB>, T1: QueryableByName<__DB>, T2: QueryableByName<__DB>, T3: QueryableByName<__DB>, T4: QueryableByName<__DB>, T5: QueryableByName<__DB>, T6: QueryableByName<__DB>, T7: QueryableByName<__DB>, T8: QueryableByName<__DB>,

source§

fn build<'a>(row: &impl NamedRow<'a, __DB>) -> Result<Self>

source§

impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, __DB> QueryableByName<__DB> for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11)where __DB: Backend, T0: QueryableByName<__DB>, T1: QueryableByName<__DB>, T2: QueryableByName<__DB>, T3: QueryableByName<__DB>, T4: QueryableByName<__DB>, T5: QueryableByName<__DB>, T6: QueryableByName<__DB>, T7: QueryableByName<__DB>, T8: QueryableByName<__DB>, T9: QueryableByName<__DB>, T10: QueryableByName<__DB>, T11: QueryableByName<__DB>,

source§

fn build<'a>(row: &impl NamedRow<'a, __DB>) -> Result<Self>

source§

impl<T0, T1, T2, T3, T4, T5, T6, T7, __DB> QueryableByName<__DB> for (T0, T1, T2, T3, T4, T5, T6, T7)where __DB: Backend, T0: QueryableByName<__DB>, T1: QueryableByName<__DB>, T2: QueryableByName<__DB>, T3: QueryableByName<__DB>, T4: QueryableByName<__DB>, T5: QueryableByName<__DB>, T6: QueryableByName<__DB>, T7: QueryableByName<__DB>,

source§

fn build<'a>(row: &impl NamedRow<'a, __DB>) -> Result<Self>

source§

impl<T0, __DB> QueryableByName<__DB> for (T0,)where __DB: Backend, T0: QueryableByName<__DB>,

source§

fn build<'a>(row: &impl NamedRow<'a, __DB>) -> Result<Self>

source§

impl<T0, T1, T2, T3, T4, T5, T6, __DB> QueryableByName<__DB> for (T0, T1, T2, T3, T4, T5, T6)where __DB: Backend, T0: QueryableByName<__DB>, T1: QueryableByName<__DB>, T2: QueryableByName<__DB>, T3: QueryableByName<__DB>, T4: QueryableByName<__DB>, T5: QueryableByName<__DB>, T6: QueryableByName<__DB>,

source§

fn build<'a>(row: &impl NamedRow<'a, __DB>) -> Result<Self>

source§

impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, __DB> QueryableByName<__DB> for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15)where __DB: Backend, T0: QueryableByName<__DB>, T1: QueryableByName<__DB>, T2: QueryableByName<__DB>, T3: QueryableByName<__DB>, T4: QueryableByName<__DB>, T5: QueryableByName<__DB>, T6: QueryableByName<__DB>, T7: QueryableByName<__DB>, T8: QueryableByName<__DB>, T9: QueryableByName<__DB>, T10: QueryableByName<__DB>, T11: QueryableByName<__DB>, T12: QueryableByName<__DB>, T13: QueryableByName<__DB>, T14: QueryableByName<__DB>, T15: QueryableByName<__DB>,

source§

fn build<'a>(row: &impl NamedRow<'a, __DB>) -> Result<Self>

source§

impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, __DB> QueryableByName<__DB> for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13)where __DB: Backend, T0: QueryableByName<__DB>, T1: QueryableByName<__DB>, T2: QueryableByName<__DB>, T3: QueryableByName<__DB>, T4: QueryableByName<__DB>, T5: QueryableByName<__DB>, T6: QueryableByName<__DB>, T7: QueryableByName<__DB>, T8: QueryableByName<__DB>, T9: QueryableByName<__DB>, T10: QueryableByName<__DB>, T11: QueryableByName<__DB>, T12: QueryableByName<__DB>, T13: QueryableByName<__DB>,

source§

fn build<'a>(row: &impl NamedRow<'a, __DB>) -> Result<Self>

source§

impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, __DB> QueryableByName<__DB> for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14)where __DB: Backend, T0: QueryableByName<__DB>, T1: QueryableByName<__DB>, T2: QueryableByName<__DB>, T3: QueryableByName<__DB>, T4: QueryableByName<__DB>, T5: QueryableByName<__DB>, T6: QueryableByName<__DB>, T7: QueryableByName<__DB>, T8: QueryableByName<__DB>, T9: QueryableByName<__DB>, T10: QueryableByName<__DB>, T11: QueryableByName<__DB>, T12: QueryableByName<__DB>, T13: QueryableByName<__DB>, T14: QueryableByName<__DB>,

source§

fn build<'a>(row: &impl NamedRow<'a, __DB>) -> Result<Self>

source§

impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, __DB> QueryableByName<__DB> for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10)where __DB: Backend, T0: QueryableByName<__DB>, T1: QueryableByName<__DB>, T2: QueryableByName<__DB>, T3: QueryableByName<__DB>, T4: QueryableByName<__DB>, T5: QueryableByName<__DB>, T6: QueryableByName<__DB>, T7: QueryableByName<__DB>, T8: QueryableByName<__DB>, T9: QueryableByName<__DB>, T10: QueryableByName<__DB>,

source§

fn build<'a>(row: &impl NamedRow<'a, __DB>) -> Result<Self>

source§

impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, __DB> QueryableByName<__DB> for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9)where __DB: Backend, T0: QueryableByName<__DB>, T1: QueryableByName<__DB>, T2: QueryableByName<__DB>, T3: QueryableByName<__DB>, T4: QueryableByName<__DB>, T5: QueryableByName<__DB>, T6: QueryableByName<__DB>, T7: QueryableByName<__DB>, T8: QueryableByName<__DB>, T9: QueryableByName<__DB>,

source§

fn build<'a>(row: &impl NamedRow<'a, __DB>) -> Result<Self>

source§

impl<T0, T1, T2, __DB> QueryableByName<__DB> for (T0, T1, T2)where __DB: Backend, T0: QueryableByName<__DB>, T1: QueryableByName<__DB>, T2: QueryableByName<__DB>,

source§

fn build<'a>(row: &impl NamedRow<'a, __DB>) -> Result<Self>

source§

impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, __DB> QueryableByName<__DB> for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12)where __DB: Backend, T0: QueryableByName<__DB>, T1: QueryableByName<__DB>, T2: QueryableByName<__DB>, T3: QueryableByName<__DB>, T4: QueryableByName<__DB>, T5: QueryableByName<__DB>, T6: QueryableByName<__DB>, T7: QueryableByName<__DB>, T8: QueryableByName<__DB>, T9: QueryableByName<__DB>, T10: QueryableByName<__DB>, T11: QueryableByName<__DB>, T12: QueryableByName<__DB>,

source§

fn build<'a>(row: &impl NamedRow<'a, __DB>) -> Result<Self>

source§

impl<T0, T1, T2, T3, __DB> QueryableByName<__DB> for (T0, T1, T2, T3)where __DB: Backend, T0: QueryableByName<__DB>, T1: QueryableByName<__DB>, T2: QueryableByName<__DB>, T3: QueryableByName<__DB>,

source§

fn build<'a>(row: &impl NamedRow<'a, __DB>) -> Result<Self>

source§

impl<T0, T1, T2, T3, T4, __DB> QueryableByName<__DB> for (T0, T1, T2, T3, T4)where __DB: Backend, T0: QueryableByName<__DB>, T1: QueryableByName<__DB>, T2: QueryableByName<__DB>, T3: QueryableByName<__DB>, T4: QueryableByName<__DB>,

source§

fn build<'a>(row: &impl NamedRow<'a, __DB>) -> Result<Self>

source§

impl<T0, T1, T2, T3, T4, T5, __DB> QueryableByName<__DB> for (T0, T1, T2, T3, T4, T5)where __DB: Backend, T0: QueryableByName<__DB>, T1: QueryableByName<__DB>, T2: QueryableByName<__DB>, T3: QueryableByName<__DB>, T4: QueryableByName<__DB>, T5: QueryableByName<__DB>,

source§

fn build<'a>(row: &impl NamedRow<'a, __DB>) -> Result<Self>

source§

impl<T, DB> QueryableByName<DB> for Option<T>where DB: Backend, T: QueryableByName<DB>,

source§

fn build<'a>(row: &impl NamedRow<'a, DB>) -> Result<Self>

Implementors§