html_types/
attributes.rs

1mod value;
2use derive_more::Display;
3pub use value::Value;
4#[derive(Clone, Debug, Copy, PartialEq, Eq, Ord, PartialOrd, Display, Hash)]
5pub struct Attribute<'a>(&'a str);
6
7pub struct InvalidKeyError {}
8
9macro_rules! key {
10    ($name:ident $tag:expr) => {
11        pub const $name: Attribute<'static> = Attribute($tag);
12    };
13}
14
15impl<'a> Attribute<'a> {
16    /// Try to create a key from a string reference
17    pub fn create(attribute: &'a str) -> Result<Attribute<'a>, InvalidKeyError> {
18        match attribute.chars().all(char::is_alphabetic) {
19            false => Err(InvalidKeyError {}),
20            true => Ok(Attribute(attribute)),
21        }
22    }
23
24    key!(ACCEPT "accept");
25    key!(ACCEPT_CHARSET "accept-charset");
26    key!(ACCESSKEY "accesskey");
27    key!(ACTION "action");
28    key!(ALIGN "align");
29    key!(ALLOW "allow");
30    key!(ALT "alt");
31    key!(ASYNC "async");
32    key!(AUTOCAPITALIZE "autocapitalize");
33    key!(AUTOCOMPLETE "autocomplete");
34    key!(AUTOFOCUS "autofocus");
35    key!(AUTOPLAY "autoplay");
36    key!(BACKGROUND "background");
37    key!(BGCOLOR "bgcolor");
38    key!(BORDER "border");
39    key!(BUFFERED "buffered");
40    key!(CAPTURE "capture");
41    key!(CHALLENGE "challenge");
42    key!(CHARSET "charset");
43    key!(CHECKED "checked");
44    key!(CITE "cite");
45    key!(CLASS "class");
46    key!(CODE "code");
47    key!(CODEBASE "codebase");
48    key!(COLOR "color");
49    key!(COLS "cols");
50    key!(COLSPAN "colspan");
51    key!(CONTENT "content");
52    key!(CONTENTEDITABLE "contenteditable");
53    key!(CONTEXTMENU "contextmenu");
54    key!(CONTROLS "controls");
55    key!(COORDS "coords");
56    key!(CROSSORIGIN "crossorigin");
57    key!(CSP "csp");
58    key!(DATA "data");
59    key!(DATETIME "datetime");
60    key!(DECODING "decoding");
61    key!(DEFAULT "default");
62    key!(DEFER "defer");
63    key!(DIR "dir");
64    key!(DIRNAME "dirname");
65    key!(DISABLED "disabled");
66    key!(DOWNLOAD "download");
67    key!(DRAGGABLE "draggable");
68    key!(DROPZONE "dropzone");
69    key!(ENCTYPE "enctype");
70    key!(ENTERKEYHINT "enterkeyhint");
71    key!(FOR "for");
72    key!(FORM "form");
73    key!(FORMACTION "formaction");
74    key!(FORMENCTYPE "formenctype");
75    key!(FORMMETHOD "formmethod");
76    key!(FORMNOVALIDATE "formnovalidate");
77    key!(FORMTARGET "formtarget");
78    key!(HEADERS "headers");
79    key!(HEIGHT "height");
80    key!(HIDDEN "hidden");
81    key!(HIGH "high");
82    key!(HREF "href");
83    key!(HREFLANG "hreflang");
84    key!(HTTP_EQUIV "http-equiv");
85    key!(ICON "icon");
86    key!(ID "id");
87    key!(IMPORTANCE "importance");
88    key!(INTEGRITY "integrity");
89    key!(INTRINSICSIZE "intrinsicsize");
90    key!(INPUTMODE "inputmode");
91    key!(ISMAP "ismap");
92    key!(ITEMPROP "itemprop");
93    key!(KEYTYPE "keytype");
94    key!(KIND "kind");
95    key!(LABEL "label");
96    key!(LANG "lang");
97    key!(LANGUAGE "language");
98    key!(LOADING "loading");
99    key!(LIST "list");
100    key!(LOOP "loop");
101    key!(LOW "low");
102    key!(MANIFEST "manifest");
103    key!(MAX "max");
104    key!(MAXLENGTH "maxlength");
105    key!(MINLENGTH "minlength");
106    key!(MEDIA "media");
107    key!(METHOD "method");
108    key!(MIN "min");
109    key!(MULTIPLE "multiple");
110    key!(MUTED "muted");
111    key!(NAME "name");
112    key!(NOVALIDATE "novalidate");
113    key!(OPEN "open");
114    key!(OPTIMUM "optimum");
115    key!(PATTERN "pattern");
116    key!(PING "ping");
117    key!(PLACEHOLDER "placeholder");
118    key!(POSTER "poster");
119    key!(PRELOAD "preload");
120    key!(RADIOGROUP "radiogroup");
121    key!(READONLY "readonly");
122    key!(REFERRERPOLICY "referrerpolicy");
123    key!(REL "rel");
124    key!(REQUIRED "required");
125    key!(REVERSED "ol");
126    key!(ROWS "rows");
127    key!(ROWSPAN "rowspan");
128    key!(SANDBOX "sandbox");
129    key!(SCOPE "scope");
130    key!(SCOPED "scoped");
131    key!(SELECTED "selected");
132    key!(SHAPE "shape");
133    key!(SIZE "size");
134    key!(SIZES "sizes");
135    key!(SLOT "slot");
136    key!(SPAN "span");
137    key!(SPELLCHECK "spellcheck");
138    key!(SRC "src");
139    key!(SRCDOC "srcdoc");
140    key!(SRCLANG "srclang");
141    key!(SRCSET "srcset");
142    key!(START "start");
143    key!(STEP "step");
144    key!(STYLE "style");
145    key!(SUMMARY "summary");
146    key!(TABINDEX "tabindex");
147    key!(TARGET "target");
148    key!(TITLE "title");
149    key!(TRANSLATE "translate");
150    key!(TYPE "type");
151    key!(USEMAP "usemap");
152    key!(VALUE "value");
153    key!(WIDTH "width");
154    key!(WRAP "wrap");
155}