#collections #traits

cl-traits

Provides traits that describe collections

17 releases (6 stable)

✓ Uses Rust 2018 edition

new 1.4.1 Mar 25, 2020
1.4.0 Mar 23, 2020
0.6.3 Mar 17, 2020
0.5.1 Mar 11, 2020
0.0.1 Mar 8, 2019

#74 in Development tools

Download history 6/week @ 2019-12-02 31/week @ 2019-12-09 3/week @ 2019-12-23 18/week @ 2020-01-13 3/week @ 2020-01-20 2/week @ 2020-02-03 3/week @ 2020-02-10 6/week @ 2020-02-17 7/week @ 2020-02-24 53/week @ 2020-03-02 106/week @ 2020-03-09 257/week @ 2020-03-16

196 downloads per month
Used in ndsparse

Apache-2.0

28KB
926 lines

Collection Traits (cl-traits)

CI crates.io Documentation License Rustc

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

~0–285KB