pub trait FromSql<'a>: Sized {
// Required methods
fn from_sql(
ty: &Type,
raw: &'a [u8],
) -> Result<Self, Box<dyn Error + Sync + Send>>;
fn accepts(ty: &Type) -> bool;
// Provided methods
fn from_sql_null(ty: &Type) -> Result<Self, Box<dyn Error + Sync + Send>> { ... }
fn from_sql_nullable(
ty: &Type,
raw: Option<&'a [u8]>,
) -> Result<Self, Box<dyn Error + Sync + Send>> { ... }
}
Expand description
A trait for types that can be created from a Postgres value.
§Types
The following implementations are provided by this crate, along with the corresponding Postgres types:
Rust type | Postgres type(s) |
---|---|
bool | BOOL |
i8 | “char” |
i16 | SMALLINT, SMALLSERIAL |
i32 | INT, SERIAL |
u32 | OID |
i64 | BIGINT, BIGSERIAL |
f32 | REAL |
f64 | DOUBLE PRECISION |
&str /String | VARCHAR, CHAR(n), TEXT, CITEXT, NAME, UNKNOWN |
LTREE, LQUERY, LTXTQUERY | |
&[u8] /Vec<u8> | BYTEA |
HashMap<String, Option<String>> | HSTORE |
SystemTime | TIMESTAMP, TIMESTAMP WITH TIME ZONE |
IpAddr | INET |
In addition, some implementations are provided for types in third party
crates. These are disabled by default; to opt into one of these
implementations, activate the Cargo feature corresponding to the crate’s
name prefixed by with-
. For example, the with-serde_json-1
feature enables
the implementation for the serde_json::Value
type.
Rust type | Postgres type(s) |
---|---|
chrono::NaiveDateTime | TIMESTAMP |
chrono::DateTime<Utc> | TIMESTAMP WITH TIME ZONE |
chrono::DateTime<Local> | TIMESTAMP WITH TIME ZONE |
chrono::DateTime<FixedOffset> | TIMESTAMP WITH TIME ZONE |
chrono::NaiveDate | DATE |
chrono::NaiveTime | TIME |
time::PrimitiveDateTime | TIMESTAMP |
time::OffsetDateTime | TIMESTAMP WITH TIME ZONE |
time::Date | DATE |
time::Time | TIME |
jiff::civil::Date | DATE |
jiff::civil::DateTime | TIMESTAMP |
jiff::civil::Time | TIME |
jiff::Timestamp | TIMESTAMP WITH TIME ZONE |
eui48::MacAddress | MACADDR |
geo_types::Point<f64> | POINT |
geo_types::Rect<f64> | BOX |
geo_types::LineString<f64> | PATH |
serde_json::Value | JSON, JSONB |
uuid::Uuid | UUID |
bit_vec::BitVec | BIT, VARBIT |
eui48::MacAddress | MACADDR |
cidr::InetCidr | CIDR |
cidr::InetAddr | INET |
smol_str::SmolStr | VARCHAR, CHAR(n), TEXT, CITEXT, |
NAME, UNKNOWN, LTREE, LQUERY, | |
LTXTQUERY |
§Nullability
In addition to the types listed above, FromSql
is implemented for
Option<T>
where T
implements FromSql
. An Option<T>
represents a
nullable Postgres value.
§Arrays
FromSql
is implemented for Vec<T>
, Box<[T]>
and [T; N]
where T
implements FromSql
, and corresponds to one-dimensional Postgres arrays.
Note: the impl for arrays only exist when the Cargo feature array-impls
is enabled.
Required Methods§
sourcefn from_sql(
ty: &Type,
raw: &'a [u8],
) -> Result<Self, Box<dyn Error + Sync + Send>>
fn from_sql( ty: &Type, raw: &'a [u8], ) -> Result<Self, Box<dyn Error + Sync + Send>>
Creates a new value of this type from a buffer of data of the specified
Postgres Type
in its binary format.
The caller of this method is responsible for ensuring that this type
is compatible with the Postgres Type
.
Provided Methods§
sourcefn from_sql_null(ty: &Type) -> Result<Self, Box<dyn Error + Sync + Send>>
fn from_sql_null(ty: &Type) -> Result<Self, Box<dyn Error + Sync + Send>>
Creates a new value of this type from a NULL
SQL value.
The caller of this method is responsible for ensuring that this type
is compatible with the Postgres Type
.
The default implementation returns Err(Box::new(WasNull))
.