Skip to main content

oxilean_std/hashset/
oxihashset_type.rs

1//! Auto-generated module
2//!
3//! 🤖 Generated with [SplitRS](https://github.com/cool-japan/splitrs)
4
5use super::functions::*;
6use std::collections::HashSet as StdHashSet;
7use std::fmt;
8use std::hash::Hash;
9
10/// A wrapper around `std::collections::HashSet` with an extended API.
11///
12/// `OxiHashSet<T>` provides functional-style operations (map, filter, fold)
13/// alongside the standard set operations (union, intersection, difference).
14#[derive(Clone, Debug, PartialEq, Eq)]
15pub struct OxiHashSet<T>
16where
17    T: Eq + Hash + Clone,
18{
19    pub(super) inner: StdHashSet<T>,
20}
21impl<T: Eq + Hash + Clone + Ord> OxiHashSet<T> {
22    /// Return elements sorted in ascending order.
23    pub fn sorted_vec(&self) -> Vec<T> {
24        let mut v = self.to_vec();
25        v.sort();
26        v
27    }
28    /// Return the minimum element (requires `Ord`).
29    pub fn min(&self) -> Option<&T> {
30        self.inner.iter().min()
31    }
32    /// Return the maximum element (requires `Ord`).
33    pub fn max(&self) -> Option<&T> {
34        self.inner.iter().max()
35    }
36}
37impl<T: Eq + Hash + Clone + std::fmt::Debug> OxiHashSet<T> {
38    /// Return a sorted vector of elements (requires Ord on T).
39    pub fn to_sorted_vec(&self) -> Vec<T>
40    where
41        T: Ord,
42    {
43        let mut v: Vec<T> = self.inner.iter().cloned().collect();
44        v.sort();
45        v
46    }
47}