luna_orm_trait/
utils.rs

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}