Figured out how to make using the enum a lot less annoying!

This commit is contained in:
Gabriel 2025-07-11 10:00:21 -04:00
parent cb2f93c4d0
commit 6a4170b4c8
2 changed files with 28 additions and 59 deletions

View file

@ -1,46 +0,0 @@
#[derive(Debug)]
pub enum Item {
Ignore,
Text(String),
//text, links, formatting are all markdown
//arguably, for better control it will be best to turn markdown into its own set of items
Image(String),
Gif(String), //can't detect gif from image, has to be handled on front-end
Svg(String),// wont' support for a while I think.
Video(Video),
Audio(Audio),
Source(String),
BoldedText(Vec<Item>),
EmphasisText(Vec<Item>),
UnorderedList(Vec<Item>),
OrderedList(Vec<Item>),
ListItem(Vec<Item>),
Paragraph(Vec<Item>),//gotta replace this with specific items, needlessly flexible
Link(Link),
}
#[derive(Debug)]
pub struct Link{
pub href: String,
pub children: Vec<Item>
}
#[derive(Debug)]
pub struct Video{
pub children: Vec<Item>
//might have to do fancy things to detect autoplay...
}
#[derive(Debug)]
pub struct Audio{
pub children: Vec<Item>
//might have to do fancy things to detect autoplay...
}
#[derive(Debug)]
pub enum ContainerTag{
P,
Div,
Button,//arguably redundant
Table,
}

View file

@ -1,11 +1,33 @@
use scraper::{ElementRef, Html, Node}; use scraper::{ElementRef, Html, Node};
pub mod elements;
use elements::*;
/* /*
The goal here is to flatten the DOM as much as possible. The goal here is to flatten the DOM as much as possible.
paragraphs with fancy formatting are turned into markdown, same with paragraphs with fancy formatting are turned into markdown, same with
*/ */
#[derive(Debug)]
pub enum Item {
Ignore,
Text(String),
//text, links, formatting are all markdown
//arguably, for better control it will be best to turn markdown into its own set of items
Image(String),
Gif(String), //can't detect gif from image, has to be handled on front-end
Svg(String),// wont' support for a while I think.
Video(Vec<Item>),
Audio(Vec<Item>),
Source(String),
BoldedText(Vec<Item>),
EmphasisText(Vec<Item>),
UnorderedList(Vec<Item>),
OrderedList(Vec<Item>),
ListItem(Vec<Item>),
Paragraph(Vec<Item>),//gotta replace this with specific items, needlessly flexible
Link(String,Vec<Item>),
}
pub fn itemize_content(content: &str) -> Vec<Item> { pub fn itemize_content(content: &str) -> Vec<Item> {
let frag = Html::parse_fragment(content); let frag = Html::parse_fragment(content);
frag.root_element().children().map(|e|{ frag.root_element().children().map(|e|{
@ -37,12 +59,9 @@ fn parse_items(n: ego_tree::NodeRef<'_,Node>) -> Item{
Some(link) => {link} Some(link) => {link}
None => {""} None => {""}
}; };
return Item::Link( return Item::Link(href.to_owned(),get_children(&el))
Link{
href: href.to_owned(),
children: get_children(&el)
}
)
} }
"img" => { "img" => {
match el.attr("src") { match el.attr("src") {
@ -61,11 +80,7 @@ fn parse_items(n: ego_tree::NodeRef<'_,Node>) -> Item{
} }
} }
"video" => { "video" => {
return Item::Video( return Item::Video(get_children(&el))
Video{
children: get_children(&el)
}
)
} }
"ol" => { "ol" => {
return Item::OrderedList(get_children(&el)) return Item::OrderedList(get_children(&el))