diff --git a/Cargo.toml b/Cargo.toml index 60716b6..6f84d85 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -24,11 +24,11 @@ bench = false csv-core = { path = "csv-core", version = "0.1.11" } itoa = "1" ryu = "1" -serde = "1.0.55" +serde_core = "1.0.221" [dev-dependencies] bstr = { version = "1.7.0", default-features = false, features = ["alloc", "serde"] } -serde = { version = "1.0.55", features = ["derive"] } +serde = { version = "1.0.221", features = ["derive"] } [profile.release] debug = true diff --git a/src/byte_record.rs b/src/byte_record.rs index 08e7169..c6c196e 100644 --- a/src/byte_record.rs +++ b/src/byte_record.rs @@ -5,7 +5,7 @@ use std::{ result, }; -use serde::de::Deserialize; +use serde_core::de::Deserialize; use crate::{ deserializer::deserialize_byte_record, diff --git a/src/deserializer.rs b/src/deserializer.rs index cb4990c..810c021 100644 --- a/src/deserializer.rs +++ b/src/deserializer.rs @@ -1,13 +1,12 @@ use std::{error::Error as StdError, fmt, iter, num, str}; -use serde::{ +use serde_core::{ de::value::BorrowedBytesDeserializer, de::{ Deserialize, DeserializeSeed, Deserializer, EnumAccess, Error as SerdeError, IntoDeserializer, MapAccess, SeqAccess, Unexpected, VariantAccess, Visitor, }, - serde_if_integer128, }; use crate::{ @@ -206,22 +205,18 @@ impl<'r> DeRecord<'r> for DeStringRecord<'r> { ) -> Result { let x = self.next_field()?; if x == "true" { - return visitor.visit_bool(true); + visitor.visit_bool(true) } else if x == "false" { - return visitor.visit_bool(false); + visitor.visit_bool(false) } else if let Some(n) = try_positive_integer64(x) { - return visitor.visit_u64(n); + visitor.visit_u64(n) } else if let Some(n) = try_negative_integer64(x) { - return visitor.visit_i64(n); - } - serde_if_integer128! { - if let Some(n) = try_positive_integer128(x) { - return visitor.visit_u128(n); - } else if let Some(n) = try_negative_integer128(x) { - return visitor.visit_i128(n); - } - } - if let Some(n) = try_float(x) { + visitor.visit_i64(n) + } else if let Some(n) = try_positive_integer128(x) { + visitor.visit_u128(n) + } else if let Some(n) = try_negative_integer128(x) { + visitor.visit_i128(n) + } else if let Some(n) = try_float(x) { visitor.visit_f64(n) } else { visitor.visit_str(x) @@ -297,22 +292,18 @@ impl<'r> DeRecord<'r> for DeByteRecord<'r> { ) -> Result { let x = self.next_field_bytes()?; if x == b"true" { - return visitor.visit_bool(true); + visitor.visit_bool(true) } else if x == b"false" { - return visitor.visit_bool(false); + visitor.visit_bool(false) } else if let Some(n) = try_positive_integer64_bytes(x) { - return visitor.visit_u64(n); + visitor.visit_u64(n) } else if let Some(n) = try_negative_integer64_bytes(x) { - return visitor.visit_i64(n); - } - serde_if_integer128! { - if let Some(n) = try_positive_integer128_bytes(x) { - return visitor.visit_u128(n); - } else if let Some(n) = try_negative_integer128_bytes(x) { - return visitor.visit_i128(n); - } - } - if let Some(n) = try_float_bytes(x) { + visitor.visit_i64(n) + } else if let Some(n) = try_positive_integer128_bytes(x) { + visitor.visit_u128(n) + } else if let Some(n) = try_negative_integer128_bytes(x) { + visitor.visit_i128(n) + } else if let Some(n) = try_float_bytes(x) { visitor.visit_f64(n) } else if let Ok(s) = str::from_utf8(x) { visitor.visit_str(s) @@ -366,16 +357,12 @@ impl<'a, 'de: 'a, T: DeRecord<'de>> Deserializer<'de> deserialize_int!(deserialize_u16, visit_u16, u16); deserialize_int!(deserialize_u32, visit_u32, u32); deserialize_int!(deserialize_u64, visit_u64, u64); - serde_if_integer128! { - deserialize_int!(deserialize_u128, visit_u128, u128); - } + deserialize_int!(deserialize_u128, visit_u128, u128); deserialize_int!(deserialize_i8, visit_i8, i8); deserialize_int!(deserialize_i16, visit_i16, i16); deserialize_int!(deserialize_i32, visit_i32, i32); deserialize_int!(deserialize_i64, visit_i64, i64); - serde_if_integer128! { - deserialize_int!(deserialize_i128, visit_i128, i128); - } + deserialize_int!(deserialize_i128, visit_i128, i128); fn deserialize_f32>( self, @@ -747,14 +734,12 @@ impl DeserializeErrorKind { } } -serde_if_integer128! { - fn try_positive_integer128(s: &str) -> Option { - s.parse().ok() - } +fn try_positive_integer128(s: &str) -> Option { + s.parse().ok() +} - fn try_negative_integer128(s: &str) -> Option { - s.parse().ok() - } +fn try_negative_integer128(s: &str) -> Option { + s.parse().ok() } fn try_positive_integer64(s: &str) -> Option { @@ -777,14 +762,12 @@ fn try_negative_integer64_bytes(s: &[u8]) -> Option { str::from_utf8(s).ok().and_then(|s| s.parse().ok()) } -serde_if_integer128! { - fn try_positive_integer128_bytes(s: &[u8]) -> Option { - str::from_utf8(s).ok().and_then(|s| s.parse().ok()) - } +fn try_positive_integer128_bytes(s: &[u8]) -> Option { + str::from_utf8(s).ok().and_then(|s| s.parse().ok()) +} - fn try_negative_integer128_bytes(s: &[u8]) -> Option { - str::from_utf8(s).ok().and_then(|s| s.parse().ok()) - } +fn try_negative_integer128_bytes(s: &[u8]) -> Option { + str::from_utf8(s).ok().and_then(|s| s.parse().ok()) } fn try_float_bytes(s: &[u8]) -> Option { @@ -797,7 +780,7 @@ mod tests { use { bstr::BString, - serde::{de::DeserializeOwned, serde_if_integer128, Deserialize}, + serde::{de::DeserializeOwned, Deserialize}, }; use crate::{ @@ -946,12 +929,10 @@ mod tests { assert_eq!(got, 42); } - serde_if_integer128! { - #[test] - fn one_field_128() { - let got: i128 = de(&["2010223372036854775808"]).unwrap(); - assert_eq!(got, 2010223372036854775808); - } + #[test] + fn one_field_128() { + let got: i128 = de(&["2010223372036854775808"]).unwrap(); + assert_eq!(got, 2010223372036854775808); } #[test] diff --git a/src/lib.rs b/src/lib.rs index bf140dc..28ff12a 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -137,7 +137,7 @@ $ cargo run --example cookbook-read-serde < examples/data/smallpop.csv use std::result; -use serde::{Deserialize, Deserializer}; +use serde_core::{Deserialize, Deserializer}; pub use crate::{ byte_record::{ByteRecord, ByteRecordIter, Position}, diff --git a/src/reader.rs b/src/reader.rs index 823ed8c..a34c9d5 100644 --- a/src/reader.rs +++ b/src/reader.rs @@ -8,7 +8,7 @@ use std::{ use { csv_core::{Reader as CoreReader, ReaderBuilder as CoreReaderBuilder}, - serde::de::DeserializeOwned, + serde_core::de::DeserializeOwned, }; use crate::{ diff --git a/src/serializer.rs b/src/serializer.rs index 96d7cf6..7416db9 100644 --- a/src/serializer.rs +++ b/src/serializer.rs @@ -1,12 +1,9 @@ use std::{fmt, io, mem}; -use serde::{ - ser::{ - Error as SerdeError, Serialize, SerializeMap, SerializeSeq, - SerializeStruct, SerializeStructVariant, SerializeTuple, - SerializeTupleStruct, SerializeTupleVariant, Serializer, - }, - serde_if_integer128, +use serde_core::ser::{ + Error as SerdeError, Serialize, SerializeMap, SerializeSeq, + SerializeStruct, SerializeStructVariant, SerializeTuple, + SerializeTupleStruct, SerializeTupleVariant, Serializer, }; use crate::{ @@ -66,11 +63,9 @@ impl<'a, 'w, W: io::Write> Serializer for &'a mut SeRecord<'w, W> { self.wtr.write_field(buffer.format(v)) } - serde_if_integer128! { - fn serialize_i128(self, v: i128) -> Result { - let mut buffer = itoa::Buffer::new(); - self.wtr.write_field(buffer.format(v)) - } + fn serialize_i128(self, v: i128) -> Result { + let mut buffer = itoa::Buffer::new(); + self.wtr.write_field(buffer.format(v)) } fn serialize_u8(self, v: u8) -> Result { @@ -93,11 +88,9 @@ impl<'a, 'w, W: io::Write> Serializer for &'a mut SeRecord<'w, W> { self.wtr.write_field(buffer.format(v)) } - serde_if_integer128! { - fn serialize_u128(self, v: u128) -> Result { - let mut buffer = itoa::Buffer::new(); - self.wtr.write_field(buffer.format(v)) - } + fn serialize_u128(self, v: u128) -> Result { + let mut buffer = itoa::Buffer::new(); + self.wtr.write_field(buffer.format(v)) } fn serialize_f32(self, v: f32) -> Result { @@ -524,10 +517,8 @@ impl<'a, 'w, W: io::Write> Serializer for &'a mut SeHeader<'w, W> { self.handle_scalar(v) } - serde_if_integer128! { - fn serialize_i128(self, v: i128) -> Result { - self.handle_scalar(v) - } + fn serialize_i128(self, v: i128) -> Result { + self.handle_scalar(v) } fn serialize_u8(self, v: u8) -> Result { @@ -546,10 +537,8 @@ impl<'a, 'w, W: io::Write> Serializer for &'a mut SeHeader<'w, W> { self.handle_scalar(v) } - serde_if_integer128! { - fn serialize_u128(self, v: u128) -> Result { - self.handle_scalar(v) - } + fn serialize_u128(self, v: u128) -> Result { + self.handle_scalar(v) } fn serialize_f32(self, v: f32) -> Result { @@ -820,10 +809,7 @@ impl<'a, 'w, W: io::Write> SerializeStructVariant for &'a mut SeHeader<'w, W> { #[cfg(test)] mod tests { - use { - bstr::ByteSlice, - serde::{serde_if_integer128, Serialize}, - }; + use {bstr::ByteSlice, serde::Serialize}; use crate::{ error::{Error, ErrorKind}, @@ -879,24 +865,22 @@ mod tests { assert_eq!(got, ""); } - serde_if_integer128! { - #[test] - fn integer_u128() { - let got = serialize(i128::max_value() as u128 + 1); - assert_eq!(got, "170141183460469231731687303715884105728\n"); - let (wrote, got) = serialize_header(12345); - assert!(!wrote); - assert_eq!(got, ""); - } + #[test] + fn integer_u128() { + let got = serialize(i128::max_value() as u128 + 1); + assert_eq!(got, "170141183460469231731687303715884105728\n"); + let (wrote, got) = serialize_header(12345); + assert!(!wrote); + assert_eq!(got, ""); + } - #[test] - fn integer_i128() { - let got = serialize(i128::max_value()); - assert_eq!(got, "170141183460469231731687303715884105727\n"); - let (wrote, got) = serialize_header(12345); - assert!(!wrote); - assert_eq!(got, ""); - } + #[test] + fn integer_i128() { + let got = serialize(i128::max_value()); + assert_eq!(got, "170141183460469231731687303715884105727\n"); + let (wrote, got) = serialize_header(12345); + assert!(!wrote); + assert_eq!(got, ""); } #[test] @@ -1146,23 +1130,21 @@ mod tests { assert_eq!(got, "true,5,hi\n"); } - serde_if_integer128! { - #[test] - fn struct_no_headers_128() { - #[derive(Serialize)] - struct Foo { - x: i128, - y: u128, - } + #[test] + fn struct_no_headers_128() { + #[derive(Serialize)] + struct Foo { + x: i128, + y: u128, + } - let got = - serialize(Foo { x: i128::max_value(), y: u128::max_value() }); - assert_eq!( - got, - "170141183460469231731687303715884105727,\ + let got = + serialize(Foo { x: i128::max_value(), y: u128::max_value() }); + assert_eq!( + got, + "170141183460469231731687303715884105727,\ 340282366920938463463374607431768211455\n" - ); - } + ); } #[test] diff --git a/src/string_record.rs b/src/string_record.rs index dafa882..d9001e2 100644 --- a/src/string_record.rs +++ b/src/string_record.rs @@ -5,7 +5,7 @@ use std::{ result, str, }; -use serde::de::Deserialize; +use serde_core::de::Deserialize; use crate::{ byte_record::{ByteRecord, ByteRecordIter, Position}, diff --git a/src/writer.rs b/src/writer.rs index 9fef1f1..ba3edf9 100644 --- a/src/writer.rs +++ b/src/writer.rs @@ -5,7 +5,7 @@ use { self, WriteResult, Writer as CoreWriter, WriterBuilder as CoreWriterBuilder, }, - serde::Serialize, + serde_core::Serialize, }; use crate::{ @@ -1216,7 +1216,7 @@ impl Buffer { mod tests { use std::io::{self, Write}; - use serde::{serde_if_integer128, Serialize}; + use serde::Serialize; use crate::{ byte_record::ByteRecord, error::ErrorKind, string_record::StringRecord, @@ -1415,25 +1415,24 @@ mod tests { assert_eq!(wtr_as_string(wtr), "42,42.5,true\n"); } - serde_if_integer128! { - #[test] - fn serialize_no_headers_128() { - #[derive(Serialize)] - struct Row { - foo: i128, - bar: f64, - baz: bool, - } - - let mut wtr = - WriterBuilder::new().has_headers(false).from_writer(vec![]); - wtr.serialize(Row { - foo: 9_223_372_036_854_775_808, - bar: 42.5, - baz: true, - }).unwrap(); - assert_eq!(wtr_as_string(wtr), "9223372036854775808,42.5,true\n"); + #[test] + fn serialize_no_headers_128() { + #[derive(Serialize)] + struct Row { + foo: i128, + bar: f64, + baz: bool, } + + let mut wtr = + WriterBuilder::new().has_headers(false).from_writer(vec![]); + wtr.serialize(Row { + foo: 9_223_372_036_854_775_808, + bar: 42.5, + baz: true, + }) + .unwrap(); + assert_eq!(wtr_as_string(wtr), "9223372036854775808,42.5,true\n"); } #[test]