1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
use std::io::prelude::*; use deserialize::{self, FromSql}; use pg::Pg; use serialize::{self, IsNull, Output, ToSql}; use sql_types; impl FromSql<sql_types::Bool, Pg> for bool { fn from_sql(bytes: Option<&[u8]>) -> deserialize::Result<Self> { match bytes { Some(bytes) => Ok(bytes[0] != 0), None => Ok(false), } } } impl ToSql<sql_types::Bool, Pg> for bool { fn to_sql<W: Write>(&self, out: &mut Output<W, Pg>) -> serialize::Result { out.write_all(&[*self as u8]) .map(|_| IsNull::No) .map_err(Into::into) } } #[test] fn bool_to_sql() { let mut bytes = Output::test(); ToSql::<sql_types::Bool, Pg>::to_sql(&true, &mut bytes).unwrap(); ToSql::<sql_types::Bool, Pg>::to_sql(&false, &mut bytes).unwrap(); assert_eq!(bytes, vec![1u8, 0u8]); } #[test] fn bool_from_sql_treats_null_as_false() { let result = <bool as FromSql<sql_types::Bool, Pg>>::from_sql(None).unwrap(); assert!(!result); }