cdbc_mysql/types/
bytes.rs1use cdbc::decode::Decode;
2use cdbc::encode::{Encode, IsNull};
3use cdbc::error::BoxDynError;
4use crate::io::MySqlBufMutExt;
5use crate::protocol::text::ColumnType;
6use crate::{MySql, MySqlTypeInfo, MySqlValueRef};
7use cdbc::types::Type;
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>) -> IsNull {
31 buf.put_bytes_lenenc(self);
32
33 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 Vec<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 Vec<u8> {
54 fn encode_by_ref(&self, buf: &mut Vec<u8>) -> IsNull {
55 <&[u8] as Encode<MySql>>::encode(&**self, buf)
56 }
57}
58
59impl Decode<'_, MySql> for Vec<u8> {
60 fn decode(value: MySqlValueRef<'_>) -> Result<Self, BoxDynError> {
61 <&[u8] as Decode<MySql>>::decode(value).map(ToOwned::to_owned)
62 }
63}