Radish alpha
r
rad:z4D5UCArafTzTQpDZNQRuqswh3ury
Radicle desktop app
Radicle
Git
Optimize: Collect into sorted collection
Archived did:key:z6MkoohH...AjJf opened 1 month ago

I found ac600ed8b40d80b456a32edd8d19d3ca9b0a11fb and thought that this could be optimized by collecting into a sorted collection right away instead of collecting into an unsorted and sorting that afterwards.

This is a proposal, feel free to take or leave however you prefer ;-)

1 file changed +18 -17 052839ac db6130f8
modified crates/radicle-types/src/traits/repo.rs
@@ -76,26 +76,27 @@ pub trait Repo: Profile {
    fn list_repos_summary(&self) -> Result<Vec<repo::RepoSummary>, Error> {
        let profile = self.profile();
        let storage = &profile.storage;
-
        let repos = storage.repositories()?;
-
        let mut entries = Vec::new();

-
        for RepositoryInfo { rid, doc, .. } in repos {
-
            let Some(data) = doc
-
                .payload()
-
                .get(&doc::PayloadId::project())
-
                .and_then(|payload| repo::ProjectPayloadData::try_from((*payload).clone()).ok())
-
            else {
-
                continue;
-
            };
-
            entries.push(repo::RepoSummary {
-
                rid,
-
                name: data.name,
-
            });
-
        }
+
        let entries = storage
+
            .repositories()?
+
            .into_iter()
+
            .filter_map(|RepositoryInfo { rid, doc, .. }| {
+
                doc.payload()
+
                    .get(&doc::PayloadId::project())
+
                    .and_then(|payload| repo::ProjectPayloadData::try_from((*payload).clone()).ok())
+
                    .map(|data| (rid, data))
+
            })
+
            .map(|(rid, data)| {
+
                let summary = repo::RepoSummary {
+
                    rid,
+
                    name: data.name,
+
                };

-
        entries.sort_by_key(|r| r.name.to_lowercase());
+
                (summary.name.to_lowercase(), summary)
+
            })
+
            .collect::<BTreeMap<_, _>>();

-
        Ok::<_, Error>(entries)
+
        Ok::<_, Error>(entries.values().collect())
    }

    fn repo_count(&self) -> Result<repo::RepoCount, Error> {