1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
use std::hash::Hash;

/// Calculate partitions for an item
///
/// This trait allows us to express in the type system that for some `Item` we
/// are able to calculate a `Key` that identifies that item.
pub trait Partitioner {
    type Item;
    type Key: Clone + Eq + Hash;

    /// Partition the `Item` by calculating its `Key`
    ///
    /// The resulting key should ideally be unique for an `Item` or arrived at
    /// in such a way that if two distinct `Item` instances partition to the
    /// same key they are mergeable if put into the same collection by this key.
    fn partition(&self, item: &Self::Item) -> Self::Key;
}