forked from mongodb/bson-rust
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdecimal128.rs
44 lines (37 loc) · 1.38 KB
/
decimal128.rs
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
39
40
41
42
43
44
//! [BSON Decimal128](https://github.com/mongodb/specifications/blob/master/source/bson-decimal128/decimal128.rst) data type representation
use std::{convert::TryInto, fmt};
/// Struct representing a BSON Decimal128 type.
///
/// Currently, this type can only be used to round-trip through BSON. See
/// [RUST-36](https://jira.mongodb.org/browse/RUST-36) to track the progress towards a complete implementation.
#[derive(Copy, Clone, PartialEq)]
pub struct Decimal128 {
/// BSON bytes containing the decimal128. Stored for round tripping.
pub(crate) bytes: [u8; 128 / 8],
}
impl Decimal128 {
/// Constructs a new `Decimal128` from the provided raw byte representation.
pub fn from_bytes(bytes: [u8; 128 / 8]) -> Self {
Self { bytes }
}
/// Returns the raw byte representation of this `Decimal128`.
pub fn bytes(&self) -> [u8; 128 / 8] {
self.bytes
}
pub(crate) fn deserialize_from_slice<E: serde::de::Error>(
bytes: &[u8],
) -> std::result::Result<Self, E> {
let arr: [u8; 128 / 8] = bytes.try_into().map_err(E::custom)?;
Ok(Decimal128 { bytes: arr })
}
}
impl fmt::Debug for Decimal128 {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "Decimal128(...)")
}
}
impl fmt::Display for Decimal128 {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "{:?}", self)
}
}