11// inpired by https://github.com/causal-agent/scraper
22
33use core:: fmt;
4- use std:: { cell:: OnceCell , collections:: HashMap , ops:: Deref , slice:: Iter as SliceIter , collections:: hash_map:: Iter as HashMapIter } ;
4+ use std:: {
5+ cell:: OnceCell , collections:: hash_map:: Iter as HashMapIter , collections:: HashMap , ops:: Deref ,
6+ slice:: Iter as SliceIter ,
7+ } ;
58
6- use html5ever:: { QualName , tendril:: StrTendril , LocalName , Attribute } ;
9+ use html5ever:: { tendril:: StrTendril , Attribute , LocalName , QualName } ;
710use selectors:: attr:: CaseSensitivity ;
811
912use crate :: visitor:: SpanKey ;
1013
1114pub struct Classes < ' a > {
12- inner : SliceIter < ' a , LocalName >
15+ inner : SliceIter < ' a , LocalName > ,
1316}
1417
1518impl < ' a > Iterator for Classes < ' a > {
@@ -23,7 +26,7 @@ pub type AttributesIter<'a> = HashMapIter<'a, QualName, StrTendril>;
2326
2427#[ derive( Debug , Clone ) ]
2528pub struct Attrs < ' a > {
26- inner : AttributesIter < ' a >
29+ inner : AttributesIter < ' a > ,
2730}
2831
2932impl < ' a > Iterator for Attrs < ' a > {
@@ -41,7 +44,7 @@ pub struct Element {
4144 pub attrs : Attributes ,
4245 pub span : SpanKey ,
4346 id : OnceCell < Option < StrTendril > > ,
44- classes : OnceCell < Vec < LocalName > >
47+ classes : OnceCell < Vec < LocalName > > ,
4548}
4649
4750impl Element {
@@ -55,7 +58,7 @@ impl Element {
5558 span,
5659 attrs,
5760 id : OnceCell :: new ( ) ,
58- classes : OnceCell :: new ( )
61+ classes : OnceCell :: new ( ) ,
5962 }
6063 }
6164
@@ -64,22 +67,28 @@ impl Element {
6467 }
6568
6669 pub fn id ( & self ) -> Option < & str > {
67- self . id . get_or_init ( || {
68- self . attrs
69- . iter ( )
70- . find ( |( name, _ ) | name. local . as_ref ( ) == "id" )
71- . map ( |( _, value) | value. clone ( ) )
72- } ) . as_deref ( )
70+ self
71+ . id
72+ . get_or_init ( || {
73+ self
74+ . attrs
75+ . iter ( )
76+ . find ( |( name, _) | name. local . as_ref ( ) == "id" )
77+ . map ( |( _, value) | value. clone ( ) )
78+ } )
79+ . as_deref ( )
7380 }
7481
7582 pub fn has_class ( & self , class : & str , case_sensitive : CaseSensitivity ) -> bool {
76- self . classes ( )
83+ self
84+ . classes ( )
7785 . any ( |class_name| case_sensitive. eq ( class. as_bytes ( ) , class_name. as_bytes ( ) ) )
7886 }
7987
8088 pub fn classes ( & self ) -> Classes {
8189 let classes = self . classes . get_or_init ( || {
82- let mut classes: Vec < LocalName > = self . attrs
90+ let mut classes: Vec < LocalName > = self
91+ . attrs
8392 . iter ( )
8493 . filter ( |( name, _) | name. local . as_ref ( ) == "className" )
8594 . flat_map ( |( _, value) | value. split_whitespace ( ) . map ( LocalName :: from) )
@@ -89,11 +98,15 @@ impl Element {
8998 classes
9099 } ) ;
91100
92- Classes { inner : classes. iter ( ) }
101+ Classes {
102+ inner : classes. iter ( ) ,
103+ }
93104 }
94105
95106 pub fn attrs ( & self ) -> Attrs {
96- Attrs { inner : self . attrs . iter ( ) }
107+ Attrs {
108+ inner : self . attrs . iter ( ) ,
109+ }
97110 }
98111}
99112
0 commit comments