webdav_headers/
lock_token.rs

1// SPDX-FileCopyrightText: d-k-bo <d-k-bo@mailbox.org>
2//
3// SPDX-License-Identifier: MIT OR Apache-2.0
4
5use crate::{utils::HeaderIteratorExt, CodedUrl, LOCK_TOKEN};
6
7/// The `Lock-Token` header as defined in [RFC 4918](http://webdav.org/specs/rfc4918.html#HEADER_Lock-Token).
8#[derive(Clone, Debug, PartialEq)]
9pub struct LockToken(pub CodedUrl);
10
11impl headers::Header for LockToken {
12    fn name() -> &'static http::HeaderName {
13        &LOCK_TOKEN
14    }
15
16    fn decode<'i, I>(values: &mut I) -> Result<Self, headers::Error>
17    where
18        Self: Sized,
19        I: Iterator<Item = &'i http::HeaderValue>,
20    {
21        values
22            .extract_str()?
23            .parse()
24            .map(Self)
25            .map_err(|_| headers::Error::invalid())
26    }
27
28    fn encode<E: Extend<http::HeaderValue>>(&self, values: &mut E) {
29        values.extend(std::iter::once(self.0.to_string().parse().unwrap()))
30    }
31}