forky_core/extensions/
vec.rs

1use 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}