Skip to main content

oak_html/ast/
mod.rs

1use core::range::Range;
2use serde::{Deserialize, Serialize};
3
4/// HTML 属性
5#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
6pub struct Attribute {
7    pub name: String,
8    pub value: Option<String>,
9    #[serde(with = "oak_core::serde_range")]
10    pub span: Range<usize>,
11}
12
13/// HTML 节点
14#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
15pub enum HtmlNode {
16    Element(Element),
17    Text(Text),
18    Comment(String),
19}
20
21/// HTML 元素
22#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
23pub struct Element {
24    pub tag_name: String,
25    pub attributes: Vec<Attribute>,
26    pub children: Vec<HtmlNode>,
27    #[serde(with = "oak_core::serde_range")]
28    pub span: Range<usize>,
29}
30
31/// HTML 文本
32#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
33pub struct Text {
34    pub content: String,
35    #[serde(with = "oak_core::serde_range")]
36    pub span: Range<usize>,
37}
38
39/// HTML 文档根节点
40#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
41pub struct HtmlDocument {
42    pub nodes: Vec<HtmlNode>,
43}