pub trait PgHasArrayType {
// Required method
fn array_type_info() -> PgTypeInfo;
// Provided method
fn array_compatible(ty: &PgTypeInfo) -> bool { ... }
}Expand description
Provides information necessary to encode and decode Postgres arrays as compatible Rust types.
Implementing this trait for some type T enables relevant Type,Encode and Decode impls
for Vec<T>, &[T] (slices), [T; N] (arrays), etc.
§Note: #[derive(sqlx::Type)]
If you have the postgres feature enabled, #[derive(sqlx::Type)] will also generate
an impl of this trait for your type if your wrapper is marked #[sqlx(transparent)]:
#[derive(sqlx::Type)]
#[sqlx(transparent)]
struct UserId(i64);
let user_ids: Vec<UserId> = sqlx::query_scalar("select '{ 123, 456 }'::int8[]")
.fetch(&mut pg_connection)
.await?;However, this may cause an error if the type being wrapped does not implement PgHasArrayType,
e.g. Vec itself, because we don’t currently support multidimensional arrays:
#[derive(sqlx::Type)] // ERROR: `Vec<i64>` does not implement `PgHasArrayType`
#[sqlx(transparent)]
struct UserIds(Vec<i64>);To remedy this, add #[sqlx(no_pg_array)], which disables the generation
of the PgHasArrayType impl:
#[derive(sqlx::Type)]
#[sqlx(transparent, no_pg_array)]
struct UserIds(Vec<i64>);See the documentation of Type for more details.
Required Methods§
fn array_type_info() -> PgTypeInfo
Provided Methods§
fn array_compatible(ty: &PgTypeInfo) -> bool
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 PgHasArrayType for &str
impl PgHasArrayType for &str
fn array_type_info() -> PgTypeInfo
fn array_compatible(ty: &PgTypeInfo) -> bool
Source§impl PgHasArrayType for &[u8]
impl PgHasArrayType for &[u8]
fn array_type_info() -> PgTypeInfo
Source§impl PgHasArrayType for Value
impl PgHasArrayType for Value
fn array_type_info() -> PgTypeInfo
fn array_compatible(ty: &PgTypeInfo) -> bool
Source§impl PgHasArrayType for Cow<'_, str>
impl PgHasArrayType for Cow<'_, str>
fn array_type_info() -> PgTypeInfo
fn array_compatible(ty: &PgTypeInfo) -> bool
Source§impl PgHasArrayType for bool
impl PgHasArrayType for bool
fn array_type_info() -> PgTypeInfo
Source§impl PgHasArrayType for f32
impl PgHasArrayType for f32
fn array_type_info() -> PgTypeInfo
Source§impl PgHasArrayType for f64
impl PgHasArrayType for f64
fn array_type_info() -> PgTypeInfo
Source§impl PgHasArrayType for i8
impl PgHasArrayType for i8
fn array_type_info() -> PgTypeInfo
Source§impl PgHasArrayType for i16
impl PgHasArrayType for i16
fn array_type_info() -> PgTypeInfo
Source§impl PgHasArrayType for i32
impl PgHasArrayType for i32
fn array_type_info() -> PgTypeInfo
Source§impl PgHasArrayType for i64
impl PgHasArrayType for i64
fn array_type_info() -> PgTypeInfo
Source§impl PgHasArrayType for u8
impl PgHasArrayType for u8
fn array_type_info() -> PgTypeInfo
Source§impl PgHasArrayType for NaiveDate
impl PgHasArrayType for NaiveDate
fn array_type_info() -> PgTypeInfo
Source§impl PgHasArrayType for NaiveDateTime
impl PgHasArrayType for NaiveDateTime
fn array_type_info() -> PgTypeInfo
Source§impl PgHasArrayType for NaiveTime
impl PgHasArrayType for NaiveTime
fn array_type_info() -> PgTypeInfo
Source§impl PgHasArrayType for RawValue
impl PgHasArrayType for RawValue
fn array_type_info() -> PgTypeInfo
fn array_compatible(ty: &PgTypeInfo) -> bool
Source§impl PgHasArrayType for Uuid
impl PgHasArrayType for Uuid
fn array_type_info() -> PgTypeInfo
Source§impl PgHasArrayType for Box<str>
impl PgHasArrayType for Box<str>
fn array_type_info() -> PgTypeInfo
fn array_compatible(ty: &PgTypeInfo) -> bool
Source§impl PgHasArrayType for Box<[u8]>
impl PgHasArrayType for Box<[u8]>
fn array_type_info() -> PgTypeInfo
Source§impl PgHasArrayType for String
impl PgHasArrayType for String
fn array_type_info() -> PgTypeInfo
fn array_compatible(ty: &PgTypeInfo) -> bool
Source§impl PgHasArrayType for Vec<u8>
impl PgHasArrayType for Vec<u8>
fn array_type_info() -> PgTypeInfo
Source§impl PgHasArrayType for Duration
impl PgHasArrayType for Duration
fn array_type_info() -> PgTypeInfo
Source§impl PgHasArrayType for Duration
Available on crate feature chrono only.
impl PgHasArrayType for Duration
chrono only.fn array_type_info() -> PgTypeInfo
Source§impl PgHasArrayType for NonZeroI16
impl PgHasArrayType for NonZeroI16
fn array_type_info() -> PgTypeInfo
Source§impl PgHasArrayType for NonZeroI32
impl PgHasArrayType for NonZeroI32
fn array_type_info() -> PgTypeInfo
Source§impl PgHasArrayType for NonZeroI64
impl PgHasArrayType for NonZeroI64
fn array_type_info() -> PgTypeInfo
Source§impl<T1> PgHasArrayType for (T1,)
impl<T1> PgHasArrayType for (T1,)
fn array_type_info() -> PgTypeInfo
Source§impl<T1, T2> PgHasArrayType for (T1, T2)
impl<T1, T2> PgHasArrayType for (T1, T2)
fn array_type_info() -> PgTypeInfo
Source§impl<T1, T2, T3> PgHasArrayType for (T1, T2, T3)
impl<T1, T2, T3> PgHasArrayType for (T1, T2, T3)
fn array_type_info() -> PgTypeInfo
Source§impl<T1, T2, T3, T4> PgHasArrayType for (T1, T2, T3, T4)
impl<T1, T2, T3, T4> PgHasArrayType for (T1, T2, T3, T4)
fn array_type_info() -> PgTypeInfo
Source§impl<T1, T2, T3, T4, T5> PgHasArrayType for (T1, T2, T3, T4, T5)
impl<T1, T2, T3, T4, T5> PgHasArrayType for (T1, T2, T3, T4, T5)
fn array_type_info() -> PgTypeInfo
Source§impl<T1, T2, T3, T4, T5, T6> PgHasArrayType for (T1, T2, T3, T4, T5, T6)
impl<T1, T2, T3, T4, T5, T6> PgHasArrayType for (T1, T2, T3, T4, T5, T6)
fn array_type_info() -> PgTypeInfo
Source§impl<T1, T2, T3, T4, T5, T6, T7> PgHasArrayType for (T1, T2, T3, T4, T5, T6, T7)
impl<T1, T2, T3, T4, T5, T6, T7> PgHasArrayType for (T1, T2, T3, T4, T5, T6, T7)
fn array_type_info() -> PgTypeInfo
Source§impl<T1, T2, T3, T4, T5, T6, T7, T8> PgHasArrayType for (T1, T2, T3, T4, T5, T6, T7, T8)
impl<T1, T2, T3, T4, T5, T6, T7, T8> PgHasArrayType for (T1, T2, T3, T4, T5, T6, T7, T8)
fn array_type_info() -> PgTypeInfo
Source§impl<T1, T2, T3, T4, T5, T6, T7, T8, T9> PgHasArrayType for (T1, T2, T3, T4, T5, T6, T7, T8, T9)
impl<T1, T2, T3, T4, T5, T6, T7, T8, T9> PgHasArrayType for (T1, T2, T3, T4, T5, T6, T7, T8, T9)
fn array_type_info() -> PgTypeInfo
Source§impl<T> PgHasArrayType for Option<T>where
T: PgHasArrayType,
impl<T> PgHasArrayType for Option<T>where
T: PgHasArrayType,
fn array_type_info() -> PgTypeInfo
fn array_compatible(ty: &PgTypeInfo) -> bool
Source§impl<T> PgHasArrayType for &Twhere
T: PgHasArrayType,
impl<T> PgHasArrayType for &Twhere
T: PgHasArrayType,
fn array_type_info() -> PgTypeInfo
fn array_compatible(ty: &PgTypeInfo) -> bool
Source§impl<T> PgHasArrayType for Json<T>
impl<T> PgHasArrayType for Json<T>
fn array_type_info() -> PgTypeInfo
fn array_compatible(ty: &PgTypeInfo) -> bool
Source§impl<T> PgHasArrayType for Text<T>
impl<T> PgHasArrayType for Text<T>
fn array_type_info() -> PgTypeInfo
fn array_compatible(ty: &PgTypeInfo) -> bool
Source§impl<Tz: TimeZone> PgHasArrayType for DateTime<Tz>
impl<Tz: TimeZone> PgHasArrayType for DateTime<Tz>
fn array_type_info() -> PgTypeInfo
Source§impl<const N: usize> PgHasArrayType for [u8; N]
impl<const N: usize> PgHasArrayType for [u8; N]
fn array_type_info() -> PgTypeInfo
Implementors§
impl PgHasArrayType for PgCube
impl PgHasArrayType for Oid
impl PgHasArrayType for PgBox
impl PgHasArrayType for PgCiText
impl PgHasArrayType for PgCircle
impl PgHasArrayType for PgHstore
impl PgHasArrayType for PgInterval
impl PgHasArrayType for PgLQuery
impl PgHasArrayType for PgLSeg
impl PgHasArrayType for PgLTree
impl PgHasArrayType for PgLine
impl PgHasArrayType for PgMoney
impl PgHasArrayType for PgPath
impl PgHasArrayType for PgPoint
impl PgHasArrayType for PgPolygon
impl PgHasArrayType for PgRange<i32>
impl PgHasArrayType for PgRange<i64>
impl PgHasArrayType for PgRange<NaiveDate>
chrono only.impl PgHasArrayType for PgRange<NaiveDateTime>
chrono only.impl<Time, Offset> PgHasArrayType for PgTimeTz<Time, Offset>
impl<Tz: TimeZone> PgHasArrayType for PgRange<DateTime<Tz>>
chrono only.