Optimize CratesToml::append_to_file

Bulkify remove

Signed-off-by: Jiahao XU <30436523+NobodyXu@users.noreply.github.com>
This commit is contained in:
Jiahao XU 2025-06-03 01:24:37 +10:00 committed by GitHub
parent 68b9519527
commit a2df287683
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -68,9 +68,14 @@ impl CratesToml<'_> {
} }
pub fn remove(&mut self, name: &str) { pub fn remove(&mut self, name: &str) {
self.remove(&[name]);
}
/// * `sorted_names` - must be sorted
pub fn remove_all(&mut self, sorted_names: &[&str]) {
self.v1.retain(|(s, _bin)| { self.v1.retain(|(s, _bin)| {
s.split_once(' ') s.split_once(' ')
.map(|(crate_name, _rest)| crate_name != name) .map(|(crate_name, _rest)| sorted_names.binary_search(crate_name).is_err())
.unwrap_or_default() .unwrap_or_default()
}); });
} }
@ -106,35 +111,28 @@ impl CratesToml<'_> {
self.write_to_file(&mut file) self.write_to_file(&mut file)
} }
pub fn append_to_file<'a, Iter>(file: &mut File, iter: Iter) -> Result<(), CratesTomlParseError> pub fn append_to_file(file: &mut File, crates: &[CrateInfo]) -> Result<(), CratesTomlParseError> {
where let mut c1 = CratesToml::load_from_reader(&mut *file)?;
Iter: IntoIterator<Item = &'a CrateInfo>,
{
fn inner(
file: &mut File,
iter: &mut dyn Iterator<Item = &CrateInfo>,
) -> Result<(), CratesTomlParseError> {
let mut c1 = CratesToml::load_from_reader(&mut *file)?;
for metadata in iter { let mut crate_names: Vec<_> = crates.iter().map(|metadata| &metadata.name).collect();
let name = &metadata.name; crate_names.sort_unstable();
let version = &metadata.current_version; c1.remove_all(&crate_names);
let source = Source::from(&metadata.source);
c1.remove(name); for metadata in crates {
c1.v1.push(( let name = &metadata.name;
format!("{name} {version} ({source})"), let version = &metadata.current_version;
Cow::borrowed(&metadata.bins), let source = Source::from(&metadata.source);
));
}
file.rewind()?; c1.v1.push((
c1.write_to_file(file)?; format!("{name} {version} ({source})"),
Cow::borrowed(&metadata.bins),
Ok(()) ));
} }
inner(file, &mut iter.into_iter()) file.rewind()?;
c1.write_to_file(file)?;
Ok(())
} }
pub fn append_to_path<'a, Iter>( pub fn append_to_path<'a, Iter>(