1use std::any::Any;
2
3use crate::types::array::ArrayType;
4
5use super::base::DataType;
6
7#[derive(Clone)]
8pub struct TextType;
9
10impl DataType for TextType {
11 fn literal(&self) -> String {
12 "Text".to_string()
13 }
14
15 fn equals(&self, other: &Box<dyn DataType>) -> bool {
16 other.is_any() || other.is_text() || other.is_variant_with(|t| t.is_text())
17 }
18
19 fn as_any(&self) -> &dyn Any {
20 self
21 }
22
23 fn can_perform_eq_op_with(&self) -> Vec<Box<dyn DataType>> {
24 vec![Box::new(TextType)]
25 }
26
27 fn can_perform_group_eq_op_with(&self) -> Vec<Box<dyn DataType>> {
28 vec![Box::new(ArrayType::new(Box::new(TextType)))]
29 }
30
31 fn can_perform_bang_eq_op_with(&self) -> Vec<Box<dyn DataType>> {
32 vec![Box::new(TextType)]
33 }
34
35 fn can_perform_group_bang_eq_op_with(&self) -> Vec<Box<dyn DataType>> {
36 vec![Box::new(ArrayType::new(Box::new(TextType)))]
37 }
38
39 fn can_perform_gt_op_with(&self) -> Vec<Box<dyn DataType>> {
40 vec![Box::new(TextType)]
41 }
42
43 fn can_perform_group_gt_op_with(&self) -> Vec<Box<dyn DataType>> {
44 vec![Box::new(ArrayType::new(Box::new(TextType)))]
45 }
46
47 fn can_perform_gte_op_with(&self) -> Vec<Box<dyn DataType>> {
48 vec![Box::new(TextType)]
49 }
50
51 fn can_perform_group_gte_op_with(&self) -> Vec<Box<dyn DataType>> {
52 vec![Box::new(ArrayType::new(Box::new(TextType)))]
53 }
54
55 fn can_perform_lt_op_with(&self) -> Vec<Box<dyn DataType>> {
56 vec![Box::new(TextType)]
57 }
58
59 fn can_perform_group_lt_op_with(&self) -> Vec<Box<dyn DataType>> {
60 vec![Box::new(ArrayType::new(Box::new(TextType)))]
61 }
62
63 fn can_perform_lte_op_with(&self) -> Vec<Box<dyn DataType>> {
64 vec![Box::new(TextType)]
65 }
66
67 fn can_perform_group_lte_op_with(&self) -> Vec<Box<dyn DataType>> {
68 vec![Box::new(ArrayType::new(Box::new(TextType)))]
69 }
70
71 fn can_perform_like_op_with(&self) -> Vec<Box<dyn DataType>> {
72 vec![Box::new(TextType)]
73 }
74
75 fn can_perform_glob_op_with(&self) -> Vec<Box<dyn DataType>> {
76 vec![Box::new(TextType)]
77 }
78
79 fn can_perform_regexp_op_with(&self) -> Vec<Box<dyn DataType>> {
80 vec![Box::new(TextType)]
81 }
82}