Skip to content

Commit

Permalink
Update postgres to 0.19
Browse files Browse the repository at this point in the history
  • Loading branch information
JakubOnderka committed Jul 11, 2021
1 parent 47814c1 commit 2ffa0b2
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 30 deletions.
2 changes: 1 addition & 1 deletion Cargo.toml
Expand Up @@ -24,7 +24,7 @@ version = "1.0"
optional = true

[dependencies.postgres]
version = "0.15"
version = "0.19"
optional = true

[dependencies.diesel]
Expand Down
60 changes: 31 additions & 29 deletions src/postgres_support.rs
@@ -1,29 +1,29 @@
use std::error::Error;
use postgres::types::{FromSql, IsNull, ToSql, Type, CIDR};
use postgres::{accepts, to_sql_checked};
use postgres::types::{FromSql, IsNull, ToSql, Type, accepts, to_sql_checked};
use crate::{IpNetwork, Ipv4Network, Ipv6Network};
use crate::postgres_common;
use postgres::types::private::BytesMut;

type PostgresResult<T> = Result<T, Box<Error + Sync + Send>>;
type PostgresResult<T> = Result<T, Box<dyn Error + Sync + Send>>;

impl FromSql for Ipv4Network {
fn from_sql(_: &Type, raw: &[u8]) -> PostgresResult<Ipv4Network> {
impl<'a> FromSql<'a> for Ipv4Network {
fn from_sql(_: &Type, raw: &'a [u8]) -> PostgresResult<Ipv4Network> {
postgres_common::from_sql_ipv4_network(raw)
}

accepts!(CIDR);
}

impl FromSql for Ipv6Network {
fn from_sql(_: &Type, raw: &[u8]) -> PostgresResult<Ipv6Network> {
impl<'a> FromSql<'a> for Ipv6Network {
fn from_sql(_: &Type, raw: &'a [u8]) -> PostgresResult<Ipv6Network> {
postgres_common::from_sql_ipv6_network(raw)
}

accepts!(CIDR);
}

impl FromSql for IpNetwork {
fn from_sql(t: &Type, raw: &[u8]) -> PostgresResult<IpNetwork> {
impl<'a> FromSql<'a> for IpNetwork {
fn from_sql(t: &Type, raw: &'a [u8]) -> PostgresResult<IpNetwork> {
match raw[0] {
postgres_common::IPV4_TYPE => Ok(IpNetwork::V4(Ipv4Network::from_sql(t, raw)?)),
postgres_common::IPV6_TYPE => Ok(IpNetwork::V6(Ipv6Network::from_sql(t, raw)?)),
Expand All @@ -35,7 +35,7 @@ impl FromSql for IpNetwork {
}

impl ToSql for Ipv4Network {
fn to_sql(&self, _: &Type, w: &mut Vec<u8>) -> PostgresResult<IsNull> {
fn to_sql(&self, _ty: &Type, w: &mut BytesMut) -> PostgresResult<IsNull> {
let bytes = postgres_common::to_sql_ipv4_network(self);
w.extend_from_slice(&bytes);

Expand All @@ -47,7 +47,7 @@ impl ToSql for Ipv4Network {
}

impl ToSql for Ipv6Network {
fn to_sql(&self, _: &Type, w: &mut Vec<u8>) -> PostgresResult<IsNull> {
fn to_sql(&self, _ty: &Type, w: &mut BytesMut) -> PostgresResult<IsNull> {
let bytes = postgres_common::to_sql_ipv6_network(self);
w.extend_from_slice(&bytes);

Expand All @@ -59,10 +59,10 @@ impl ToSql for Ipv6Network {
}

impl ToSql for IpNetwork {
fn to_sql(&self, t: &Type, w: &mut Vec<u8>) -> PostgresResult<IsNull> {
fn to_sql(&self, ty: &Type, w: &mut BytesMut) -> PostgresResult<IsNull> {
match *self {
IpNetwork::V4(ref network) => network.to_sql(t, w),
IpNetwork::V6(ref network) => network.to_sql(t, w),
IpNetwork::V4(ref network) => network.to_sql(ty, w),
IpNetwork::V6(ref network) => network.to_sql(ty, w),
}
}

Expand All @@ -73,8 +73,10 @@ impl ToSql for IpNetwork {
#[cfg(test)]
mod tests {
use std::net::{Ipv4Addr, Ipv6Addr};
use postgres::types::{FromSql, ToSql, CIDR};
use postgres::types::{FromSql, ToSql};
use postgres::types::Type;
use crate::{IpNetwork, Ipv4Network, Ipv6Network};
use postgres::types::private::BytesMut;

fn return_test_ipv4_network() -> Ipv4Network {
Ipv4Network::new(Ipv4Addr::new(192, 168, 0, 0), 16).unwrap()
Expand All @@ -87,8 +89,8 @@ mod tests {
#[test]
fn ivp4_to_sql() {
let ip_network = return_test_ipv4_network();
let mut output = vec![];
assert!(ip_network.to_sql(&CIDR, &mut output).is_ok());
let mut output = BytesMut::new();
assert!(ip_network.to_sql(&Type::CIDR, &mut output).is_ok());
assert_eq!(2, output[0]);
assert_eq!(16, output[1]);
assert_eq!(1, output[2]);
Expand All @@ -102,11 +104,11 @@ mod tests {
#[test]
fn ivp4_both_direction() {
let ip_network = return_test_ipv4_network();
let mut output = vec![];
let mut output = BytesMut::new();

assert!(ip_network.to_sql(&CIDR, &mut output).is_ok());
assert!(ip_network.to_sql(&Type::CIDR, &mut output).is_ok());

let result = Ipv4Network::from_sql(&CIDR, &output);
let result = Ipv4Network::from_sql(&Type::CIDR, &output);
assert!(result.is_ok());

let ip_network_converted = result.unwrap();
Expand All @@ -116,8 +118,8 @@ mod tests {
#[test]
fn ivp6_to_sql() {
let ip_network = return_test_ipv6_network();
let mut output = vec![];
assert!(ip_network.to_sql(&CIDR, &mut output).is_ok());
let mut output = BytesMut::new();
assert!(ip_network.to_sql(&Type::CIDR, &mut output).is_ok());
assert_eq!(3, output[0]);
assert_eq!(32, output[1]);
assert_eq!(1, output[2]);
Expand All @@ -134,11 +136,11 @@ mod tests {
#[test]
fn ivp6_both_direction() {
let ip_network = return_test_ipv6_network();
let mut output = vec![];
let mut output = BytesMut::new();

assert!(ip_network.to_sql(&CIDR, &mut output).is_ok());
assert!(ip_network.to_sql(&Type::CIDR, &mut output).is_ok());

let result = Ipv6Network::from_sql(&CIDR, &output);
let result = Ipv6Network::from_sql(&Type::CIDR, &output);
assert!(result.is_ok());

let ip_network_converted = result.unwrap();
Expand All @@ -148,14 +150,14 @@ mod tests {
#[test]
fn ipnetwork_to_sql_v4() {
let ip_network = IpNetwork::V4(return_test_ipv4_network());
let mut output = vec![];
assert!(ip_network.to_sql(&CIDR, &mut output).is_ok());
let mut output = BytesMut::new();
assert!(ip_network.to_sql(&Type::CIDR, &mut output).is_ok());
}

#[test]
fn ipnetwork_to_sql_v6() {
let ip_network = IpNetwork::V6(return_test_ipv6_network());
let mut output = vec![];
assert!(ip_network.to_sql(&CIDR, &mut output).is_ok());
let mut output = BytesMut::new();
assert!(ip_network.to_sql(&Type::CIDR, &mut output).is_ok());
}
}

0 comments on commit 2ffa0b2

Please sign in to comment.