Skip to content

A Rust native datatype for Postgres' Numeric type, to be used with Rust's "Postgres" library.

License

Notifications You must be signed in to change notification settings

risingwavelabs/rust-pg_bigdecimal

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

27 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

rust-pg_bigdecimal

A Rust datatype implementation for the Postgres Numeric type (ie the types listed in https://www.postgresql.org/docs/13/datatype-numeric.html under "decimal"/"numeric"), to be used with Rust's "Postgres" library. The full spectrum of Postgres' Numeric value range is supported.

This small Rust package has been created because currently the main "Postgres" library (https://docs.rs/postgres/0.19.1/postgres/index.html) does not provide a native datatype to read/write Numeric values.

We only implement the wire logic of Postgres' Numeric datatype. We didn't rewrite the whole logic of big number manipulation, rather we let that logic be implemented by the already popular BigDecimal package (https://docs.rs/bigdecimal/0.3.0/bigdecimal/).

Specifically, our new Rust datatype PgNumeric is simply an Optional BigDecimal. With None representing the Postgres Numeric value NaN, and all Some(..) representing Postgres Numeric numbers.

Listed on crates.io here: https://crates.io/crates/pg_bigdecimal.

Comparisons between similar packages

  • https://crates.io/crates/rust-decimal provides a rust native type, however it's represented as a 96 bit integer number + scaling bits + 1 sign bit. This means that "only" (quoting only here because it is still a large integer space) a small part of Postgres' Numeric values can be translated. In our case it was not sufficient.

About

A Rust native datatype for Postgres' Numeric type, to be used with Rust's "Postgres" library.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Rust 97.7%
  • Shell 2.3%