serde_valid/traits/
is_unique.rs

1use itertools::Itertools;
2
3pub trait IsUnique {
4    fn is_unique(&self) -> bool;
5}
6
7impl<T> IsUnique for [T]
8where
9    T: std::cmp::Eq + std::hash::Hash,
10{
11    fn is_unique(&self) -> bool {
12        let len = self.len();
13        let unique = self.iter().unique();
14        let (lower, upper) = unique.size_hint();
15        if let Some(upper) = upper {
16            if lower == len && upper == len {
17                return true;
18            }
19        }
20        unique.count() == len
21    }
22}