windjammer_ui/components/generated/
filetree.rs

1#![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}