5 releases (1 stable)
1.0.0 | Apr 5, 2020 |
---|---|
0.4.1 | Mar 2, 2020 |
0.4.0 | Mar 2, 2020 |
0.3.0 | Jul 16, 2019 |
0.0.1 | Mar 12, 2019 |
#961 in #derive
10KB
218 lines
Collection Traits (cl-traits)
Yet another library that generalizes collections. This is a best effort without GAT.
Many data structures have unique features that make it difficult or even impossible to create a single trait
that fits all. This crate tries to circumvent such behaviour by providing a single method for each trait
to achieve maximum flexibility and freedom.
Examples
use cl_traits::*;
struct SomeCustomVector(Vec<i32>, Vec<i32>);
impl Length for SomeCustomVector {
type Output = usize;
fn length(&self) -> Self::Output {
self.0.length() + self.1.length()
}
}
fn main() {
let v = SomeCustomVector(vec![1, 2], vec![3, 4, 5, 6]);
assert_eq!(v.length(), 6);
}
You can see more complete examples in the examples
directory.
Derives
Derives are somewhat limited because they aggregate every single attribute, threfore, should be used with caution.
use cl_traits::*;
use cl_traits_derive::*;
#[derive(WithLength)]
struct SomeCustomVector(Vec<i32>, Vec<i32>);
fn main() {
let v = SomeCustomVector(vec![1, 2], vec![3, 4, 5, 6]);
assert_eq!(v.length(), (2, 4));
}
Dependencies
~2MB
~47K SLoC