diff options
author | Aaditya Dhruv <[email protected]> | 2025-06-05 16:51:33 -0500 |
---|---|---|
committer | Aaditya Dhruv <[email protected]> | 2025-06-05 16:51:33 -0500 |
commit | 46d22e77d458b1e5cd9a9b17df67c63849574a95 (patch) | |
tree | 9f3b6bcf132fbf17078f11332a3041662ab1b651 /src/types |
Barebones rendering framework
Diffstat (limited to 'src/types')
-rw-r--r-- | src/types/elements.rs | 125 | ||||
-rw-r--r-- | src/types/mod.rs | 1 |
2 files changed, 126 insertions, 0 deletions
diff --git a/src/types/elements.rs b/src/types/elements.rs new file mode 100644 index 0000000..0f766e4 --- /dev/null +++ b/src/types/elements.rs @@ -0,0 +1,125 @@ +pub trait Renderable { + fn render(&self) -> String; +} + +//Body +pub struct Body { + items: Vec<Box<dyn Renderable>>, +} + +impl Body { + pub fn new() -> Self { + let _vec = Vec::<Box<dyn Renderable>>::new(); + Body { items: _vec } + } +} +impl Renderable for Body { + fn render(&self) -> String { + let mut master = String::new(); + let start_tag = "<body>"; + let end_tag = "</body>"; + + master.push_str(&start_tag); + for child in &self.items { + let text = child.render(); + master.push_str(text.as_str()); + } + master.push_str(&end_tag); + master + } +} + +//Paragraph +pub struct Paragraph { + text: String, +} + +impl Paragraph { + pub fn new() -> Self { + Paragraph { text: String::new() } + } +} +impl Renderable for Paragraph { + fn render(&self) -> String { + let mut master = String::new(); + let start_tag = "<p>"; + let end_tag = "</p>"; + + master.push_str(&start_tag); + master.push_str(&self.text); + master.push_str(&end_tag); + master + } +} +//Head +pub struct Head { + text: String, +} + +impl Head { + pub fn new() -> Self { + Head { text: String::new() } + } +} +impl Renderable for Head { + fn render(&self) -> String { + let mut master = String::new(); + let start_tag = "<head>"; + let end_tag = "</head>"; + + master.push_str(&start_tag); + master.push_str(&self.text); + master.push_str(&end_tag); + master + } +} +// Heading +pub struct Heading { + text: String, + level: u8, +} + +impl Heading { + pub fn new() -> Self { + Heading { text: String::new(), level: 1 } + } +} +impl Renderable for Heading { + fn render(&self) -> String { + let mut master = String::new(); + let start_tag = format!("<h{}>", self.level); + let end_tag = format!("</h{}>", self.level); + + master.push_str(&start_tag); + master.push_str(&self.text); + master.push_str(&end_tag); + master + } +} + +// Heading +pub struct HTML { + items: Vec<Box<dyn Renderable>>, +} + +impl HTML { + pub fn new() -> Self { + let _vec = Vec::<Box<dyn Renderable>>::new(); + HTML { items: _vec } + } +} +impl Renderable for HTML { + fn render(&self) -> String { + let mut master = String::new(); + let start_tag = "<html>"; + let end_tag = "</html>"; + + master.push_str(&start_tag); + for child in &self.items { + let text = child.render(); + master.push_str(text.as_str()); + } + master.push_str(&end_tag); + master + } +} diff --git a/src/types/mod.rs b/src/types/mod.rs new file mode 100644 index 0000000..2da6a8c --- /dev/null +++ b/src/types/mod.rs @@ -0,0 +1 @@ +pub mod elements; |