From 4cf99ea2a2a84b8a25822a26404af61f29ba87b5 Mon Sep 17 00:00:00 2001 From: Guillem Nieto Date: Sun, 5 May 2019 23:53:30 +0200 Subject: Remove ValueWithKey struct While using this library, I end up having lifetime issues with `Config::get`. I've seen that current implementation forces the calleer to match `key` lifetime to the output of the function. My use case is, under some circumstances, return a suffixed version of the config key. Something similar to: ``` if some_condition == true { let key_name = format!("{}_suffix", key); self.config.get(&key_name) } else { self.config.get(key) } ``` This code is noy compiling for me due to conflicting lifetimes. To avoid this, I've started looking to the code and I've found that `key` needed this lifetime because of `ValueWithKey`. The purpouse of this struct seems to be add more information to the errors that are returned to the user. To mitigate this lifetime coupling I've: - Mapped the error on `Config::get` to include the originating key of the current error - Remove all the code related with `ValueWithKey` --- src/value.rs | 55 ------------------------------------------------------- 1 file changed, 55 deletions(-) (limited to 'src/value.rs') diff --git a/src/value.rs b/src/value.rs index 1bba78c..2db195d 100644 --- a/src/value.rs +++ b/src/value.rs @@ -542,58 +542,3 @@ impl Display for Value { write!(f, "{}", self.kind) } } - -pub struct ValueWithKey<'a>(pub Value, &'a str); - -impl<'a> ValueWithKey<'a> { - pub fn new(value: Value, key: &'a str) -> Self { - ValueWithKey(value, key) - } - - pub fn into_bool(self) -> Result { - match self.0.into_bool() { - Ok(value) => Ok(value), - Err(error) => Err(error.extend_with_key(self.1)), - } - } - - /// Returns `self` into an i64, if possible. - pub fn into_int(self) -> Result { - match self.0.into_int() { - Ok(value) => Ok(value), - Err(error) => Err(error.extend_with_key(self.1)), - } - } - - /// Returns `self` into a f64, if possible. - pub fn into_float(self) -> Result { - match self.0.into_float() { - Ok(value) => Ok(value), - Err(error) => Err(error.extend_with_key(self.1)), - } - } - - /// Returns `self` into a str, if possible. - pub fn into_str(self) -> Result { - match self.0.into_str() { - Ok(value) => Ok(value), - Err(error) => Err(error.extend_with_key(self.1)), - } - } - - /// Returns `self` into an array, if possible - pub fn into_array(self) -> Result> { - match self.0.into_array() { - Ok(value) => Ok(value), - Err(error) => Err(error.extend_with_key(self.1)), - } - } - - /// If the `Value` is a Table, returns the associated Map. - pub fn into_table(self) -> Result> { - match self.0.into_table() { - Ok(value) => Ok(value), - Err(error) => Err(error.extend_with_key(self.1)), - } - } -} -- cgit v1.2.3