From ec026c171168ba3ac8b1804b5ac84d2248da1810 Mon Sep 17 00:00:00 2001 From: Jiahao XU Date: Sun, 4 Dec 2022 12:46:30 +1100 Subject: [PATCH] Optimize `CratesToml::collect_into_crates_versions` (#589) Avoid calling `CrateVersionSource::from_str` which parses the source and allocates `Url`. Signed-off-by: Jiahao XU --- crates/binstalk-manifests/src/cargo_crates_v1.rs | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/crates/binstalk-manifests/src/cargo_crates_v1.rs b/crates/binstalk-manifests/src/cargo_crates_v1.rs index 6db43bd1..536c484b 100644 --- a/crates/binstalk-manifests/src/cargo_crates_v1.rs +++ b/crates/binstalk-manifests/src/cargo_crates_v1.rs @@ -13,7 +13,6 @@ use std::{ io::{self, Seek}, iter::IntoIterator, path::{Path, PathBuf}, - str::FromStr, }; use compact_str::CompactString; @@ -131,12 +130,16 @@ impl CratesToml { pub fn collect_into_crates_versions( self, ) -> Result, CratesTomlParseError> { + fn parse_name_ver(s: &str) -> Result<(CompactString, Version), CvsParseError> { + match s.splitn(3, ' ').collect::>()[..] { + [name, version, _source] => Ok((CompactString::new(name), version.parse()?)), + _ => Err(CvsParseError::BadFormat), + } + } + self.v1 .into_iter() - .map(|(s, _bins)| { - let cvs = CrateVersionSource::from_str(&s)?; - Ok((cvs.name, cvs.version)) - }) + .map(|(s, _bins)| parse_name_ver(&s).map_err(CratesTomlParseError::from)) .collect() } }