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 38
#[cfg(feature = "bigdecimal")] pub mod bigdecimal { extern crate bigdecimal; use std::error::Error; use std::io::prelude::*; use mysql::{Mysql, MysqlType}; use self::bigdecimal::BigDecimal; use types::{self, FromSql, HasSqlType, IsNull, ToSql, ToSqlOutput}; impl ToSql<types::Numeric, Mysql> for BigDecimal { fn to_sql<W: Write>( &self, out: &mut ToSqlOutput<W, Mysql>, ) -> Result<IsNull, Box<Error + Send + Sync>> { write!(out, "{}", *self) .map(|_| IsNull::No) .map_err(|e| e.into()) } } impl FromSql<types::Numeric, Mysql> for BigDecimal { fn from_sql(bytes: Option<&[u8]>) -> Result<Self, Box<Error + Send + Sync>> { let bytes = not_none!(bytes); BigDecimal::parse_bytes(bytes, 10) .ok_or_else(|| Box::from(format!("{:?} is not valid decimal number ", bytes))) } } impl HasSqlType<BigDecimal> for Mysql { fn metadata(_: &()) -> MysqlType { MysqlType::String } } }