clean_dev_dirs/config/
filter.rs1use clap::ValueEnum;
8
9#[derive(Clone, Copy, PartialEq, Eq, Debug, ValueEnum, Default)]
14pub enum ProjectFilter {
15 #[default]
17 All,
18
19 Rust,
21
22 Node,
24
25 Python,
27
28 Go,
30
31 Java,
33
34 Cpp,
36
37 Swift,
39
40 #[value(name = "dotnet")]
42 DotNet,
43}
44
45#[derive(Clone)]
50pub struct FilterOptions {
51 pub keep_size: String,
53
54 pub keep_days: u32,
56}
57
58#[derive(Clone, Copy, PartialEq, Eq, Debug, ValueEnum)]
67pub enum SortCriteria {
68 Size,
70
71 Age,
73
74 Name,
76
77 Type,
79}
80
81#[derive(Clone)]
86pub struct SortOptions {
87 pub criteria: Option<SortCriteria>,
89
90 pub reverse: bool,
92}
93
94#[cfg(test)]
95mod tests {
96 use super::*;
97
98 #[test]
99 fn test_project_filter_equality() {
100 assert_eq!(ProjectFilter::All, ProjectFilter::All);
101 assert_eq!(ProjectFilter::Rust, ProjectFilter::Rust);
102 assert_eq!(ProjectFilter::Node, ProjectFilter::Node);
103 assert_eq!(ProjectFilter::Python, ProjectFilter::Python);
104 assert_eq!(ProjectFilter::Go, ProjectFilter::Go);
105 assert_eq!(ProjectFilter::Java, ProjectFilter::Java);
106 assert_eq!(ProjectFilter::Cpp, ProjectFilter::Cpp);
107 assert_eq!(ProjectFilter::Swift, ProjectFilter::Swift);
108 assert_eq!(ProjectFilter::DotNet, ProjectFilter::DotNet);
109
110 assert_ne!(ProjectFilter::All, ProjectFilter::Rust);
111 assert_ne!(ProjectFilter::Rust, ProjectFilter::Node);
112 assert_ne!(ProjectFilter::Node, ProjectFilter::Python);
113 assert_ne!(ProjectFilter::Python, ProjectFilter::Go);
114 assert_ne!(ProjectFilter::Go, ProjectFilter::Java);
115 assert_ne!(ProjectFilter::Java, ProjectFilter::Cpp);
116 assert_ne!(ProjectFilter::Cpp, ProjectFilter::Swift);
117 assert_ne!(ProjectFilter::Swift, ProjectFilter::DotNet);
118 }
119
120 #[test]
121 fn test_project_filter_copy() {
122 let original = ProjectFilter::Rust;
123 let copied = original;
124
125 assert_eq!(original, copied);
126 }
127
128 #[test]
129 fn test_project_filter_default() {
130 let default_filter = ProjectFilter::default();
131 assert_eq!(default_filter, ProjectFilter::All);
132 }
133
134 #[test]
135 fn test_filter_options_creation() {
136 let filter_opts = FilterOptions {
137 keep_size: "100MB".to_string(),
138 keep_days: 30,
139 };
140
141 assert_eq!(filter_opts.keep_size, "100MB");
142 assert_eq!(filter_opts.keep_days, 30);
143 }
144
145 #[test]
146 fn test_filter_options_clone() {
147 let original = FilterOptions {
148 keep_size: "100MB".to_string(),
149 keep_days: 30,
150 };
151 let cloned = original.clone();
152
153 assert_eq!(original.keep_size, cloned.keep_size);
154 assert_eq!(original.keep_days, cloned.keep_days);
155 }
156
157 #[test]
158 fn test_sort_criteria_equality() {
159 assert_eq!(SortCriteria::Size, SortCriteria::Size);
160 assert_eq!(SortCriteria::Age, SortCriteria::Age);
161 assert_eq!(SortCriteria::Name, SortCriteria::Name);
162 assert_eq!(SortCriteria::Type, SortCriteria::Type);
163
164 assert_ne!(SortCriteria::Size, SortCriteria::Age);
165 assert_ne!(SortCriteria::Name, SortCriteria::Type);
166 }
167
168 #[test]
169 fn test_sort_criteria_copy() {
170 let original = SortCriteria::Size;
171 let copied = original;
172 assert_eq!(original, copied);
173 }
174
175 #[test]
176 fn test_sort_options_creation() {
177 let sort_opts = SortOptions {
178 criteria: Some(SortCriteria::Size),
179 reverse: false,
180 };
181 assert_eq!(sort_opts.criteria, Some(SortCriteria::Size));
182 assert!(!sort_opts.reverse);
183 }
184
185 #[test]
186 fn test_sort_options_none_criteria() {
187 let sort_opts = SortOptions {
188 criteria: None,
189 reverse: false,
190 };
191 assert!(sort_opts.criteria.is_none());
192 }
193
194 #[test]
195 fn test_sort_options_clone() {
196 let original = SortOptions {
197 criteria: Some(SortCriteria::Age),
198 reverse: true,
199 };
200 let cloned = original.clone();
201
202 assert_eq!(original.criteria, cloned.criteria);
203 assert_eq!(original.reverse, cloned.reverse);
204 }
205}