std_collection_traits 0.1.2

Abstraction of operations in std collection types
# Rust Collection Traits


Abstract common operations from `std` collections. For a working sample, check `tests/group_by.rs`

This crate is experimental. Better a RFC is needed to formally abstract operations (like Cpp Concept/Named requirements).

Collections in `std`:
* slice: `&[T]`, `&mut [T]`
* array: `[T; N]`
* sequence: `Vec<T>`, `VecDeque<T>`, `LinkedList<T>`
* set: `BTreeSet<T>`, `HashSet<T>`
* map: `BTreeMap<T>`, `HashMap<T>`
* misc: `BinaryHeap<T>`

General Categories:
* `Collection`: All collections, excluding associated ones.
  - `AllocatorAwareCollection`: Allocator-aware collections, currently there is only `Vec<T, A>`.
  - `CapacityAwareCollection`: Capacity-aware collections, those you can reserve, create with a given amount of capacity. E.g. `HashSet::with_capacity`
  - `ContiguousCollection`: Contiguous collections, where behaves like a contiguous region of memory. E.g. `Vec::as_slice`
  - `SequentialCollection`: Sequential collections, where you can traverse it in one direction, and modify at the end. E.g. `VecDeque::push_back`
  - `DoubleEndedCollection`: Double-ended collections, where you do sequential-like operations on both ends. E.g. `LinkedList<T>::pop_front`
  - `RandomAccessCollection`: Random access collections, where you can access by indices. E.g. `VecDeque<T>::get`
* `AssociatedCollection`
  - `AssociatedCapacityAwareCollection`: Capacity-aware associated collections.
  - `Set<S>`: Set-like collections, `HashSet<K, S>` and `BTreeSet<K>`
  - `OrderedSe<S>`: Ordered set-like collections, `BTreeSet<K>`
  - `Map<S>`: Map-like collections, `HashMap<K, V, S>` and `BTreeMap<K, V>`
  - `OrderedMap<S>`: Ordered map-like collections, `BTreeMap<K, V>`
* Other miscellaneous operations
  - `Retainable` or `AssocaitedRetainable`: Ability to retain specific elements.
  - `Contains`: Ability to test if an element is in sequence.
  - `DrainFull/DrainRange/{Associated}DrainFilter`: Ability to drain a specific amount of elements without drop the original collection.
  - `Range/RangeMut`: Ability to generate a view of original sequence.

## TODOs


* [x] Rewrite it based on `Mut/Own` marker instead of individual types
  * This requires some non-robust `unreached_unchecked` on default implementation.
* [x] Find a way to constrain generic associated iterator types
  * `ExactSizedIterator`
  * `TrustedRandomAccess`
  * `DoubleEndedIterator`
  * [ ] Still can't propagate requirements to uppermost traits
* [ ] Add more collection-like types, like `&str`, `String`
* [x] Rewrite all to associated types