Skip to content

Commit

Permalink
borrow for 'kv from Key<'kv> and Value<'kv>
Browse files Browse the repository at this point in the history
  • Loading branch information
KodrAus committed Apr 10, 2023
1 parent c644e6f commit 9c125f2
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 21 deletions.
13 changes: 7 additions & 6 deletions Cargo.toml
Expand Up @@ -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"] }
8 changes: 8 additions & 0 deletions src/kv/key.rs
Expand Up @@ -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<S: self::sval::Stream<'a> + ?Sized>(&self, stream: &mut S) -> self::sval::Result {
self.key.stream(stream)
}
}
}

#[cfg(feature = "kv_unstable_serde")]
Expand Down
14 changes: 5 additions & 9 deletions src/kv/source.rs
Expand Up @@ -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;
Expand Down Expand Up @@ -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(())
Expand Down Expand Up @@ -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(())
Expand Down
15 changes: 9 additions & 6 deletions src/kv/value.rs
Expand Up @@ -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;
Expand Down Expand Up @@ -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<S: self::sval::Stream<'v> + ?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)
Expand Down Expand Up @@ -450,12 +459,6 @@ impl ToValue for std::num::NonZeroI128 {
}
}

impl<'v> From<ValueBag<'v>> 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)
Expand Down

0 comments on commit 9c125f2

Please sign in to comment.