mirror of
https://github.com/launchbadge/sqlx
synced 2024-11-10 06:24:16 +00:00
Added support to IpAddr with MySQL/MariaDB. (#3011)
* Added support for IpAddr with MySQL/MariaDB * Added IpAddr to mysql/types documentation
This commit is contained in:
parent
af31d5059d
commit
0e998ceccc
2 changed files with 94 additions and 0 deletions
92
sqlx-mysql/src/types/inet.rs
Normal file
92
sqlx-mysql/src/types/inet.rs
Normal file
|
@ -0,0 +1,92 @@
|
|||
use std::net::{IpAddr, Ipv4Addr, Ipv6Addr};
|
||||
|
||||
use crate::decode::Decode;
|
||||
use crate::encode::{Encode, IsNull};
|
||||
use crate::error::BoxDynError;
|
||||
use crate::io::MySqlBufMutExt;
|
||||
use crate::types::Type;
|
||||
use crate::{MySql, MySqlTypeInfo, MySqlValueRef};
|
||||
|
||||
impl Type<MySql> for Ipv4Addr {
|
||||
fn type_info() -> MySqlTypeInfo {
|
||||
<&str as Type<MySql>>::type_info()
|
||||
}
|
||||
|
||||
fn compatible(ty: &MySqlTypeInfo) -> bool {
|
||||
<&str as Type<MySql>>::compatible(ty)
|
||||
}
|
||||
}
|
||||
|
||||
impl Encode<'_, MySql> for Ipv4Addr {
|
||||
fn encode_by_ref(&self, buf: &mut Vec<u8>) -> IsNull {
|
||||
buf.put_str_lenenc(&self.to_string());
|
||||
|
||||
IsNull::No
|
||||
}
|
||||
}
|
||||
|
||||
impl Decode<'_, MySql> for Ipv4Addr {
|
||||
fn decode(value: MySqlValueRef<'_>) -> Result<Self, BoxDynError> {
|
||||
// delegate to the &str type to decode from MySQL
|
||||
let text = <&str as Decode<MySql>>::decode(value)?;
|
||||
|
||||
// parse a Ipv4Addr from the text
|
||||
text.parse().map_err(Into::into)
|
||||
}
|
||||
}
|
||||
|
||||
impl Type<MySql> for Ipv6Addr {
|
||||
fn type_info() -> MySqlTypeInfo {
|
||||
<&str as Type<MySql>>::type_info()
|
||||
}
|
||||
|
||||
fn compatible(ty: &MySqlTypeInfo) -> bool {
|
||||
<&str as Type<MySql>>::compatible(ty)
|
||||
}
|
||||
}
|
||||
|
||||
impl Encode<'_, MySql> for Ipv6Addr {
|
||||
fn encode_by_ref(&self, buf: &mut Vec<u8>) -> IsNull {
|
||||
buf.put_str_lenenc(&self.to_string());
|
||||
|
||||
IsNull::No
|
||||
}
|
||||
}
|
||||
|
||||
impl Decode<'_, MySql> for Ipv6Addr {
|
||||
fn decode(value: MySqlValueRef<'_>) -> Result<Self, BoxDynError> {
|
||||
// delegate to the &str type to decode from MySQL
|
||||
let text = <&str as Decode<MySql>>::decode(value)?;
|
||||
|
||||
// parse a Ipv6Addr from the text
|
||||
text.parse().map_err(Into::into)
|
||||
}
|
||||
}
|
||||
|
||||
impl Type<MySql> for IpAddr {
|
||||
fn type_info() -> MySqlTypeInfo {
|
||||
<&str as Type<MySql>>::type_info()
|
||||
}
|
||||
|
||||
fn compatible(ty: &MySqlTypeInfo) -> bool {
|
||||
<&str as Type<MySql>>::compatible(ty)
|
||||
}
|
||||
}
|
||||
|
||||
impl Encode<'_, MySql> for IpAddr {
|
||||
fn encode_by_ref(&self, buf: &mut Vec<u8>) -> IsNull {
|
||||
buf.put_str_lenenc(&self.to_string());
|
||||
|
||||
IsNull::No
|
||||
}
|
||||
}
|
||||
|
||||
impl Decode<'_, MySql> for IpAddr {
|
||||
fn decode(value: MySqlValueRef<'_>) -> Result<Self, BoxDynError> {
|
||||
// delegate to the &str type to decode from MySQL
|
||||
let text = <&str as Decode<MySql>>::decode(value)?;
|
||||
|
||||
// parse a IpAddr from the text
|
||||
text.parse().map_err(Into::into)
|
||||
}
|
||||
}
|
|
@ -17,6 +17,7 @@
|
|||
//! | `f64` | DOUBLE |
|
||||
//! | `&str`, [`String`] | VARCHAR, CHAR, TEXT |
|
||||
//! | `&[u8]`, `Vec<u8>` | VARBINARY, BINARY, BLOB |
|
||||
//! | `IpAddr`, `Ipv4Addr`, `Ipv6Addr` | VARCHAR, TEXT |
|
||||
//!
|
||||
//! ##### Note: `BOOLEAN`/`BOOL` Type
|
||||
//! MySQL and MariaDB treat `BOOLEAN` as an alias of the `TINYINT` type:
|
||||
|
@ -102,6 +103,7 @@ pub(crate) use sqlx_core::types::*;
|
|||
mod bool;
|
||||
mod bytes;
|
||||
mod float;
|
||||
mod inet;
|
||||
mod int;
|
||||
mod str;
|
||||
mod text;
|
||||
|
|
Loading…
Reference in a new issue