blitz_html/
html_document.rs1use std::ops::{Deref, DerefMut};
2
3use crate::DocumentHtmlParser;
4
5use blitz_dom::{BaseDocument, DEFAULT_CSS, Document, DocumentConfig};
6
7pub struct HtmlDocument {
8 inner: BaseDocument,
9}
10
11impl Deref for HtmlDocument {
13 type Target = BaseDocument;
14 fn deref(&self) -> &BaseDocument {
15 &self.inner
16 }
17}
18impl DerefMut for HtmlDocument {
19 fn deref_mut(&mut self) -> &mut Self::Target {
20 &mut self.inner
21 }
22}
23impl From<HtmlDocument> for BaseDocument {
24 fn from(doc: HtmlDocument) -> BaseDocument {
25 doc.inner
26 }
27}
28impl Document for HtmlDocument {
29 fn as_any_mut(&mut self) -> &mut dyn std::any::Any {
30 self
31 }
32}
33
34impl HtmlDocument {
35 pub fn from_html(html: &str, mut config: DocumentConfig) -> Self {
37 if let Some(ss) = &mut config.ua_stylesheets {
38 if !ss.iter().any(|s| s == DEFAULT_CSS) {
39 ss.push(String::from(DEFAULT_CSS));
40 }
41 }
42 let mut doc = BaseDocument::new(config);
43 let mut mutr = doc.mutate();
44 DocumentHtmlParser::parse_into_mutator(&mut mutr, html);
45 drop(mutr);
46 HtmlDocument { inner: doc }
47 }
48
49 pub fn into_inner(self) -> BaseDocument {
51 self.into()
52 }
53}