1pub trait ArrayStrEqual {
2 fn equal<S>(&self, arr: &[S]) -> bool
3 where
4 S: AsRef<str>;
5}
6
7impl<const N: usize> ArrayStrEqual for [&str; N] {
8 fn equal<S>(&self, arr: &[S]) -> bool
9 where
10 S: AsRef<str>,
11 {
12 let n = self.len();
13 if n != arr.len() {
14 return false;
15 }
16 for i in 0..n {
17 let a = self[i];
18 let b = &arr[i];
19 if a != b.as_ref() {
20 return false;
21 }
22 }
23 true
24 }
25}
26
27pub trait ArrayEqual<T>
28where
29 T: PartialEq,
30{
31 fn equal<S>(&self, arr: &[S]) -> bool
32 where
33 S: AsRef<T>;
34}
35
36impl<const N: usize, T: PartialEq> ArrayEqual<T> for [T; N] {
37 fn equal<S>(&self, arr: &[S]) -> bool
38 where
39 S: AsRef<T>,
40 {
41 let n = self.len();
42 if n != arr.len() {
43 return false;
44 }
45 for i in 0..n {
46 let a = &self[i];
47 let b = arr[i].as_ref();
48 if a != b {
49 return false;
50 }
51 }
52 true
53 }
54}
55
56pub fn array_str_equal(arr_str: &[&str], arr_string: &[&str]) -> bool {
57 arr_str.iter().all(|e| arr_string.contains(e))
58}