webidl_utils/extend/
common.rs

1/// Extension methods for `Braced`
2pub 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
16/// Extension methods for `Bracketed`
17pub 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
31/// Extension methods for `Docstring`
32pub 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
47/// Extension methods for `Generics`
48pub 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
62/// Extension methods for `Parenthesized`
63pub 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
77/// Extension methods for `Punctuated`
78pub 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
88/// Extension methods for `PunctuatedNonEmpty`
89pub 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}