diff --git a/sqlx-mysql/src/types.rs b/sqlx-mysql/src/types.rs index f0a355b6..2bd4947d 100644 --- a/sqlx-mysql/src/types.rs +++ b/sqlx-mysql/src/types.rs @@ -27,6 +27,7 @@ //! mod bool; +mod str; mod uint; // TODO: mod decimal; diff --git a/sqlx-mysql/src/types/str.rs b/sqlx-mysql/src/types/str.rs new file mode 100644 index 00000000..3374fc6d --- /dev/null +++ b/sqlx-mysql/src/types/str.rs @@ -0,0 +1,41 @@ +use bytes::Buf; +use sqlx_core::database::HasOutput; +use sqlx_core::{decode, encode}; +use sqlx_core::{Database, Decode, Encode}; + +use crate::type_info::MySqlTypeInfo; +use crate::MySqlRawValueFormat::*; +use crate::{MySql, MySqlOutput, MySqlRawValue, MySqlTypeId}; + +// https://dev.mysql.com/doc/internals/en/binary-protocol-value.html#packet-ProtocolBinary + +// TODO: accepts(ty) +// TODO: compatible(ty) + +impl Encode for str { + fn encode(&self, _: &MySqlTypeInfo, out: &mut MySqlOutput<'_>) -> encode::Result<()> { + todo!("encode: &str"); + + Ok(()) + } +} + +impl Encode for String { + fn encode(&self, _: &MySqlTypeInfo, out: &mut MySqlOutput<'_>) -> encode::Result<()> { + todo!("encode: String"); + + Ok(()) + } +} + +impl<'r> Decode<'r, MySql> for &'r str { + fn decode(value: MySqlRawValue<'r>) -> decode::Result { + value.as_str() + } +} + +impl<'r> Decode<'r, MySql> for String { + fn decode(value: MySqlRawValue<'r>) -> decode::Result { + value.as_str().map(str::to_owned) + } +}