Optimize CratesToml::collect_into_crates_versions (#589)

Avoid calling `CrateVersionSource::from_str` which parses the source and
allocates `Url`.

Signed-off-by: Jiahao XU <Jiahao_XU@outlook.com>
This commit is contained in:
Jiahao XU 2022-12-04 12:46:30 +11:00 committed by GitHub
parent 23a5937aff
commit ec026c1711
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -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<BTreeMap<CompactString, Version>, CratesTomlParseError> {
fn parse_name_ver(s: &str) -> Result<(CompactString, Version), CvsParseError> {
match s.splitn(3, ' ').collect::<Vec<_>>()[..] {
[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()
}
}