From c644e6fb8256d369b882719380ac3773d0f4f6a6 Mon Sep 17 00:00:00 2001 From: KodrAus Date: Sun, 9 Apr 2023 16:53:19 +1000 Subject: [PATCH 1/6] port to stable versions of value-bag and sval --- Cargo.toml | 9 +++---- src/kv/key.rs | 10 ++++++-- src/kv/source.rs | 61 +++++++++++++++++++++++++++--------------------- src/kv/value.rs | 53 +++++++++++++++++------------------------ 4 files changed, 70 insertions(+), 63 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 909b29c0c..31164d5e3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -54,12 +54,13 @@ kv_unstable_serde = ["kv_unstable_std", "value-bag/serde", "serde"] [dependencies] serde = { version = "1.0", optional = true, default-features = false } -sval = { version = "=1.0.0-alpha.5", optional = true, default-features = false } -value-bag = { version = "=1.0.0-alpha.9", optional = true, default-features = false } +sval = { version = "2.0", optional = true, default-features = false } +value-bag = { version = "1.0", optional = true, default-features = false } [dev-dependencies] rustversion = "1.0" serde = { version = "1.0", features = ["derive"] } serde_test = "1.0" -sval = { version = "=1.0.0-alpha.5", features = ["derive"] } -value-bag = { version = "=1.0.0-alpha.9", features = ["test"] } +sval = { version = "2.0" } +sval_derive = { version = "2.0" } +value-bag = { version = "1.0", features = ["test"] } diff --git a/src/kv/key.rs b/src/kv/key.rs index a35338dcc..d5258383c 100644 --- a/src/kv/key.rs +++ b/src/kv/key.rs @@ -48,6 +48,12 @@ impl<'k> Key<'k> { pub fn as_str(&self) -> &str { self.key } + + /// Try get a string borrowed for the `'k` lifetime from this key. + pub fn to_borrowed_str(&self) -> Option<&'k str> { + // NOTE: This API leaves room for keys to be owned + Some(self.key) + } } impl<'k> fmt::Display for Key<'k> { @@ -99,10 +105,10 @@ mod sval_support { extern crate sval; - use self::sval::value::{self, Value}; + use self::sval::Value; impl<'a> Value for Key<'a> { - fn stream(&self, stream: &mut value::Stream) -> value::Result { + fn stream<'sval, S: sval::Stream<'sval> + ?Sized>(&'sval self, stream: &mut S) -> sval::Result { self.key.stream(stream) } } diff --git a/src/kv/source.rs b/src/kv/source.rs index 8762c621e..5ea41c159 100644 --- a/src/kv/source.rs +++ b/src/kv/source.rs @@ -460,74 +460,83 @@ where mod sval_support { use super::*; - use self::sval::value; - - impl value::Value for AsMap + impl self::sval::Value for AsMap where S: Source, { - fn stream(&self, stream: &mut value::Stream) -> value::Result { - struct StreamVisitor<'a, 'b>(&'a mut value::Stream<'b>); + fn stream<'sval, SV: self::sval::Stream<'sval> + ?Sized>(&'sval self, stream: &mut SV) -> self::sval::Result { + struct StreamVisitor<'a, V: ?Sized>(&'a mut V); - impl<'a, 'b, 'kvs> Visitor<'kvs> for StreamVisitor<'a, 'b> { + impl<'a, 'kvs, V: self::sval::Stream<'kvs> + ?Sized> Visitor<'kvs> for StreamVisitor<'a, V> { fn visit_pair(&mut self, key: Key<'kvs>, value: Value<'kvs>) -> Result<(), Error> { - self.0 - .map_key(key) - .map_err(|_| Error::msg("failed to stream map key"))?; - self.0 - .map_value(value) - .map_err(|_| Error::msg("failed to stream map value"))?; + self.0.map_key_begin().map_err(|_| Error::msg("failed to stream map key"))?; + if let Some(key) = key.to_borrowed_str() { + self.0.value(key).map_err(|_| Error::msg("failed to stream map key"))?; + } else { + self.0.value_computed(key.as_str()).map_err(|_| Error::msg("failed to stream map key"))?; + } + self.0.map_key_end().map_err(|_| Error::msg("failed to stream map key"))?; + + // TODO: Need to borrow this here + self.0.map_value_begin().map_err(|_| Error::msg("failed to stream map value"))?; + self.0.value_computed(&value).map_err(|_| Error::msg("failed to stream map value"))?; + self.0.map_value_end().map_err(|_| Error::msg("failed to stream map value"))?; + Ok(()) } } stream .map_begin(Some(self.count())) - .map_err(|_| self::sval::Error::msg("failed to begin map"))?; + .map_err(|_| self::sval::Error::new())?; self.visit(&mut StreamVisitor(stream)) - .map_err(|_| self::sval::Error::msg("failed to visit key-values"))?; + .map_err(|_| self::sval::Error::new())?; stream .map_end() - .map_err(|_| self::sval::Error::msg("failed to end map")) + .map_err(|_| self::sval::Error::new()) } } - impl value::Value for AsList + impl self::sval::Value for AsList where S: Source, { - fn stream(&self, stream: &mut value::Stream) -> value::Result { - struct StreamVisitor<'a, 'b>(&'a mut value::Stream<'b>); + fn stream<'sval, SV: self::sval::Stream<'sval> + ?Sized>(&'sval self, stream: &mut SV) -> self::sval::Result { + struct StreamVisitor<'a, V: ?Sized>(&'a mut V); - impl<'a, 'b, 'kvs> Visitor<'kvs> for StreamVisitor<'a, 'b> { + impl<'a, 'kvs, V: self::sval::Stream<'kvs> + ?Sized> Visitor<'kvs> for StreamVisitor<'a, V> { fn visit_pair(&mut self, key: Key<'kvs>, value: Value<'kvs>) -> Result<(), Error> { - self.0 - .seq_elem((key, value)) - .map_err(|_| Error::msg("failed to stream seq entry"))?; + // TODO: Need to borrow this here + self.0.seq_value_begin().map_err(|_| Error::msg("failed to stream seq value"))?; + self.0.value_computed(&(key, value)).map_err(|_| Error::msg("failed to stream seq value"))?; + self.0.seq_value_end().map_err(|_| Error::msg("failed to stream seq value"))?; + Ok(()) } } stream .seq_begin(Some(self.count())) - .map_err(|_| self::sval::Error::msg("failed to begin seq"))?; + .map_err(|_| self::sval::Error::new())?; self.visit(&mut StreamVisitor(stream)) - .map_err(|_| self::sval::Error::msg("failed to visit key-values"))?; + .map_err(|_| self::sval::Error::new())?; stream .seq_end() - .map_err(|_| self::sval::Error::msg("failed to end seq")) + .map_err(|_| self::sval::Error::new()) } } #[cfg(test)] mod tests { + extern crate sval_derive; + use super::*; - use self::sval::Value; + use self::sval_derive::Value; use crate::kv::source; diff --git a/src/kv/value.rs b/src/kv/value.rs index 607bc09a5..e0dcb9da2 100644 --- a/src/kv/value.rs +++ b/src/kv/value.rs @@ -71,7 +71,7 @@ macro_rules! as_serde { }; } -/// Get a value from a type implementing `sval::value::Value`. +/// Get a value from a type implementing `self::sval::value::Value`. #[cfg(feature = "kv_unstable_sval")] #[macro_export] macro_rules! as_sval { @@ -197,21 +197,21 @@ impl<'v> Value<'v> { /// Get a value from a type implementing `serde::Serialize`. pub fn capture_serde(value: &'v T) -> Self where - T: self::serde::Serialize + 'static, + T: serde::Serialize + 'static, { Value { inner: ValueBag::capture_serde1(value), } } - /// Get a value from a type implementing `sval::value::Value`. + /// Get a value from a type implementing `self::sval::value::Value`. #[cfg(feature = "kv_unstable_sval")] pub fn capture_sval(value: &'v T) -> Self where - T: self::sval::value::Value + 'static, + T: self::sval::Value + 'static, { Value { - inner: ValueBag::capture_sval1(value), + inner: ValueBag::capture_sval2(value), } } @@ -239,7 +239,7 @@ impl<'v> Value<'v> { #[cfg(feature = "kv_unstable_serde")] pub fn from_serde(value: &'v T) -> Self where - T: self::serde::Serialize, + T: serde::Serialize, { Value { inner: ValueBag::from_serde1(value), @@ -250,10 +250,10 @@ impl<'v> Value<'v> { #[cfg(feature = "kv_unstable_sval")] pub fn from_sval(value: &'v T) -> Self where - T: self::sval::value::Value, + T: self::sval::Value, { Value { - inner: ValueBag::from_sval1(value), + inner: ValueBag::from_sval2(value), } } @@ -279,14 +279,6 @@ impl<'v> Value<'v> { } } - /// Get a value from a type implementing `sval::value::Value`. - #[cfg(feature = "kv_unstable_sval")] - pub fn from_dyn_sval(value: &'v dyn self::sval::value::Value) -> Self { - Value { - inner: ValueBag::from_dyn_sval1(value), - } - } - /// Get a value from an internal primitive. fn from_value_bag(value: T) -> Self where @@ -412,26 +404,19 @@ impl ToValue for dyn std::error::Error + 'static { } #[cfg(feature = "kv_unstable_serde")] -impl<'v> self::serde::Serialize for Value<'v> { +impl<'v> serde::Serialize for Value<'v> { fn serialize(&self, s: S) -> Result where - S: self::serde::Serializer, + S: serde::Serializer, { self.inner.serialize(s) } } #[cfg(feature = "kv_unstable_sval")] -impl<'v> self::sval::value::Value for Value<'v> { - fn stream(&self, stream: &mut self::sval::value::Stream) -> self::sval::value::Result { - self::sval::value::Value::stream(&self.inner, stream) - } -} - -#[cfg(feature = "kv_unstable_sval")] -impl ToValue for dyn self::sval::value::Value { - fn to_value(&self) -> Value { - Value::from_dyn_sval(self) +impl<'v> self::sval::Value for Value<'v> { + fn stream<'sval, S: self::sval::Stream<'sval> + ?Sized>(&'sval self, stream: &mut S) -> self::sval::Result { + self::sval::Value::stream(&self.inner, stream) } } @@ -465,6 +450,12 @@ impl ToValue for std::num::NonZeroI128 { } } +impl<'v> From> for Value<'v> { + fn from(value: ValueBag<'v>) -> Self { + Value::from_value_bag(value) + } +} + impl<'v> From<&'v str> for Value<'v> { fn from(value: &'v str) -> Self { Value::from_value_bag(value) @@ -650,7 +641,7 @@ pub trait Visit<'v> { /// This is the only required method on `Visit` and acts as a fallback for any /// more specific methods that aren't overridden. /// The `Value` may be formatted using its `fmt::Debug` or `fmt::Display` implementation, - /// or serialized using its `sval::Value` or `serde::Serialize` implementation. + /// or serialized using its `self::sval::Value` or `serde::Serialize` implementation. fn visit_any(&mut self, value: Value) -> Result<(), Error>; /// Visit an unsigned integer. @@ -777,11 +768,11 @@ where pub(crate) mod tests { use super::*; - pub(crate) use super::value_bag::test::Token; + pub(crate) use super::value_bag::test::TestToken as Token; impl<'v> Value<'v> { pub(crate) fn to_token(&self) -> Token { - self.inner.to_token() + self.inner.to_test_token() } } From 9c125f239a26946623e2369c6383dc59782f4e02 Mon Sep 17 00:00:00 2001 From: KodrAus Date: Mon, 10 Apr 2023 17:56:03 +1000 Subject: [PATCH 2/6] borrow for 'kv from Key<'kv> and Value<'kv> --- Cargo.toml | 13 +++++++------ src/kv/key.rs | 8 ++++++++ src/kv/source.rs | 14 +++++--------- src/kv/value.rs | 15 +++++++++------ 4 files changed, 29 insertions(+), 21 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 31164d5e3..c9fddf999 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -48,19 +48,20 @@ std = [] # requires the latest stable # this will have a tighter MSRV before stabilization kv_unstable = ["value-bag"] -kv_unstable_sval = ["kv_unstable", "value-bag/sval", "sval"] +kv_unstable_sval = ["kv_unstable", "value-bag/sval", "sval", "sval_ref"] kv_unstable_std = ["std", "kv_unstable", "value-bag/error"] kv_unstable_serde = ["kv_unstable_std", "value-bag/serde", "serde"] [dependencies] serde = { version = "1.0", optional = true, default-features = false } -sval = { version = "2.0", optional = true, default-features = false } -value-bag = { version = "1.0", optional = true, default-features = false } +sval = { version = "2.1", optional = true, default-features = false } +sval_ref = { version = "2.1", optional = true, default-features = false } +value-bag = { version = "1.1", optional = true, default-features = false } [dev-dependencies] rustversion = "1.0" serde = { version = "1.0", features = ["derive"] } serde_test = "1.0" -sval = { version = "2.0" } -sval_derive = { version = "2.0" } -value-bag = { version = "1.0", features = ["test"] } +sval = { version = "2.1" } +sval_derive = { version = "2.1" } +value-bag = { version = "1.1", features = ["test"] } diff --git a/src/kv/key.rs b/src/kv/key.rs index d5258383c..b857d336c 100644 --- a/src/kv/key.rs +++ b/src/kv/key.rs @@ -104,14 +104,22 @@ mod sval_support { use super::*; extern crate sval; + extern crate sval_ref; use self::sval::Value; + use self::sval_ref::ValueRef; impl<'a> Value for Key<'a> { fn stream<'sval, S: sval::Stream<'sval> + ?Sized>(&'sval self, stream: &mut S) -> sval::Result { self.key.stream(stream) } } + + impl<'a> ValueRef<'a> for Key<'a> { + fn stream_ref + ?Sized>(&self, stream: &mut S) -> self::sval::Result { + self.key.stream(stream) + } + } } #[cfg(feature = "kv_unstable_serde")] diff --git a/src/kv/source.rs b/src/kv/source.rs index 5ea41c159..7812d09fb 100644 --- a/src/kv/source.rs +++ b/src/kv/source.rs @@ -2,6 +2,8 @@ #[cfg(feature = "kv_unstable_sval")] extern crate sval; +#[cfg(feature = "kv_unstable_sval")] +extern crate sval_ref; #[cfg(feature = "kv_unstable_serde")] extern crate serde; @@ -470,16 +472,11 @@ mod sval_support { impl<'a, 'kvs, V: self::sval::Stream<'kvs> + ?Sized> Visitor<'kvs> for StreamVisitor<'a, V> { fn visit_pair(&mut self, key: Key<'kvs>, value: Value<'kvs>) -> Result<(), Error> { self.0.map_key_begin().map_err(|_| Error::msg("failed to stream map key"))?; - if let Some(key) = key.to_borrowed_str() { - self.0.value(key).map_err(|_| Error::msg("failed to stream map key"))?; - } else { - self.0.value_computed(key.as_str()).map_err(|_| Error::msg("failed to stream map key"))?; - } + sval_ref::stream_ref(self.0, key).map_err(|_| Error::msg("failed to stream map key"))?; self.0.map_key_end().map_err(|_| Error::msg("failed to stream map key"))?; - // TODO: Need to borrow this here self.0.map_value_begin().map_err(|_| Error::msg("failed to stream map value"))?; - self.0.value_computed(&value).map_err(|_| Error::msg("failed to stream map value"))?; + sval_ref::stream_ref(self.0, value).map_err(|_| Error::msg("failed to stream map value"))?; self.0.map_value_end().map_err(|_| Error::msg("failed to stream map value"))?; Ok(()) @@ -508,9 +505,8 @@ mod sval_support { impl<'a, 'kvs, V: self::sval::Stream<'kvs> + ?Sized> Visitor<'kvs> for StreamVisitor<'a, V> { fn visit_pair(&mut self, key: Key<'kvs>, value: Value<'kvs>) -> Result<(), Error> { - // TODO: Need to borrow this here self.0.seq_value_begin().map_err(|_| Error::msg("failed to stream seq value"))?; - self.0.value_computed(&(key, value)).map_err(|_| Error::msg("failed to stream seq value"))?; + self::sval_ref::stream_ref(self.0, (key, value)).map_err(|_| Error::msg("failed to stream seq value"))?; self.0.seq_value_end().map_err(|_| Error::msg("failed to stream seq value"))?; Ok(()) diff --git a/src/kv/value.rs b/src/kv/value.rs index e0dcb9da2..d4b3bf39f 100644 --- a/src/kv/value.rs +++ b/src/kv/value.rs @@ -6,6 +6,8 @@ extern crate value_bag; #[cfg(feature = "kv_unstable_sval")] extern crate sval; +#[cfg(feature = "kv_unstable_sval")] +extern crate sval_ref; #[cfg(feature = "kv_unstable_serde")] extern crate serde; @@ -420,6 +422,13 @@ impl<'v> self::sval::Value for Value<'v> { } } +#[cfg(feature = "kv_unstable_sval")] +impl<'v> self::sval_ref::ValueRef<'v> for Value<'v> { + fn stream_ref + ?Sized>(&self, stream: &mut S) -> self::sval::Result { + self::sval_ref::ValueRef::stream_ref(&self.inner, stream) + } +} + impl ToValue for str { fn to_value(&self) -> Value { Value::from(self) @@ -450,12 +459,6 @@ impl ToValue for std::num::NonZeroI128 { } } -impl<'v> From> for Value<'v> { - fn from(value: ValueBag<'v>) -> Self { - Value::from_value_bag(value) - } -} - impl<'v> From<&'v str> for Value<'v> { fn from(value: &'v str) -> Self { Value::from_value_bag(value) From 955d352ccc73dbec1f4c3346e1f35823c62e0fde Mon Sep 17 00:00:00 2001 From: KodrAus Date: Mon, 10 Apr 2023 18:04:58 +1000 Subject: [PATCH 3/6] qualify path to serde --- src/kv/value.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/kv/value.rs b/src/kv/value.rs index d4b3bf39f..818743709 100644 --- a/src/kv/value.rs +++ b/src/kv/value.rs @@ -199,7 +199,7 @@ impl<'v> Value<'v> { /// Get a value from a type implementing `serde::Serialize`. pub fn capture_serde(value: &'v T) -> Self where - T: serde::Serialize + 'static, + T: self::serde::Serialize + 'static, { Value { inner: ValueBag::capture_serde1(value), @@ -241,7 +241,7 @@ impl<'v> Value<'v> { #[cfg(feature = "kv_unstable_serde")] pub fn from_serde(value: &'v T) -> Self where - T: serde::Serialize, + T: self::serde::Serialize, { Value { inner: ValueBag::from_serde1(value), @@ -406,10 +406,10 @@ impl ToValue for dyn std::error::Error + 'static { } #[cfg(feature = "kv_unstable_serde")] -impl<'v> serde::Serialize for Value<'v> { +impl<'v> self::serde::Serialize for Value<'v> { fn serialize(&self, s: S) -> Result where - S: serde::Serializer, + S: self::serde::Serializer, { self.inner.serialize(s) } From b71d3b1feb98fc67886fbed5d074c55777f15780 Mon Sep 17 00:00:00 2001 From: KodrAus Date: Mon, 10 Apr 2023 18:05:46 +1000 Subject: [PATCH 4/6] fix up path in doc comments --- src/kv/value.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/kv/value.rs b/src/kv/value.rs index 818743709..893afa74e 100644 --- a/src/kv/value.rs +++ b/src/kv/value.rs @@ -73,7 +73,7 @@ macro_rules! as_serde { }; } -/// Get a value from a type implementing `self::sval::value::Value`. +/// Get a value from a type implementing `sval::Value`. #[cfg(feature = "kv_unstable_sval")] #[macro_export] macro_rules! as_sval { @@ -206,7 +206,7 @@ impl<'v> Value<'v> { } } - /// Get a value from a type implementing `self::sval::value::Value`. + /// Get a value from a type implementing `sval::Value`. #[cfg(feature = "kv_unstable_sval")] pub fn capture_sval(value: &'v T) -> Self where @@ -248,7 +248,7 @@ impl<'v> Value<'v> { } } - /// Get a value from a type implementing `sval::value::Value`. + /// Get a value from a type implementing `sval::Value`. #[cfg(feature = "kv_unstable_sval")] pub fn from_sval(value: &'v T) -> Self where @@ -644,7 +644,7 @@ pub trait Visit<'v> { /// This is the only required method on `Visit` and acts as a fallback for any /// more specific methods that aren't overridden. /// The `Value` may be formatted using its `fmt::Debug` or `fmt::Display` implementation, - /// or serialized using its `self::sval::Value` or `serde::Serialize` implementation. + /// or serialized using its `sval::Value` or `serde::Serialize` implementation. fn visit_any(&mut self, value: Value) -> Result<(), Error>; /// Visit an unsigned integer. From ab829c616ab52c9161197701f0662e925406f9a9 Mon Sep 17 00:00:00 2001 From: KodrAus Date: Mon, 10 Apr 2023 18:08:12 +1000 Subject: [PATCH 5/6] run fmt --- src/kv/key.rs | 10 ++++++++-- src/kv/source.rs | 51 ++++++++++++++++++++++++++++++++---------------- src/kv/value.rs | 5 ++++- 3 files changed, 46 insertions(+), 20 deletions(-) diff --git a/src/kv/key.rs b/src/kv/key.rs index b857d336c..4f9a506ec 100644 --- a/src/kv/key.rs +++ b/src/kv/key.rs @@ -110,13 +110,19 @@ mod sval_support { use self::sval_ref::ValueRef; impl<'a> Value for Key<'a> { - fn stream<'sval, S: sval::Stream<'sval> + ?Sized>(&'sval self, stream: &mut S) -> sval::Result { + fn stream<'sval, S: sval::Stream<'sval> + ?Sized>( + &'sval self, + stream: &mut S, + ) -> sval::Result { self.key.stream(stream) } } impl<'a> ValueRef<'a> for Key<'a> { - fn stream_ref + ?Sized>(&self, stream: &mut S) -> self::sval::Result { + fn stream_ref + ?Sized>( + &self, + stream: &mut S, + ) -> self::sval::Result { self.key.stream(stream) } } diff --git a/src/kv/source.rs b/src/kv/source.rs index 7812d09fb..45fc6dce4 100644 --- a/src/kv/source.rs +++ b/src/kv/source.rs @@ -466,18 +466,31 @@ mod sval_support { where S: Source, { - fn stream<'sval, SV: self::sval::Stream<'sval> + ?Sized>(&'sval self, stream: &mut SV) -> self::sval::Result { + fn stream<'sval, SV: self::sval::Stream<'sval> + ?Sized>( + &'sval self, + stream: &mut SV, + ) -> self::sval::Result { struct StreamVisitor<'a, V: ?Sized>(&'a mut V); impl<'a, 'kvs, V: self::sval::Stream<'kvs> + ?Sized> Visitor<'kvs> for StreamVisitor<'a, V> { fn visit_pair(&mut self, key: Key<'kvs>, value: Value<'kvs>) -> Result<(), Error> { - self.0.map_key_begin().map_err(|_| Error::msg("failed to stream map key"))?; - sval_ref::stream_ref(self.0, key).map_err(|_| Error::msg("failed to stream map key"))?; - self.0.map_key_end().map_err(|_| Error::msg("failed to stream map key"))?; + self.0 + .map_key_begin() + .map_err(|_| Error::msg("failed to stream map key"))?; + sval_ref::stream_ref(self.0, key) + .map_err(|_| Error::msg("failed to stream map key"))?; + self.0 + .map_key_end() + .map_err(|_| Error::msg("failed to stream map key"))?; - self.0.map_value_begin().map_err(|_| Error::msg("failed to stream map value"))?; - sval_ref::stream_ref(self.0, value).map_err(|_| Error::msg("failed to stream map value"))?; - self.0.map_value_end().map_err(|_| Error::msg("failed to stream map value"))?; + self.0 + .map_value_begin() + .map_err(|_| Error::msg("failed to stream map value"))?; + sval_ref::stream_ref(self.0, value) + .map_err(|_| Error::msg("failed to stream map value"))?; + self.0 + .map_value_end() + .map_err(|_| Error::msg("failed to stream map value"))?; Ok(()) } @@ -490,9 +503,7 @@ mod sval_support { self.visit(&mut StreamVisitor(stream)) .map_err(|_| self::sval::Error::new())?; - stream - .map_end() - .map_err(|_| self::sval::Error::new()) + stream.map_end().map_err(|_| self::sval::Error::new()) } } @@ -500,14 +511,22 @@ mod sval_support { where S: Source, { - fn stream<'sval, SV: self::sval::Stream<'sval> + ?Sized>(&'sval self, stream: &mut SV) -> self::sval::Result { + fn stream<'sval, SV: self::sval::Stream<'sval> + ?Sized>( + &'sval self, + stream: &mut SV, + ) -> self::sval::Result { struct StreamVisitor<'a, V: ?Sized>(&'a mut V); impl<'a, 'kvs, V: self::sval::Stream<'kvs> + ?Sized> Visitor<'kvs> for StreamVisitor<'a, V> { fn visit_pair(&mut self, key: Key<'kvs>, value: Value<'kvs>) -> Result<(), Error> { - self.0.seq_value_begin().map_err(|_| Error::msg("failed to stream seq value"))?; - self::sval_ref::stream_ref(self.0, (key, value)).map_err(|_| Error::msg("failed to stream seq value"))?; - self.0.seq_value_end().map_err(|_| Error::msg("failed to stream seq value"))?; + self.0 + .seq_value_begin() + .map_err(|_| Error::msg("failed to stream seq value"))?; + self::sval_ref::stream_ref(self.0, (key, value)) + .map_err(|_| Error::msg("failed to stream seq value"))?; + self.0 + .seq_value_end() + .map_err(|_| Error::msg("failed to stream seq value"))?; Ok(()) } @@ -520,9 +539,7 @@ mod sval_support { self.visit(&mut StreamVisitor(stream)) .map_err(|_| self::sval::Error::new())?; - stream - .seq_end() - .map_err(|_| self::sval::Error::new()) + stream.seq_end().map_err(|_| self::sval::Error::new()) } } diff --git a/src/kv/value.rs b/src/kv/value.rs index 893afa74e..9485d485b 100644 --- a/src/kv/value.rs +++ b/src/kv/value.rs @@ -417,7 +417,10 @@ impl<'v> self::serde::Serialize for Value<'v> { #[cfg(feature = "kv_unstable_sval")] impl<'v> self::sval::Value for Value<'v> { - fn stream<'sval, S: self::sval::Stream<'sval> + ?Sized>(&'sval self, stream: &mut S) -> self::sval::Result { + fn stream<'sval, S: self::sval::Stream<'sval> + ?Sized>( + &'sval self, + stream: &mut S, + ) -> self::sval::Result { self::sval::Value::stream(&self.inner, stream) } } From 83117275c37be00d1d7294ccb8a5124c73bbfe18 Mon Sep 17 00:00:00 2001 From: KodrAus Date: Mon, 10 Apr 2023 21:11:21 +1000 Subject: [PATCH 6/6] only run tests on MSRV --- .github/workflows/main.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 783b5052d..f38d3b33e 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -129,9 +129,6 @@ jobs: run: | rustup update 1.31.0 --no-self-update rustup default 1.31.0 - - run: cargo build --verbose - - run: cargo build --verbose --features serde - - run: cargo build --verbose --features std - run: cargo test --verbose --manifest-path tests/Cargo.toml embedded: