webdav_headers/
overwrite.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::OVERWRITE;
6
7/// The `Overwrite` header as defined in [RFC 4918](http://webdav.org/specs/rfc4918.html#HEADER_Overwrite-Token).
8#[derive(Copy, Clone, Debug, Default, PartialEq)]
9pub enum Overwrite {
10    F,
11    #[default]
12    T,
13}
14
15impl headers::Header for Overwrite {
16    fn name() -> &'static http::HeaderName {
17        &OVERWRITE
18    }
19
20    fn decode<'i, I>(values: &mut I) -> Result<Self, headers::Error>
21    where
22        Self: Sized,
23        I: Iterator<Item = &'i http::HeaderValue>,
24    {
25        values
26            .next()
27            .map(headers::HeaderValue::as_bytes)
28            .and_then(|s| match s {
29                b"F" | b"f" => Some(Overwrite::F),
30                b"T" | b"t" => Some(Overwrite::T),
31                _ => None,
32            })
33            .ok_or_else(headers::Error::invalid)
34    }
35
36    fn encode<E: Extend<http::HeaderValue>>(&self, values: &mut E) {
37        values.extend(std::iter::once(match self {
38            Overwrite::F => headers::HeaderValue::from_static("F"),
39            Overwrite::T => headers::HeaderValue::from_static("T"),
40        }))
41    }
42}
43
44#[cfg(test)]
45#[test]
46fn test() {
47    use crate::test::test_all;
48
49    test_all([("F", Overwrite::F), ("T", Overwrite::T)])
50}