sqlx_mysql/types/
bytes.rs1use crate::decode::Decode;
2use crate::encode::{Encode, IsNull};
3use crate::error::BoxDynError;
4use crate::io::MySqlBufMutExt;
5use crate::protocol::text::ColumnType;
6use crate::types::Type;
7use crate::{MySql, MySqlTypeInfo, MySqlValueRef};
8
9impl Type<MySql> for [u8] {
10 fn type_info() -> MySqlTypeInfo {
11 MySqlTypeInfo::binary(ColumnType::Blob)
12 }
13
14 fn compatible(ty: &MySqlTypeInfo) -> bool {
15 matches!(
16 ty.r#type,
17 ColumnType::VarChar
18 | ColumnType::Blob
19 | ColumnType::TinyBlob
20 | ColumnType::MediumBlob
21 | ColumnType::LongBlob
22 | ColumnType::String
23 | ColumnType::VarString
24 | ColumnType::Enum
25 )
26 }
27}
28
29impl Encode<'_, MySql> for &'_ [u8] {
30 fn encode_by_ref(&self, buf: &mut Vec<u8>) -> Result<IsNull, BoxDynError> {
31 buf.put_bytes_lenenc(self);
32
33 Ok(IsNull::No)
34 }
35}
36
37impl<'r> Decode<'r, MySql> for &'r [u8] {
38 fn decode(value: MySqlValueRef<'r>) -> Result<Self, BoxDynError> {
39 value.as_bytes()
40 }
41}
42
43impl Type<MySql> for Box<[u8]> {
44 fn type_info() -> MySqlTypeInfo {
45 <&[u8] as Type<MySql>>::type_info()
46 }
47
48 fn compatible(ty: &MySqlTypeInfo) -> bool {
49 <&[u8] as Type<MySql>>::compatible(ty)
50 }
51}
52
53impl Encode<'_, MySql> for Box<[u8]> {
54 fn encode_by_ref(&self, buf: &mut Vec<u8>) -> Result<IsNull, BoxDynError> {
55 <&[u8] as Encode<MySql>>::encode(self.as_ref(), buf)
56 }
57}
58
59impl<'r> Decode<'r, MySql> for Box<[u8]> {
60 fn decode(value: MySqlValueRef<'r>) -> Result<Self, BoxDynError> {
61 <&[u8] as Decode<MySql>>::decode(value).map(Box::from)
62 }
63}
64
65impl Type<MySql> for Vec<u8> {
66 fn type_info() -> MySqlTypeInfo {
67 <[u8] as Type<MySql>>::type_info()
68 }
69
70 fn compatible(ty: &MySqlTypeInfo) -> bool {
71 <&[u8] as Type<MySql>>::compatible(ty)
72 }
73}
74
75impl Encode<'_, MySql> for Vec<u8> {
76 fn encode_by_ref(&self, buf: &mut Vec<u8>) -> Result<IsNull, BoxDynError> {
77 <&[u8] as Encode<MySql>>::encode(&**self, buf)
78 }
79}
80
81impl Decode<'_, MySql> for Vec<u8> {
82 fn decode(value: MySqlValueRef<'_>) -> Result<Self, BoxDynError> {
83 <&[u8] as Decode<MySql>>::decode(value).map(ToOwned::to_owned)
84 }
85}