/
germanubis
/
sqlx
Обзор
Документация
Войти
/
germanubis
/
sqlx
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
sqlx-postgres/src/types/str.rs
103 строки
3 KB
Joey de Waal
feat: implement Encode, Decode, Type for `Arc<str>` and `Arc<[u8]>` (and `Rc` equivalents) (#3675)
05 июл 2025, 03:58
Не верифицирован
05 июл 2025, 03:58
60f67db
Код
Авторство
О чём код?
use crate::decode::Decode; use crate::encode::{Encode, IsNull}; use crate::error::BoxDynError; use crate::types::array_compatible; use crate::types::Type; use crate::{PgArgumentBuffer, PgHasArrayType, PgTypeInfo, PgValueRef, Postgres}; use std::borrow::Cow; use std::rc::Rc; use std::sync::Arc; impl Type<Postgres> for str { fn type_info() -> PgTypeInfo { PgTypeInfo::TEXT } fn compatible(ty: &PgTypeInfo) -> bool { [ PgTypeInfo::TEXT, PgTypeInfo::NAME, PgTypeInfo::BPCHAR, PgTypeInfo::VARCHAR, PgTypeInfo::UNKNOWN, PgTypeInfo::with_name("citext"), ] .contains(ty) } } impl Type<Postgres> for String { fn type_info() -> PgTypeInfo { <&str as Type<Postgres>>::type_info() } fn compatible(ty: &PgTypeInfo) -> bool { <&str as Type<Postgres>>::compatible(ty) } } impl PgHasArrayType for &'_ str { fn array_type_info() -> PgTypeInfo { PgTypeInfo::TEXT_ARRAY } fn array_compatible(ty: &PgTypeInfo) -> bool { array_compatible::<&str>(ty) } } impl PgHasArrayType for Cow<'_, str> { fn array_type_info() -> PgTypeInfo { <&str as PgHasArrayType>::array_type_info() } fn array_compatible(ty: &PgTypeInfo) -> bool { <&str as PgHasArrayType>::array_compatible(ty) } } impl PgHasArrayType for Box<str> { fn array_type_info() -> PgTypeInfo { <&str as PgHasArrayType>::array_type_info() } fn array_compatible(ty: &PgTypeInfo) -> bool { <&str as PgHasArrayType>::array_compatible(ty) } } impl PgHasArrayType for String { fn array_type_info() -> PgTypeInfo { <&str as PgHasArrayType>::array_type_info() } fn array_compatible(ty: &PgTypeInfo) -> bool { <&str as PgHasArrayType>::array_compatible(ty) } } impl Encode<'_, Postgres> for &'_ str { fn encode_by_ref(&self, buf: &mut PgArgumentBuffer) -> Result<IsNull, BoxDynError> { buf.extend(self.as_bytes()); Ok(IsNull::No) } } impl<'r> Decode<'r, Postgres> for &'r str { fn decode(value: PgValueRef<'r>) -> Result<Self, BoxDynError> { value.as_str() } } impl Decode<'_, Postgres> for String { fn decode(value: PgValueRef<'_>) -> Result<Self, BoxDynError> { Ok(value.as_str()?.to_owned()) } } forward_encode_impl!(Arc<str>, &str, Postgres); forward_encode_impl!(Rc<str>, &str, Postgres); forward_encode_impl!(Cow<'_, str>, &str, Postgres); forward_encode_impl!(Box<str>, &str, Postgres); forward_encode_impl!(String, &str, Postgres);