windjammer_ui/components/generated/
filetree.rs1#![allow(clippy::all)]
2#![allow(noop_method_call)]
3use std::fmt::Write;
4
5use super::traits::Renderable;
6
7pub struct FileNode {
8 name: String,
9 is_directory: bool,
10 children: Vec<FileNode>,
11 expanded: bool,
12}
13
14impl FileNode {
15 #[inline]
16 pub fn new(name: String, is_directory: bool) -> FileNode {
17 FileNode {
18 name,
19 is_directory,
20 children: Vec::new(),
21 expanded: false,
22 }
23 }
24 #[inline]
25 pub fn child(mut self, node: FileNode) -> FileNode {
26 self.children.push(node);
27 self
28 }
29 #[inline]
30 pub fn expanded(mut self, expanded: bool) -> FileNode {
31 self.expanded = expanded;
32 self
33 }
34 #[inline]
35 pub fn render(&self, depth: i32) -> String {
36 let indent = " ".repeat(depth as usize);
37 let icon = {
38 if self.is_directory {
39 if self.expanded {
40 "📂"
41 } else {
42 "📁"
43 }
44 } else {
45 "📄"
46 }
47 };
48 let mut html = {
49 let mut __s = String::with_capacity(64);
50 write!(
51 &mut __s,
52 "{}{} {}
53",
54 indent, icon, self.name
55 )
56 .unwrap();
57 __s
58 };
59 if self.is_directory && self.expanded {
60 let mut i = 0;
61 while i < self.children.len() {
62 let child = &self.children[i];
63 html = format!("{}{}", html, child.render(depth + 1));
64 i += 1;
65 }
66 }
67 html
68 }
69}
70
71pub struct FileTree {
72 root: FileNode,
73}
74
75impl FileTree {
76 #[inline]
77 pub fn new(root: FileNode) -> FileTree {
78 FileTree { root }
79 }
80}
81
82impl Renderable for FileTree {
83 #[inline]
84 fn render(self) -> String {
85 format!(
86 "<div class='wj-file-tree'>
87{}</div>",
88 self.root.render(0)
89 )
90 }
91}