1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
use crate::decode::Decode; use crate::encode::{Encode, IsNull}; use crate::error::BoxDynError; use crate::postgres::types::array_compatible; use crate::postgres::{PgArgumentBuffer, PgTypeInfo, PgValueRef, Postgres}; use crate::types::Type; 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, ] .contains(ty) } } impl Type<Postgres> for [&'_ str] { fn type_info() -> PgTypeInfo { PgTypeInfo::TEXT_ARRAY } fn compatible(ty: &PgTypeInfo) -> bool { array_compatible::<&str>(ty) } } impl Type<Postgres> for Vec<&'_ str> { fn type_info() -> PgTypeInfo { <[&str] as Type<Postgres>>::type_info() } fn compatible(ty: &PgTypeInfo) -> bool { <[&str] as Type<Postgres>>::compatible(ty) } } impl Encode<'_, Postgres> for &'_ str { fn encode_by_ref(&self, buf: &mut PgArgumentBuffer) -> IsNull { buf.extend(self.as_bytes()); IsNull::No } } impl Encode<'_, Postgres> for String { fn encode_by_ref(&self, buf: &mut PgArgumentBuffer) -> IsNull { <&str as Encode<Postgres>>::encode(&**self, buf) } } impl<'r> Decode<'r, Postgres> for &'r str { fn decode(value: PgValueRef<'r>) -> Result<Self, BoxDynError> { Ok(value.as_str()?) } } 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 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 Type<Postgres> for Vec<String> { fn type_info() -> PgTypeInfo { <[String] as Type<Postgres>>::type_info() } fn compatible(ty: &PgTypeInfo) -> bool { <[String] as Type<Postgres>>::compatible(ty) } } impl Decode<'_, Postgres> for String { fn decode(value: PgValueRef<'_>) -> Result<Self, BoxDynError> { Ok(value.as_str()?.to_owned()) } }