sqlx_mysql/types/
bytes.rs

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