common/generator/
file_list_builder.rs1use crate::entities::{File, FileNature, FileStatus};
2
3pub struct FileListBuilder {
4 files: Vec<File>,
5}
6
7impl FileListBuilder {
8 pub fn new() -> Self {
9 Self { files: Vec::new() }
10 }
11
12 pub fn add(
15 &mut self,
16 name: impl Into<String>,
17 relative_path: impl Into<String>,
18 group: impl Into<String>,
19 template_name: impl Into<String>,
20 nature: FileNature,
21 ) -> &mut File {
22 let now = chrono::Utc::now();
23 self.files.push(File {
24 id: 0,
25 created_at: now,
26 updated_at: now,
27 name: name.into(),
28 relative_path: relative_path.into(),
29 group: group.into(),
30 template_name: template_name.into(),
31 generated_code: None,
32 status: FileStatus::Unknown,
33 nature,
34 feature: None,
35 all_features: false,
36 entity: None,
37 all_entities: false,
38 use_case: None,
39 all_use_cases: false,
40 field: None,
41 });
42 self.files.last_mut().unwrap()
43 }
44
45 pub fn add_batch(
48 &mut self,
49 relative_path: &str,
50 group: &str,
51 nature: FileNature,
52 entries: &[(&str, &str)],
53 ) {
54 for &(name, template_name) in entries {
55 self.add(name, relative_path, group, template_name, nature.clone());
56 }
57 }
58
59 pub fn build(self) -> Vec<File> {
61 self.files
62 }
63
64 pub fn build_filtered(self, predicate: impl Fn(&File) -> bool) -> Vec<File> {
66 self.files.into_iter().filter(predicate).collect()
67 }
68}
69
70impl Default for FileListBuilder {
71 fn default() -> Self {
72 Self::new()
73 }
74}