forky_core/extensions/
vec.rs1use crate::prelude::*;
2use extend::ext;
3use std::fmt::Display;
4use std::slice::SliceIndex;
5
6#[ext(name = VecXOrd)]
7pub impl<T: Ord> Vec<T> {
8 fn sorted(mut self) -> Self {
9 self.sort();
10 self
11 }
12}
13#[ext(name = VecXDisplay)]
14pub impl<T: Display> Vec<T> {
15 fn to_string(&self) -> String {
16 self.iter().fold(String::new(), |mut acc, curr| {
17 acc.push_string(&format!("{}", curr));
18 acc
19 })
20 }
21}
22#[ext(name = VecXDefault)]
23pub impl<T: Default + Clone> Vec<T> {
24 fn from_len(len: usize) -> Self { vec![T::default(); len] }
25}
26#[ext(name = VecXInto)]
27pub impl<T: Into<U>, U> Vec<T> {
28 fn into_vec(self) -> Vec<U> { self.into_iter().map(|x| x.into()).collect() }
29}
30
31
32#[ext(name = VecX)]
33pub impl<T> Vec<T> {
34 fn _first(&self) -> &T { self.first().unwrap() }
35 fn _pop(&mut self) -> T { self.pop().unwrap() }
36 fn _get<T2>(&self, index: T2) -> &<T2 as SliceIndex<[T]>>::Output
37 where
38 T2: SliceIndex<[T]>,
39 {
40 self.get(index).unwrap()
41 }
42 fn _get_mut<T2>(&mut self, index: T2) -> &<T2 as SliceIndex<[T]>>::Output
43 where
44 T2: SliceIndex<[T]>,
45 {
46 self.get_mut(index).unwrap()
47 }
48 fn remove_first_element(&mut self, element: T) -> bool
49 where
50 T: PartialEq,
51 {
52 let index = self.iter().position(|x| *x == element);
53 if let Some(index) = index {
54 self.remove(index);
55 true
56 } else {
57 false
58 }
59 }
60}