use bytes::{BufMut, BytesMut};
use crate::error::{Error, Result};
use crate::types::{FromSql, Oid, ToSql};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct PgMoney(pub i64);
impl ToSql for PgMoney {
fn oid(&self) -> Oid {
Oid::MONEY
}
fn to_sql(&self, buf: &mut BytesMut) -> Result<()> {
buf.put_i64(self.0);
Ok(())
}
}
impl FromSql for PgMoney {
fn oid() -> Oid {
Oid::MONEY
}
fn from_sql(buf: &[u8]) -> Result<Self> {
let arr: [u8; 8] = buf
.try_into()
.map_err(|_| Error::Decode(format!("money: expected 8 bytes, got {}", buf.len())))?;
Ok(PgMoney(i64::from_be_bytes(arr)))
}
}