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