pub trait FromSql<A, DB: Backend>: Sized {
// Required method
fn from_sql(bytes: DB::RawValue<'_>) -> Result<Self>;
// Provided method
fn from_nullable_sql(bytes: Option<DB::RawValue<'_>>) -> Result<Self> { ... }
}
Expand description
Deserialize a single field of a given SQL type.
When possible, implementations of this trait should prefer to use an
existing implementation, rather than reading from bytes
. (For example, if
you are implementing this for an enum which is represented as an integer in
the database, prefer i32::from_sql(bytes)
(or the explicit form
<i32 as FromSql<Integer, DB>>::from_sql(bytes)
) over reading from bytes
directly)
Types which implement this trait should also have #[derive(FromSqlRow)]
§Backend specific details
- For PostgreSQL, the bytes will be sent using the binary protocol, not text.
- For SQLite, the actual type of
DB::RawValue
is private API. All implementations of this trait must be written in terms of an existing primitive. - For MySQL, the value of
bytes
will depend on the return value oftype_metadata
for the given SQL type. SeeMysqlType
for details. - For third party backends, consult that backend’s documentation.
§Examples
Most implementations of this trait will be defined in terms of an existing implementation.
#[repr(i32)]
#[derive(Debug, Clone, Copy, FromSqlRow)]
pub enum MyEnum {
A = 1,
B = 2,
}
impl<DB> FromSql<Integer, DB> for MyEnum
where
DB: Backend,
i32: FromSql<Integer, DB>,
{
fn from_sql(bytes: DB::RawValue<'_>) -> deserialize::Result<Self> {
match i32::from_sql(bytes)? {
1 => Ok(MyEnum::A),
2 => Ok(MyEnum::B),
x => Err(format!("Unrecognized variant {}", x).into()),
}
}
}
Required Methods§
Provided Methods§
Sourcefn from_nullable_sql(bytes: Option<DB::RawValue<'_>>) -> Result<Self>
fn from_nullable_sql(bytes: Option<DB::RawValue<'_>>) -> Result<Self>
A specialized variant of from_sql
for handling null values.
The default implementation returns an UnexpectedNullError
for
an encountered null value and calls Self::from_sql
otherwise
If your custom type supports null values you need to provide a custom implementation.
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 FromSql<BigInt, Sqlite> for i64
impl FromSql<BigInt, Sqlite> for i64
fn from_sql(value: SqliteValue<'_, '_, '_>) -> Result<Self>
Source§impl FromSql<Binary, Sqlite> for *const [u8]
The returned pointer is only valid for the lifetime to the argument of
from_sql
. This impl is intended for uses where you want to write a new
impl in terms of Vec<u8>
, but don’t want to allocate. We have to return a
raw pointer instead of a reference with a lifetime due to the structure of
FromSql
impl FromSql<Binary, Sqlite> for *const [u8]
The returned pointer is only valid for the lifetime to the argument of
from_sql
. This impl is intended for uses where you want to write a new
impl in terms of Vec<u8>
, but don’t want to allocate. We have to return a
raw pointer instead of a reference with a lifetime due to the structure of
FromSql
fn from_sql(bytes: SqliteValue<'_, '_, '_>) -> Result<Self>
Source§impl FromSql<Bool, Sqlite> for bool
impl FromSql<Bool, Sqlite> for bool
fn from_sql(value: SqliteValue<'_, '_, '_>) -> Result<Self>
Source§impl FromSql<Date, Sqlite> for String
impl FromSql<Date, Sqlite> for String
fn from_sql(value: SqliteValue<'_, '_, '_>) -> Result<Self>
Source§impl FromSql<Double, Sqlite> for f64
impl FromSql<Double, Sqlite> for f64
fn from_sql(value: SqliteValue<'_, '_, '_>) -> Result<Self>
Source§impl FromSql<Float, Sqlite> for f32
impl FromSql<Float, Sqlite> for f32
fn from_sql(value: SqliteValue<'_, '_, '_>) -> Result<Self>
Source§impl FromSql<Integer, Sqlite> for i32
impl FromSql<Integer, Sqlite> for i32
fn from_sql(value: SqliteValue<'_, '_, '_>) -> Result<Self>
Source§impl FromSql<SmallInt, Sqlite> for i16
impl FromSql<SmallInt, Sqlite> for i16
fn from_sql(value: SqliteValue<'_, '_, '_>) -> Result<Self>
Source§impl FromSql<Text, Sqlite> for *const str
The returned pointer is only valid for the lifetime to the argument of
from_sql
. This impl is intended for uses where you want to write a new
impl in terms of String
, but don’t want to allocate. We have to return a
raw pointer instead of a reference with a lifetime due to the structure of
FromSql
impl FromSql<Text, Sqlite> for *const str
The returned pointer is only valid for the lifetime to the argument of
from_sql
. This impl is intended for uses where you want to write a new
impl in terms of String
, but don’t want to allocate. We have to return a
raw pointer instead of a reference with a lifetime due to the structure of
FromSql