Skip to content

Commit 94aac2e

Browse files
committed
refactor: implement From Cow trait for the InternedString
Signed-off-by: 0xPoe <techregister@pm.me>
1 parent 42eb272 commit 94aac2e

File tree

3 files changed

+16
-27
lines changed

3 files changed

+16
-27
lines changed

src/cargo/core/compiler/fingerprint/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -694,7 +694,7 @@ impl<'de> Deserialize<'de> for DepFingerprint {
694694
let (pkg_id, name, public, hash) = <(u64, String, bool, u64)>::deserialize(d)?;
695695
Ok(DepFingerprint {
696696
pkg_id,
697-
name: InternedString::new(&name),
697+
name: name.into(),
698698
public,
699699
fingerprint: Arc::new(Fingerprint {
700700
memoized_hash: Mutex::new(Some(hash)),

src/cargo/sources/registry/index/mod.rs

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -264,35 +264,23 @@ impl IndexPackage<'_> {
264264
fn to_summary(&self, source_id: SourceId) -> CargoResult<Summary> {
265265
// ****CAUTION**** Please be extremely careful with returning errors, see
266266
// `IndexSummary::parse` for details
267-
let pkgid = PackageId::new(
268-
InternedString::new(&self.name),
269-
self.vers.clone(),
270-
source_id,
271-
);
267+
let pkgid = PackageId::new(self.name.as_ref().into(), self.vers.clone(), source_id);
272268
let deps = self
273269
.deps
274270
.iter()
275271
.map(|dep| dep.clone().into_dep(source_id))
276272
.collect::<CargoResult<Vec<_>>>()?;
277273
let mut features = self.features.clone();
278-
if let Some(features2) = &self.features2 {
274+
if let Some(features2) = self.features2.clone() {
279275
for (name, values) in features2 {
280-
features
281-
.entry(name.clone())
282-
.or_default()
283-
.extend(values.iter().cloned());
276+
features.entry(name).or_default().extend(values);
284277
}
285278
}
286279
let features = features
287280
.into_iter()
288-
.map(|(name, values)| {
289-
(
290-
InternedString::new(&name),
291-
values.iter().map(|v| InternedString::new(&v)).collect(),
292-
)
293-
})
281+
.map(|(name, values)| (name.into(), values.into_iter().map(|v| v.into()).collect()))
294282
.collect::<BTreeMap<_, _>>();
295-
let links = self.links.as_ref().map(|l| InternedString::new(&l));
283+
let links: Option<InternedString> = self.links.as_ref().map(|l| l.as_ref().into());
296284
let mut summary = Summary::new(pkgid, deps, &features, links, self.rust_version.clone())?;
297285
summary.set_checksum(self.cksum.clone());
298286
Ok(summary)

src/cargo/util/interning.rs

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ impl<'a> From<&'a String> for InternedString {
4747

4848
impl From<String> for InternedString {
4949
fn from(item: String) -> Self {
50-
InternedString::from_cow(item.into())
50+
InternedString::from(Cow::Owned(item))
5151
}
5252
}
5353

@@ -69,14 +69,8 @@ impl<'a> PartialEq<&'a str> for InternedString {
6969
}
7070
}
7171

72-
impl Eq for InternedString {}
73-
74-
impl InternedString {
75-
pub fn new(s: &str) -> InternedString {
76-
InternedString::from_cow(s.into())
77-
}
78-
79-
fn from_cow<'a>(cs: Cow<'a, str>) -> InternedString {
72+
impl<'a> From<Cow<'a, str>> for InternedString {
73+
fn from(cs: Cow<'a, str>) -> Self {
8074
let mut cache = interned_storage();
8175
let s = cache.get(cs.as_ref()).copied().unwrap_or_else(|| {
8276
let s = cs.into_owned().leak();
@@ -86,7 +80,14 @@ impl InternedString {
8680

8781
InternedString { inner: s }
8882
}
83+
}
84+
85+
impl Eq for InternedString {}
8986

87+
impl InternedString {
88+
pub fn new(s: &str) -> InternedString {
89+
InternedString::from(Cow::Borrowed(s))
90+
}
9091
pub fn as_str(&self) -> &'static str {
9192
self.inner
9293
}

0 commit comments

Comments
 (0)