Skip to content

Commit

Permalink
add OrderedFloat/OrderedDouble serde
Browse files Browse the repository at this point in the history
  • Loading branch information
ZENOTME committed Jun 12, 2024
1 parent 45c16f4 commit 5c53ef9
Show file tree
Hide file tree
Showing 2 changed files with 1 addition and 49 deletions.
2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ mockito = "^1"
murmur3 = "0.5.2"
once_cell = "1"
opendal = "0.46"
ordered-float = "4.0.0"
ordered-float = { version = "4.0.0", features = ["serde"]}
parquet = "51"
pilota = "0.11.0"
pretty_assertions = "1.4.0"
Expand Down
48 changes: 0 additions & 48 deletions crates/iceberg/src/spec/values.rs
Original file line number Diff line number Diff line change
Expand Up @@ -60,16 +60,8 @@ pub enum PrimitiveLiteral {
/// Stored as 8-byte little-endian
Long(i64),
/// Stored as 4-byte little-endian
#[serde(
serialize_with = "serialize_ordered_float",
deserialize_with = "deserialize_ordered_float"
)]
Float(OrderedFloat<f32>),
/// Stored as 8-byte little-endian
#[serde(
serialize_with = "serialize_ordered_double",
deserialize_with = "deserialize_ordered_double"
)]
Double(OrderedFloat<f64>),
/// Stores days from the 1970-01-01 in an 4-byte little-endian int
Date(i32),
Expand All @@ -91,46 +83,6 @@ pub enum PrimitiveLiteral {
Decimal(i128),
}

fn serialize_ordered_float<S>(
float: &OrderedFloat<f32>,
serializer: S,
) -> std::result::Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
serializer.serialize_f32(float.into_inner())
}

fn deserialize_ordered_float<'de, D>(
deserializer: D,
) -> std::result::Result<OrderedFloat<f32>, D::Error>
where
D: serde::Deserializer<'de>,
{
let float = f32::deserialize(deserializer)?;
Ok(OrderedFloat(float))
}

fn serialize_ordered_double<S>(
float: &OrderedFloat<f64>,
serializer: S,
) -> std::result::Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
serializer.serialize_f64(float.into_inner())
}

fn deserialize_ordered_double<'de, D>(
deserializer: D,
) -> std::result::Result<OrderedFloat<f64>, D::Error>
where
D: serde::Deserializer<'de>,
{
let float = f64::deserialize(deserializer)?;
Ok(OrderedFloat(float))
}

impl PrimitiveLiteral {
/// Returns true if the Literal represents a primitive type
/// that can be a NaN, and that it's value is NaN
Expand Down

0 comments on commit 5c53ef9

Please sign in to comment.