cl_aux/traits/
dyn_contig_coll.rs

1use crate::{Capacity, Clear, Push, Truncate, WithCapacity};
2use core::ops::{Deref, DerefMut};
3
4/// Dynamic Contiguous Collection
5///
6/// A growable vector-like abstraction for generic elements.
7///
8#[cfg_attr(feature = "alloc", doc = "```rust")]
9#[cfg_attr(not(feature = "alloc"), doc = "```ignore")]
10/// fn stuff<T>(dcc: &mut T)
11/// where
12///     T: cl_aux::DynContigColl<cl_aux::Error, u8>
13/// {
14///     dcc.clear();
15///     dcc.extend([4, 5, 6]).unwrap();
16///     dcc.truncate(1);
17/// }
18///
19/// let mut dcc = vec![0, 1, 2, 3];
20/// stuff(&mut dcc);
21/// assert_eq!(dcc, &[4]);
22/// ```
23pub trait DynContigColl<E, T>:
24  AsRef<[T]>
25  + Clear
26  + Capacity
27  + Default
28  + Deref<Target = [T]>
29  + DerefMut
30  + crate::Extend<T, Error = E>
31  + Push<T, Error = E>
32  + Truncate<Input = usize>
33  + WithCapacity<Error = E, Input = usize>
34{
35}
36
37impl<E, T, U> DynContigColl<E, T> for U where
38  U: AsRef<[T]>
39    + Clear
40    + Capacity
41    + Default
42    + Deref<Target = [T]>
43    + DerefMut
44    + crate::Extend<T, Error = E>
45    + Push<T, Error = E>
46    + Truncate<Input = usize>
47    + WithCapacity<Error = E, Input = usize>
48{
49}