Added sorting utilities
This commit is contained in:
parent
fbd076875a
commit
2b339a7aff
3 changed files with 14 additions and 0 deletions
|
@ -100,6 +100,8 @@ pub trait CompleteCalendar : BaseCalendar {
|
||||||
async fn get_item_ids(&self) -> Result<HashSet<ItemId>, Box<dyn Error>>;
|
async fn get_item_ids(&self) -> Result<HashSet<ItemId>, Box<dyn Error>>;
|
||||||
|
|
||||||
/// Returns all items that this calendar contains
|
/// 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>>;
|
async fn get_items(&self) -> Result<HashMap<ItemId, &Item>, Box<dyn Error>>;
|
||||||
|
|
||||||
/// Returns a particular item
|
/// Returns a particular item
|
||||||
|
|
10
src/utils/comparison.rs
Normal file
10
src/utils/comparison.rs
Normal 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())
|
||||||
|
}
|
|
@ -13,6 +13,8 @@ use crate::calendar::CalendarId;
|
||||||
use crate::Item;
|
use crate::Item;
|
||||||
use crate::item::SyncStatus;
|
use crate::item::SyncStatus;
|
||||||
|
|
||||||
|
pub mod comparison;
|
||||||
|
|
||||||
/// Walks an XML tree and returns every element that has the given name
|
/// 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> {
|
pub fn find_elems<S: AsRef<str>>(root: &Element, searched_name: S) -> Vec<&Element> {
|
||||||
let searched_name = searched_name.as_ref();
|
let searched_name = searched_name.as_ref();
|
||||||
|
|
Loading…
Add table
Reference in a new issue