Skip to content

Commit 88d278a

Browse files
authored
Implement Borrow for Key (#7)
1 parent 05c05d7 commit 88d278a

File tree

3 files changed

+21
-18
lines changed

3 files changed

+21
-18
lines changed

integ-tests/tests/de.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ impl<'de> Deserialize<'de> for Package {
6060
ValueInner::Table(tab) => {
6161
let mut th = TableHelper::from((tab, value.span));
6262

63-
if let Some(mut val) = th.table.remove(&"crate".into()) {
63+
if let Some(mut val) = th.table.remove("crate") {
6464
let (name, version) = match val.take() {
6565
ValueInner::String(s) => from_str(s),
6666
found => {

toml-span/src/de_helpers.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -82,15 +82,15 @@ impl<'de> TableHelper<'de> {
8282

8383
/// Returns true if the table contains the specified key
8484
#[inline]
85-
pub fn contains(&self, name: &'de str) -> bool {
86-
self.table.contains_key(&name.into())
85+
pub fn contains(&self, name: &str) -> bool {
86+
self.table.contains_key(name)
8787
}
8888

8989
/// Takes the specified key and its value if it exists
9090
#[inline]
9191
pub fn take(&mut self, name: &'static str) -> Option<(value::Key<'de>, Value<'de>)> {
9292
self.expected.push(name);
93-
self.table.remove_entry(&name.into())
93+
self.table.remove_entry(name)
9494
}
9595

9696
/// Attempts to deserialize the specified key
@@ -114,7 +114,7 @@ impl<'de> TableHelper<'de> {
114114
) -> Result<Spanned<T>, Error> {
115115
self.expected.push(name);
116116

117-
let Some(mut val) = self.table.remove(&name.into()) else {
117+
let Some(mut val) = self.table.remove(name) else {
118118
let missing = Error {
119119
kind: ErrorKind::MissingField(name),
120120
span: self.span,
@@ -144,7 +144,7 @@ impl<'de> TableHelper<'de> {
144144
pub fn optional_s<T: Deserialize<'de>>(&mut self, name: &'static str) -> Option<Spanned<T>> {
145145
self.expected.push(name);
146146

147-
let mut val = self.table.remove(&name.into())?;
147+
let mut val = self.table.remove(name)?;
148148

149149
match Spanned::<T>::deserialize(&mut val) {
150150
Ok(v) => Some(v),

toml-span/src/value.rs

+15-12
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ impl<'de> Value<'de> {
6666
pub fn has_key(&self, key: &str) -> bool {
6767
self.value.as_ref().map_or(false, |val| {
6868
if let ValueInner::Table(table) = val {
69-
table.contains_key(&key.into())
69+
table.contains_key(key)
7070
} else {
7171
false
7272
}
@@ -144,7 +144,7 @@ impl<'de> Value<'de> {
144144
/// Note that this is JSON pointer**-like** because `/` is not supported in
145145
/// key names because I don't see the point. If you want this it is easy to
146146
/// implement.
147-
pub fn pointer(&self, pointer: &'de str) -> Option<&Self> {
147+
pub fn pointer(&self, pointer: &str) -> Option<&Self> {
148148
if pointer.is_empty() {
149149
return Some(self);
150150
} else if !pointer.starts_with('/') {
@@ -157,9 +157,9 @@ impl<'de> Value<'de> {
157157
// Don't support / or ~ in key names unless someone actually opens
158158
// an issue about it
159159
//.map(|x| x.replace("~1", "/").replace("~0", "~"))
160-
.try_fold(self, |target, token| {
160+
.try_fold(self, move |target, token| {
161161
(match &target.value {
162-
Some(ValueInner::Table(tab)) => tab.get(&token.into()),
162+
Some(ValueInner::Table(tab)) => tab.get(token),
163163
Some(ValueInner::Array(list)) => parse_index(token).and_then(|x| list.get(x)),
164164
_ => None,
165165
})
@@ -183,7 +183,7 @@ impl<'de> Value<'de> {
183183
//.map(|x| x.replace("~1", "/").replace("~0", "~"))
184184
.try_fold(self, |target, token| {
185185
(match &mut target.value {
186-
Some(ValueInner::Table(tab)) => tab.get_mut(&token.into()),
186+
Some(ValueInner::Table(tab)) => tab.get_mut(token),
187187
Some(ValueInner::Array(list)) => {
188188
parse_index(token).and_then(|x| list.get_mut(x))
189189
}
@@ -225,18 +225,21 @@ pub struct Key<'de> {
225225
pub span: Span,
226226
}
227227

228-
impl<'de> From<&'de str> for Key<'de> {
229-
fn from(k: &'de str) -> Self {
230-
Self {
231-
name: Cow::Borrowed(k),
232-
span: Span::default(),
233-
}
228+
impl<'de> std::borrow::Borrow<str> for Key<'de> {
229+
fn borrow(&self) -> &str {
230+
self.name.as_ref()
234231
}
235232
}
236233

237234
impl<'de> fmt::Debug for Key<'de> {
238235
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
239-
write!(f, "{}", self.name)
236+
f.write_str(&self.name)
237+
}
238+
}
239+
240+
impl<'de> fmt::Display for Key<'de> {
241+
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
242+
f.write_str(&self.name)
240243
}
241244
}
242245

0 commit comments

Comments
 (0)