concision_core/traits/misc/
sequential.rs1use num::traits::FromPrimitive;
6
7pub trait Sequence<T> {
10 const LENGTH: Option<usize> = None;
11
12 fn len(&self) -> usize;
13
14 fn is_empty(&self) -> bool {
15 self.len() == 0
16 }
17
18 fn elems(&self) -> T
19 where
20 T: FromPrimitive,
21 {
22 T::from_usize(self.len()).unwrap()
23 }
24}
25
26pub trait SequenceIter {
27 type Item;
28
29 fn len(&self) -> usize;
30}
31impl<T, I> SequenceIter for I
35where
36 I: ExactSizeIterator<Item = T>,
37{
38 type Item = T;
39
40 fn len(&self) -> usize {
41 self.len()
42 }
43}
44
45impl<T> Sequence<T> for Vec<T> {
46 fn len(&self) -> usize {
47 self.len()
48 }
49}
50
51impl<T> Sequence<T> for [T] {
52 fn len(&self) -> usize {
53 self.len()
54 }
55}
56
57impl<T, const N: usize> Sequence<T> for [T; N] {
58 const LENGTH: Option<usize> = Some(N);
59
60 fn len(&self) -> usize {
61 N
62 }
63}