Skip to content

Commit c9221b1

Browse files
authored
Implements ExtensionProvider for Option<E> (#53)
* Resolves incorrect versioning * Bump version * Enforce semantic versioning in CI * Implements ExtensionProvider for Option<E>
1 parent 497eefe commit c9221b1

File tree

1 file changed

+34
-0
lines changed

1 file changed

+34
-0
lines changed

ratchet_ext/src/lib.rs

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,40 @@ where
137137
}
138138
}
139139

140+
impl<E> ExtensionProvider for Option<E>
141+
where
142+
E: ExtensionProvider,
143+
{
144+
type Extension = E::Extension;
145+
type Error = E::Error;
146+
147+
fn apply_headers(&self, headers: &mut HeaderMap) {
148+
if let Some(provider) = self {
149+
provider.apply_headers(headers);
150+
}
151+
}
152+
153+
fn negotiate_client(
154+
&self,
155+
headers: &HeaderMap,
156+
) -> Result<Option<Self::Extension>, Self::Error> {
157+
match self {
158+
Some(ext) => ext.negotiate_client(headers),
159+
None => Ok(None),
160+
}
161+
}
162+
163+
fn negotiate_server(
164+
&self,
165+
headers: &HeaderMap,
166+
) -> Result<Option<(Self::Extension, HeaderValue)>, Self::Error> {
167+
match self {
168+
Some(ext) => ext.negotiate_server(headers),
169+
None => Ok(None),
170+
}
171+
}
172+
}
173+
140174
/// A data code for a frame.
141175
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
142176
pub enum OpCode {

0 commit comments

Comments
 (0)