Added sorting utilities

This commit is contained in:
daladim 2021-07-05 11:28:06 +02:00
parent fbd076875a
commit 2b339a7aff
3 changed files with 14 additions and 0 deletions

View file

@ -100,6 +100,8 @@ pub trait CompleteCalendar : BaseCalendar {
async fn get_item_ids(&self) -> Result<HashSet<ItemId>, Box<dyn Error>>;
/// Returns all items that this calendar contains
///
/// See [`crate::utils::comparison`] for helper functions that help sorting the results
async fn get_items(&self) -> Result<HashMap<ItemId, &Item>, Box<dyn Error>>;
/// Returns a particular item

10
src/utils/comparison.rs Normal file
View file

@ -0,0 +1,10 @@
//! Utilities to compare custom types
//!
//! These can be used to sort results, e.g. by using `sorted_by` from the `itertools` crate
use crate::item::{Item, ItemId};
/// Compare alphabetically types returned e.g. by [`crate::traits::CompleteCalendar::get_items`]
pub fn compare_items_alpha(left: &(&ItemId, &&Item), right: &(&ItemId, &&Item)) -> std::cmp::Ordering {
Ord::cmp(&left.1.name().to_lowercase(), &right.1.name().to_lowercase())
}

View file

@ -13,6 +13,8 @@ use crate::calendar::CalendarId;
use crate::Item;
use crate::item::SyncStatus;
pub mod comparison;
/// Walks an XML tree and returns every element that has the given name
pub fn find_elems<S: AsRef<str>>(root: &Element, searched_name: S) -> Vec<&Element> {
let searched_name = searched_name.as_ref();