webidl_utils/extend/
common.rs1pub trait ExtendBraced<T> {
3 fn new(body: T) -> Self;
4}
5
6impl<T> ExtendBraced<T> for weedle::common::Braced<T> {
7 fn new(body: T) -> Self {
8 Self {
9 open_brace: weedle::term::OpenBrace,
10 body,
11 close_brace: weedle::term::CloseBrace,
12 }
13 }
14}
15
16pub trait ExtendBracketed<T> {
18 fn new(body: T) -> Self;
19}
20
21impl<T> ExtendBracketed<T> for weedle::common::Bracketed<T> {
22 fn new(body: T) -> Self {
23 Self {
24 open_bracket: weedle::term::OpenBracket,
25 body,
26 close_bracket: weedle::term::CloseBracket,
27 }
28 }
29}
30
31pub trait ExtendDocstring {
33 fn new(s: &str) -> Self;
34 fn as_str(&self) -> &str;
35}
36
37impl ExtendDocstring for weedle::common::Docstring {
38 fn new(s: &str) -> Self {
39 Self(s.into())
40 }
41
42 fn as_str(&self) -> &str {
43 self.0.as_str()
44 }
45}
46
47pub trait ExtendGenerics<T> {
49 fn new(body: T) -> Self;
50}
51
52impl<T> ExtendGenerics<T> for weedle::common::Generics<T> {
53 fn new(body: T) -> Self {
54 Self {
55 open_angle: weedle::term::LessThan,
56 body,
57 close_angle: weedle::term::GreaterThan,
58 }
59 }
60}
61
62pub trait ExtendParenthesized<T> {
64 fn new(body: T) -> Self;
65}
66
67impl<T> ExtendParenthesized<T> for weedle::common::Parenthesized<T> {
68 fn new(body: T) -> Self {
69 Self {
70 open_paren: weedle::term::OpenParen,
71 body,
72 close_paren: weedle::term::CloseParen,
73 }
74 }
75}
76
77pub trait ExtendPunctuated<T, S> {
79 fn new(list: Vec<T>, separator: S) -> Self;
80}
81
82impl<T, S> ExtendPunctuated<T, S> for weedle::common::Punctuated<T, S> {
83 fn new(list: Vec<T>, separator: S) -> Self {
84 Self { list, separator }
85 }
86}
87
88pub trait ExtendPunctuatedNonEmpty<T, S> {
90 fn new(list: Vec<T>, separator: S) -> Self;
91}
92
93impl<T, S> ExtendPunctuatedNonEmpty<T, S> for weedle::common::PunctuatedNonEmpty<T, S> {
94 fn new(list: Vec<T>, separator: S) -> Self {
95 Self { list, separator }
96 }
97}
98
99#[cfg(test)]
100mod extend_braced {
101 use crate::extend::ExtendBraced;
102 use weedle::common::{Braced, Identifier};
103
104 #[test]
105 fn test() {
106 assert_eq!(Braced::new(Identifier("Foo")).body, Identifier("Foo"));
107 }
108}
109
110#[cfg(test)]
111mod extend_bracketed {
112 use crate::extend::ExtendBracketed;
113 use weedle::common::{Bracketed, Identifier};
114
115 #[test]
116 fn test() {
117 assert_eq!(Bracketed::new(Identifier("Foo")).body, Identifier("Foo"));
118 }
119}
120
121#[cfg(test)]
122mod extend_docstring {
123 use crate::extend::ExtendDocstring;
124 use weedle::common::Docstring;
125
126 #[test]
127 fn test() {
128 assert_eq!(Docstring::new("Foo").0, String::from("Foo"));
129 assert_eq!(Docstring::new("Foo").as_str(), "Foo");
130 }
131}
132
133#[cfg(test)]
134mod extend_generics {
135 use crate::extend::{ExtendGenerics, ExtendType};
136 use weedle::common::Generics;
137 use weedle::types::Type;
138
139 #[test]
140 fn test() {
141 assert_eq!(Generics::new(Type::single_any()).body, Type::single_any());
142 }
143}
144
145#[cfg(test)]
146mod extend_parenthesized {
147 use crate::extend::ExtendParenthesized;
148 use weedle::common::{Identifier, Parenthesized};
149
150 #[test]
151 fn test() {
152 assert_eq!(
153 Parenthesized::new(Identifier("Foo")).body,
154 Identifier("Foo")
155 );
156 }
157}
158
159#[cfg(test)]
160mod extend_punctuated {
161 use crate::extend::ExtendPunctuated;
162 use weedle::common::Punctuated;
163 use weedle::term::Comma;
164
165 #[test]
166 fn test() {
167 let punct = Punctuated::new(vec!["Alice", "Bob"], Comma);
168 assert_eq!(punct.list, vec!["Alice", "Bob"]);
169 }
170}
171
172#[cfg(test)]
173mod extend_punctuated_non_empty {
174 use crate::extend::ExtendPunctuatedNonEmpty;
175 use weedle::common::PunctuatedNonEmpty;
176 use weedle::term::Comma;
177
178 #[test]
179 fn test() {
180 let punct = PunctuatedNonEmpty::new(vec!["Alice", "Bob"], Comma);
181 assert_eq!(punct.list, vec!["Alice", "Bob"]);
182 }
183}