diff --git a/README.md b/README.md index 2f8750a..3fb3e7e 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # Pbjson -Pbjson is a set of crates to automatically generate [serde](https://serde.rs/) [Serialize](https://docs.rs/serde/1.0.130/serde/trait.Serialize.html) and [Deserialize](https://docs.rs/serde/1.0.130/serde/trait.Deserialize.html) implementations for auto-generated prost types. +Pbjson is a set of crates to automatically generate [serde](https://serde.rs/) [Serialize](https://docs.rs/serde_core/1.0.228/serde_core/trait.Serialize.html) and [Deserialize](https://docs.rs/serde_core/1.0.228/serde_core/trait.Deserialize.html) implementations for auto-generated prost types. See [pbjson-build](https://docs.rs/pbjson-build) for usage instructions diff --git a/pbjson-build/src/generator.rs b/pbjson-build/src/generator.rs index 1f450c2..98d1a15 100644 --- a/pbjson-build/src/generator.rs +++ b/pbjson-build/src/generator.rs @@ -37,11 +37,11 @@ fn write_fields_array<'a, W: Write, I: Iterator>( fn write_serialize_start(indent: usize, rust_type: &str, writer: &mut W) -> Result<()> { writeln!( writer, - r#"{indent}impl serde::Serialize for {rust_type} {{ + r#"{indent}impl serde_core::Serialize for {rust_type} {{ {indent} #[allow(deprecated)] {indent} fn serialize(&self, serializer: S) -> std::result::Result {indent} where -{indent} S: serde::Serializer, +{indent} S: serde_core::Serializer, {indent} {{"#, indent = Indent(indent), rust_type = rust_type @@ -60,11 +60,11 @@ fn write_serialize_end(indent: usize, writer: &mut W) -> Result<()> { fn write_deserialize_start(indent: usize, rust_type: &str, writer: &mut W) -> Result<()> { writeln!( writer, - r#"{indent}impl<'de> serde::Deserialize<'de> for {rust_type} {{ + r#"{indent}impl<'de> serde_core::Deserialize<'de> for {rust_type} {{ {indent} #[allow(deprecated)] {indent} fn deserialize(deserializer: D) -> std::result::Result {indent} where -{indent} D: serde::Deserializer<'de>, +{indent} D: serde_core::Deserializer<'de>, {indent} {{"#, indent = Indent(indent), rust_type = rust_type diff --git a/pbjson-build/src/generator/enumeration.rs b/pbjson-build/src/generator/enumeration.rs index c833484..6c3a78e 100644 --- a/pbjson-build/src/generator/enumeration.rs +++ b/pbjson-build/src/generator/enumeration.rs @@ -98,7 +98,7 @@ fn write_visitor( writer, r#"{indent}struct GeneratedVisitor; -{indent}impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {{ +{indent}impl<'de> serde_core::de::Visitor<'de> for GeneratedVisitor {{ {indent} type Value = {rust_type}; {indent} fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {{ @@ -107,31 +107,31 @@ fn write_visitor( {indent} fn visit_i64(self, v: i64) -> std::result::Result {indent} where -{indent} E: serde::de::Error, +{indent} E: serde_core::de::Error, {indent} {{ {indent} i32::try_from(v) {indent} .ok() {indent} .and_then(|x| x.try_into().ok()) {indent} .ok_or_else(|| {{ -{indent} serde::de::Error::invalid_value(serde::de::Unexpected::Signed(v), &self) +{indent} serde_core::de::Error::invalid_value(serde_core::de::Unexpected::Signed(v), &self) {indent} }}) {indent} }} {indent} fn visit_u64(self, v: u64) -> std::result::Result {indent} where -{indent} E: serde::de::Error, +{indent} E: serde_core::de::Error, {indent} {{ {indent} i32::try_from(v) {indent} .ok() {indent} .and_then(|x| x.try_into().ok()) {indent} .ok_or_else(|| {{ -{indent} serde::de::Error::invalid_value(serde::de::Unexpected::Unsigned(v), &self) +{indent} serde_core::de::Error::invalid_value(serde_core::de::Unexpected::Unsigned(v), &self) {indent} }}) {indent} }} {indent} fn visit_str(self, value: &str) -> std::result::Result {indent} where -{indent} E: serde::de::Error, +{indent} E: serde_core::de::Error, {indent} {{"#, indent = Indent(indent), rust_type = rust_type, @@ -151,7 +151,7 @@ fn write_visitor( writeln!( writer, - "{indent}_ => Err(serde::de::Error::unknown_variant(value, FIELDS)),", + "{indent}_ => Err(serde_core::de::Error::unknown_variant(value, FIELDS)),", indent = Indent(indent + 3) )?; writeln!(writer, "{}}}", Indent(indent + 2))?; diff --git a/pbjson-build/src/generator/message.rs b/pbjson-build/src/generator/message.rs index 2822f56..582fa05 100644 --- a/pbjson-build/src/generator/message.rs +++ b/pbjson-build/src/generator/message.rs @@ -143,7 +143,11 @@ fn write_struct_serialize_start( writer: &mut W, emit_fields: bool, ) -> Result<()> { - writeln!(writer, "{}use serde::ser::SerializeStruct;", Indent(indent))?; + writeln!( + writer, + "{}use serde_core::ser::SerializeStruct;", + Indent(indent) + )?; let required_len = message .fields @@ -211,7 +215,7 @@ fn write_decode_variant( writeln!(writer, "{}::try_from({})", resolver.rust_type(path), value)?; write!( writer, - "{}.map_err(|_| serde::ser::Error::custom(format!(\"Invalid variant {{}}\", {})))", + "{}.map_err(|_| serde_core::ser::Error::custom(format!(\"Invalid variant {{}}\", {})))", Indent(indent), value ) @@ -521,7 +525,7 @@ fn write_deserialize_message( writeln!( writer, - r#"{indent}impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {{ + r#"{indent}impl<'de> serde_core::de::Visitor<'de> for GeneratedVisitor {{ {indent} type Value = {rust_type}; {indent} fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {{ @@ -530,7 +534,7 @@ fn write_deserialize_message( {indent} fn visit_map(self, mut map_: V) -> std::result::Result<{rust_type}, V::Error> {indent} where -{indent} V: serde::de::MapAccess<'de>, +{indent} V: serde_core::de::MapAccess<'de>, {indent} {{"#, indent = Indent(indent), name = message.path, @@ -593,7 +597,7 @@ fn write_deserialize_message( )?; writeln!( writer, - "{}let _ = map_.next_value::()?;", + "{}let _ = map_.next_value::()?;", Indent(indent + 5), )?; writeln!(writer, "{}}}", Indent(indent + 4))?; @@ -609,7 +613,7 @@ fn write_deserialize_message( )?; writeln!( writer, - "{}let _ = map_.next_value::()?;", + "{}let _ = map_.next_value::()?;", Indent(indent + 3) )?; writeln!(writer, "{}}}", Indent(indent + 2))?; @@ -621,7 +625,7 @@ fn write_deserialize_message( FieldModifier::Required => { writeln!( writer, - "{indent}{field}: {field}__.ok_or_else(|| serde::de::Error::missing_field(\"{json_name}\"))?,", + "{indent}{field}: {field}__.ok_or_else(|| serde_core::de::Error::missing_field(\"{json_name}\"))?,", indent = Indent(indent + 3), field = field.rust_field_name(), json_name = field.json_name() @@ -699,14 +703,14 @@ fn write_deserialize_field_name( writeln!( writer, - r#"{indent}impl<'de> serde::Deserialize<'de> for GeneratedField {{ + r#"{indent}impl<'de> serde_core::Deserialize<'de> for GeneratedField {{ {indent} fn deserialize(deserializer: D) -> std::result::Result {indent} where -{indent} D: serde::Deserializer<'de>, +{indent} D: serde_core::Deserializer<'de>, {indent} {{ {indent} struct GeneratedVisitor; -{indent} impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {{ +{indent} impl<'de> serde_core::de::Visitor<'de> for GeneratedVisitor {{ {indent} type Value = GeneratedField; {indent} fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {{ @@ -716,7 +720,7 @@ fn write_deserialize_field_name( {indent} #[allow(unused_variables)] {indent} fn visit_str(self, value: &str) -> std::result::Result {indent} where -{indent} E: serde::de::Error, +{indent} E: serde_core::de::Error, {indent} {{"#, indent = Indent(indent) )?; @@ -752,7 +756,7 @@ fn write_deserialize_field_name( } else { writeln!( writer, - "{}_ => Err(serde::de::Error::unknown_field(value, FIELDS)),", + "{}_ => Err(serde_core::de::Error::unknown_field(value, FIELDS)),", Indent(indent + 5) )?; } @@ -766,7 +770,7 @@ fn write_deserialize_field_name( } else { writeln!( writer, - "{}Err(serde::de::Error::unknown_field(value, FIELDS))", + "{}Err(serde_core::de::Error::unknown_field(value, FIELDS))", Indent(indent + 5) )?; } @@ -840,7 +844,7 @@ fn write_deserialize_field( // Note: this will report duplicate field if multiple value are specified for a one of writeln!( writer, - "{}return Err(serde::de::Error::duplicate_field(\"{}\"));", + "{}return Err(serde_core::de::Error::duplicate_field(\"{}\"));", Indent(indent + 2), json_name )?; diff --git a/pbjson-build/src/lib.rs b/pbjson-build/src/lib.rs index 912bbee..56ba503 100644 --- a/pbjson-build/src/lib.rs +++ b/pbjson-build/src/lib.rs @@ -1,5 +1,5 @@ //! `pbjson-build` consumes the descriptor output of [`prost-build`][1] and generates -//! [`serde::Serialize`][2] and [`serde::Deserialize`][3] implementations +//! [`serde_core::Serialize`][2] and [`serde_core::Deserialize`][3] implementations //! that are compliant with the [protobuf JSON mapping][4] //! //! # Usage @@ -63,11 +63,11 @@ //! ``` //! //! The module will now contain the generated prost structs for your protobuf definition -//! along with compliant implementations of [serde::Serialize][2] and [serde::Deserialize][3] +//! along with compliant implementations of [serde_core::Serialize][2] and [serde_core::Deserialize][3] //! //! [1]: https://docs.rs/prost-build -//! [2]: https://docs.rs/serde/1.0.130/serde/trait.Serialize.html -//! [3]: https://docs.rs/serde/1.0.130/serde/trait.Deserialize.html +//! [2]: https://docs.rs/serde_core/1.0.228/serde_core/trait.Serialize.html +//! [3]: https://docs.rs/serde_core/1.0.228/serde_core/trait.Deserialize.html //! [4]: https://developers.google.com/protocol-buffers/docs/proto3#json #![deny(rustdoc::broken_intra_doc_links, rustdoc::bare_urls, rust_2018_idioms)] diff --git a/pbjson-test/Cargo.toml b/pbjson-test/Cargo.toml index a806e8d..1d970da 100644 --- a/pbjson-test/Cargo.toml +++ b/pbjson-test/Cargo.toml @@ -11,6 +11,7 @@ prost = "0.14" pbjson = { path = "../pbjson" } pbjson-types = { path = "../pbjson-types" } serde = { version = "1.0", features = ["derive"] } +serde_core = { version = "1.0.200" } [features] ignore-unknown-fields = [] diff --git a/pbjson-types/Cargo.toml b/pbjson-types/Cargo.toml index 8499095..e4210fa 100644 --- a/pbjson-types/Cargo.toml +++ b/pbjson-types/Cargo.toml @@ -15,7 +15,7 @@ bytes = "1.0" chrono = { version = "0.4", default-features = false, features = ["alloc"] } pbjson = { path = "../pbjson", version = "0.8" } prost = "0.14" -serde = { version = "1.0", features = ["derive"] } +serde_core = { version = "1.0.200" } [dev-dependencies] serde_json = "1.0" diff --git a/pbjson-types/descriptors.bin b/pbjson-types/descriptors.bin index c3b3ed2..ad65b4f 100644 Binary files a/pbjson-types/descriptors.bin and b/pbjson-types/descriptors.bin differ diff --git a/pbjson-types/src/duration.rs b/pbjson-types/src/duration.rs index d776ca2..53171c3 100644 --- a/pbjson-types/src/duration.rs +++ b/pbjson-types/src/duration.rs @@ -1,6 +1,6 @@ use crate::Duration; -use serde::de::Visitor; -use serde::Serialize; +use serde_core::de::Visitor; +use serde_core::Serialize; impl TryFrom for std::time::Duration { type Error = std::num::TryFromIntError; @@ -25,10 +25,12 @@ impl From for Duration { impl Serialize for Duration { fn serialize(&self, serializer: S) -> Result where - S: serde::Serializer, + S: serde_core::Serializer, { if self.seconds != 0 && self.nanos != 0 && (self.nanos < 0) != (self.seconds < 0) { - return Err(serde::ser::Error::custom("Duration has inconsistent signs")); + return Err(serde_core::ser::Error::custom( + "Duration has inconsistent signs", + )); } let mut s = if self.seconds == 0 { @@ -67,11 +69,11 @@ impl<'de> Visitor<'de> for DurationVisitor { fn visit_str(self, s: &str) -> Result where - E: serde::de::Error, + E: serde_core::de::Error, { let s = s .strip_suffix('s') - .ok_or_else(|| serde::de::Error::custom("missing 's' suffix"))?; + .ok_or_else(|| serde_core::de::Error::custom("missing 's' suffix"))?; let (negative, s) = match s.strip_prefix('-') { Some(s) => (true, s), @@ -82,11 +84,11 @@ impl<'de> Visitor<'de> for DurationVisitor { Some((seconds_str, decimal_str)) => { let exp = 9_u32 .checked_sub(decimal_str.len() as u32) - .ok_or_else(|| serde::de::Error::custom("too many decimal places"))?; + .ok_or_else(|| serde_core::de::Error::custom("too many decimal places"))?; let pow = 10_u32.pow(exp); - let seconds = seconds_str.parse().map_err(serde::de::Error::custom)?; - let decimal: u32 = decimal_str.parse().map_err(serde::de::Error::custom)?; + let seconds = seconds_str.parse().map_err(serde_core::de::Error::custom)?; + let decimal: u32 = decimal_str.parse().map_err(serde_core::de::Error::custom)?; Duration { seconds, @@ -94,7 +96,7 @@ impl<'de> Visitor<'de> for DurationVisitor { } } None => Duration { - seconds: s.parse().map_err(serde::de::Error::custom)?, + seconds: s.parse().map_err(serde_core::de::Error::custom)?, nanos: 0, }, }; @@ -109,10 +111,10 @@ impl<'de> Visitor<'de> for DurationVisitor { } } -impl<'de> serde::Deserialize<'de> for Duration { +impl<'de> serde_core::Deserialize<'de> for Duration { fn deserialize(deserializer: D) -> Result where - D: serde::Deserializer<'de>, + D: serde_core::Deserializer<'de>, { deserializer.deserialize_str(DurationVisitor) } diff --git a/pbjson-types/src/lib.rs b/pbjson-types/src/lib.rs index caf506a..c372ae7 100644 --- a/pbjson-types/src/lib.rs +++ b/pbjson-types/src/lib.rs @@ -1,12 +1,12 @@ //! `pbjson-types` provides the `google.protobuf` types, commonly known as well-known-types, -//! with [`serde::Serialize`][1] and [`serde::Deserialize`][2] implementations +//! with [`serde_core::Serialize`][1] and [`serde_core::Deserialize`][2] implementations //! that are compliant with the [protobuf JSON mapping][3] //! //! __Note: Coverage of all types is currently incomplete, //! some may have non-compliant implementations__ //! -//! [1]: https://docs.rs/serde/1.0.130/serde/trait.Serialize.html -//! [2]: https://docs.rs/serde/1.0.130/serde/trait.Deserialize.html +//! [1]: https://docs.rs/serde_core/1.0.228/serde_core/trait.Serialize.html +//! [2]: https://docs.rs/serde_core/1.0.228/serde_core/trait.Deserialize.html //! [3]: https://developers.google.com/protocol-buffers/docs/proto3#json #![deny(rustdoc::broken_intra_doc_links, rustdoc::bare_urls, rust_2018_idioms)] diff --git a/pbjson-types/src/list_value.rs b/pbjson-types/src/list_value.rs index 35062f8..077b28e 100644 --- a/pbjson-types/src/list_value.rs +++ b/pbjson-types/src/list_value.rs @@ -36,19 +36,19 @@ impl FromIterator for ListValue { } } -impl serde::Serialize for ListValue { +impl serde_core::Serialize for ListValue { fn serialize(&self, ser: S) -> Result where - S: serde::Serializer, + S: serde_core::Serializer, { self.values.serialize(ser) } } -impl<'de> serde::Deserialize<'de> for ListValue { +impl<'de> serde_core::Deserialize<'de> for ListValue { fn deserialize(deserializer: D) -> Result where - D: serde::Deserializer<'de>, + D: serde_core::Deserializer<'de>, { deserializer.deserialize_seq(ListValueVisitor) } @@ -56,7 +56,7 @@ impl<'de> serde::Deserialize<'de> for ListValue { struct ListValueVisitor; -impl<'de> serde::de::Visitor<'de> for ListValueVisitor { +impl<'de> serde_core::de::Visitor<'de> for ListValueVisitor { type Value = ListValue; fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { @@ -65,7 +65,7 @@ impl<'de> serde::de::Visitor<'de> for ListValueVisitor { fn visit_seq(self, mut seq: A) -> Result where - A: serde::de::SeqAccess<'de>, + A: serde_core::de::SeqAccess<'de>, { let mut list = Vec::new(); diff --git a/pbjson-types/src/null_value.rs b/pbjson-types/src/null_value.rs index bd0f9af..dab7ec6 100644 --- a/pbjson-types/src/null_value.rs +++ b/pbjson-types/src/null_value.rs @@ -6,19 +6,19 @@ impl From<()> for NullValue { } } -impl serde::Serialize for NullValue { +impl serde_core::Serialize for NullValue { fn serialize(&self, ser: S) -> Result where - S: serde::Serializer, + S: serde_core::Serializer, { ().serialize(ser) } } -impl<'de> serde::Deserialize<'de> for NullValue { +impl<'de> serde_core::Deserialize<'de> for NullValue { fn deserialize(deserializer: D) -> Result where - D: serde::Deserializer<'de>, + D: serde_core::Deserializer<'de>, { deserializer.deserialize_unit(NullValueVisitor) } @@ -26,7 +26,7 @@ impl<'de> serde::Deserialize<'de> for NullValue { struct NullValueVisitor; -impl<'de> serde::de::Visitor<'de> for NullValueVisitor { +impl<'de> serde_core::de::Visitor<'de> for NullValueVisitor { type Value = NullValue; fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { @@ -35,7 +35,7 @@ impl<'de> serde::de::Visitor<'de> for NullValueVisitor { fn visit_unit(self) -> Result where - E: serde::de::Error, + E: serde_core::de::Error, { Ok(NullValue::NullValue) } diff --git a/pbjson-types/src/struct.rs b/pbjson-types/src/struct.rs index 428dcaa..0bb939d 100644 --- a/pbjson-types/src/struct.rs +++ b/pbjson-types/src/struct.rs @@ -17,19 +17,19 @@ impl FromIterator<(String, crate::Value)> for Struct { } } -impl serde::Serialize for Struct { +impl serde_core::Serialize for Struct { fn serialize(&self, ser: S) -> Result where - S: serde::Serializer, + S: serde_core::Serializer, { self.fields.serialize(ser) } } -impl<'de> serde::Deserialize<'de> for Struct { +impl<'de> serde_core::Deserialize<'de> for Struct { fn deserialize(deserializer: D) -> Result where - D: serde::Deserializer<'de>, + D: serde_core::Deserializer<'de>, { deserializer.deserialize_map(StructVisitor) } @@ -37,7 +37,7 @@ impl<'de> serde::Deserialize<'de> for Struct { struct StructVisitor; -impl<'de> serde::de::Visitor<'de> for StructVisitor { +impl<'de> serde_core::de::Visitor<'de> for StructVisitor { type Value = Struct; fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { @@ -46,7 +46,7 @@ impl<'de> serde::de::Visitor<'de> for StructVisitor { fn visit_map(self, mut map_access: A) -> Result where - A: serde::de::MapAccess<'de>, + A: serde_core::de::MapAccess<'de>, { let mut map = std::collections::HashMap::new(); diff --git a/pbjson-types/src/timestamp.rs b/pbjson-types/src/timestamp.rs index a842e13..80e33ad 100644 --- a/pbjson-types/src/timestamp.rs +++ b/pbjson-types/src/timestamp.rs @@ -1,7 +1,7 @@ use crate::Timestamp; use chrono::{DateTime, Utc}; -use serde::de::Visitor; -use serde::Serialize; +use serde_core::de::Visitor; +use serde_core::Serialize; impl TryFrom for DateTime { type Error = &'static str; @@ -30,9 +30,9 @@ impl From> for Timestamp { impl Serialize for Timestamp { fn serialize(&self, serializer: S) -> Result where - S: serde::Serializer, + S: serde_core::Serializer, { - let t: DateTime = (*self).try_into().map_err(serde::ser::Error::custom)?; + let t: DateTime = (*self).try_into().map_err(serde_core::ser::Error::custom)?; serializer.serialize_str(t.to_rfc3339().as_str()) } } @@ -48,18 +48,18 @@ impl<'de> Visitor<'de> for TimestampVisitor { fn visit_str(self, s: &str) -> Result where - E: serde::de::Error, + E: serde_core::de::Error, { - let d = DateTime::parse_from_rfc3339(s).map_err(serde::de::Error::custom)?; + let d = DateTime::parse_from_rfc3339(s).map_err(serde_core::de::Error::custom)?; let d: DateTime = d.into(); Ok(d.into()) } } -impl<'de> serde::Deserialize<'de> for Timestamp { +impl<'de> serde_core::Deserialize<'de> for Timestamp { fn deserialize(deserializer: D) -> Result where - D: serde::Deserializer<'de>, + D: serde_core::Deserializer<'de>, { deserializer.deserialize_str(TimestampVisitor) } @@ -69,8 +69,8 @@ impl<'de> serde::Deserialize<'de> for Timestamp { mod tests { use super::*; use chrono::{FixedOffset, TimeZone}; - use serde::de::value::{BorrowedStrDeserializer, Error}; - use serde::Deserialize; + use serde_core::de::value::{BorrowedStrDeserializer, Error}; + use serde_core::Deserialize; #[test] fn test_date() { diff --git a/pbjson-types/src/value.rs b/pbjson-types/src/value.rs index c3fc87b..6044242 100644 --- a/pbjson-types/src/value.rs +++ b/pbjson-types/src/value.rs @@ -1,6 +1,6 @@ pub use crate::pb::google::protobuf::value::Kind; -use serde::{ +use serde_core::{ de::{self, MapAccess, SeqAccess}, ser, Deserialize, Deserializer, Serialize, Serializer, }; @@ -113,7 +113,7 @@ impl<'de> Deserialize<'de> for Kind { struct KindVisitor; -impl<'de> serde::de::Visitor<'de> for KindVisitor { +impl<'de> serde_core::de::Visitor<'de> for KindVisitor { type Value = Kind; fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { diff --git a/pbjson-types/src/wrappers.rs b/pbjson-types/src/wrappers.rs index 0c5fae0..63d9518 100644 --- a/pbjson-types/src/wrappers.rs +++ b/pbjson-types/src/wrappers.rs @@ -2,10 +2,10 @@ use prost::bytes::Bytes; macro_rules! ser_scalar_value { ($typ: ty) => { - impl serde::Serialize for $typ { + impl serde_core::Serialize for $typ { fn serialize(&self, ser: S) -> Result where - S: serde::Serializer, + S: serde_core::Serializer, { self.value.serialize(ser) } @@ -14,12 +14,12 @@ macro_rules! ser_scalar_value { } macro_rules! deser_scalar_value { ($typ: ty) => { - impl<'de> serde::Deserialize<'de> for $typ { + impl<'de> serde_core::Deserialize<'de> for $typ { fn deserialize(deserializer: D) -> Result where - D: serde::Deserializer<'de>, + D: serde_core::Deserializer<'de>, { - let value = serde::Deserialize::deserialize(deserializer)?; + let value = serde_core::Deserialize::deserialize(deserializer)?; Ok(Self { value }) } } @@ -27,10 +27,10 @@ macro_rules! deser_scalar_value { } macro_rules! ser_bytes_value { ($typ: ty) => { - impl serde::Serialize for $typ { + impl serde_core::Serialize for $typ { fn serialize(&self, ser: S) -> Result where - S: serde::Serializer, + S: serde_core::Serializer, { use pbjson::private::base64::engine::Engine; let value = @@ -42,10 +42,10 @@ macro_rules! ser_bytes_value { } macro_rules! deser_bytes_value { ($typ: ty) => { - impl<'de> serde::Deserialize<'de> for $typ { + impl<'de> serde_core::Deserialize<'de> for $typ { fn deserialize(deserializer: D) -> Result where - D: serde::Deserializer<'de>, + D: serde_core::Deserializer<'de>, { let value = pbjson::private::BytesDeserialize::deserialize(deserializer)?.0; Ok(Self { value }) @@ -55,10 +55,10 @@ macro_rules! deser_bytes_value { } macro_rules! ser_long_value { ($typ: ty) => { - impl serde::Serialize for $typ { + impl serde_core::Serialize for $typ { fn serialize(&self, ser: S) -> Result where - S: serde::Serializer, + S: serde_core::Serializer, { let value = self.value.to_string(); value.serialize(ser) @@ -68,10 +68,10 @@ macro_rules! ser_long_value { } macro_rules! deser_number_value { ($typ: ty) => { - impl<'de> serde::Deserialize<'de> for $typ { + impl<'de> serde_core::Deserialize<'de> for $typ { fn deserialize(deserializer: D) -> Result where - D: serde::Deserializer<'de>, + D: serde_core::Deserializer<'de>, { let value = pbjson::private::NumberDeserialize::deserialize(deserializer)?.0; Ok(Self { value }) diff --git a/pbjson/Cargo.toml b/pbjson/Cargo.toml index def9cef..f1082ba 100644 --- a/pbjson/Cargo.toml +++ b/pbjson/Cargo.toml @@ -12,6 +12,7 @@ repository = "https://github.com/influxdata/pbjson" [dependencies] serde = { version = "1.0", features = ["derive"] } +serde_core = { version = "1.0.200" } base64 = "0.22" [dev-dependencies] diff --git a/pbjson/src/lib.rs b/pbjson/src/lib.rs index ea7828b..ddce160 100644 --- a/pbjson/src/lib.rs +++ b/pbjson/src/lib.rs @@ -1,5 +1,5 @@ -//! `pbjson` is a set of crates to automatically generate [`serde::Serialize`] and -//! [`serde::Deserialize`] implementations for [prost][1] generated structs that +//! `pbjson` is a set of crates to automatically generate [`serde_core::Serialize`] and +//! [`serde_core::Deserialize`] implementations for [prost][1] generated structs that //! are compliant with the [protobuf JSON mapping][2] //! //! See [pbjson-build][3] for usage instructions @@ -25,8 +25,8 @@ pub mod private { use base64::engine::DecodePaddingMode; use base64::engine::{GeneralPurpose, GeneralPurposeConfig}; use base64::Engine; - use serde::de::Visitor; - use serde::Deserialize; + use serde_core::de::Visitor; + use serde_core::Deserialize; use std::borrow::Cow; use std::str::FromStr; @@ -34,7 +34,7 @@ pub mod private { #[derive(Debug, Copy, Clone, PartialOrd, PartialEq, Hash, Ord, Eq)] pub struct NumberDeserialize(pub T); - #[derive(Deserialize)] + #[derive(serde::Deserialize)] #[serde(untagged)] enum Content<'a, T> { #[serde(borrow)] @@ -42,18 +42,18 @@ pub mod private { Number(T), } - impl<'de, T> serde::Deserialize<'de> for NumberDeserialize + impl<'de, T> Deserialize<'de> for NumberDeserialize where - T: FromStr + serde::Deserialize<'de>, + T: FromStr + Deserialize<'de>, ::Err: std::error::Error, { fn deserialize(deserializer: D) -> Result where - D: serde::Deserializer<'de>, + D: serde_core::Deserializer<'de>, { let content = Content::deserialize(deserializer)?; Ok(Self(match content { - Content::Str(v) => v.parse().map_err(serde::de::Error::custom)?, + Content::Str(v) => v.parse().map_err(serde_core::de::Error::custom)?, Content::Number(v) => v, })) } @@ -70,7 +70,7 @@ pub mod private { fn visit_str(self, s: &str) -> Result where - E: serde::de::Error, + E: serde_core::de::Error, { const INDIFFERENT_PAD: GeneralPurposeConfig = GeneralPurposeConfig::new() .with_decode_padding_mode(DecodePaddingMode::Indifferent); @@ -93,7 +93,7 @@ pub mod private { } _ => Err(e), }) - .map_err(serde::de::Error::custom)?; + .map_err(serde_core::de::Error::custom)?; Ok(decoded) } } @@ -107,7 +107,7 @@ pub mod private { { fn deserialize(deserializer: D) -> Result where - D: serde::Deserializer<'de>, + D: serde_core::Deserializer<'de>, { Ok(Self(deserializer.deserialize_str(Base64Visitor)?.into())) } @@ -119,7 +119,7 @@ pub mod private { use base64::Engine; use bytes::Bytes; use rand::prelude::*; - use serde::de::value::{BorrowedStrDeserializer, Error}; + use serde_core::de::value::{BorrowedStrDeserializer, Error}; #[test] fn test_bytes() {