sorted 0.2.0

Provides compile time guarantees for sorted sequences.
Documentation
use std::cmp::Ordering;
use super::{Collection, RetainsOrder, Sortable, SortedInsert, SortOrder, SearchableByOrder};

impl<T> Collection for Vec<T> {
    type Item = T;
}

impl<T> RetainsOrder for Vec<T> {}

impl<T> Sortable for Vec<T> {
    fn sort<F>(&mut self, f: F)
        where F: FnMut(&Self::Item, &Self::Item) -> Ordering
    {
        self.sort_by(f);
    }
}

impl<T, O> SearchableByOrder<O> for Vec<T>
    where O: SortOrder<T>
{
    fn search(&self, a: &T) -> Result<usize, usize> {
        self.binary_search_by(|b| O::cmp(b, a))
    }
}

impl<T, O> SortedInsert<O> for Vec<T>
    where O: SortOrder<T>,
          Self: Collection<Item = T> + SearchableByOrder<O>
{
    fn insert(&mut self, x: T) {
        let i = match self.search(&x) {
            Ok(i) => i,
            Err(i) => i,
        };
        self.insert(i, x);
    }
}