rama_http_headers/common/
access_control_request_private_network.rs1use rama_http_types::{HeaderName, HeaderValue};
2
3use crate::{Error, HeaderDecode, HeaderEncode, TypedHeader};
4
5#[derive(Default, Clone, PartialEq, Eq, Debug)]
33#[non_exhaustive]
34pub struct AccessControlRequestPrivateNetwork;
35
36impl AccessControlRequestPrivateNetwork {
37 #[must_use]
38 pub fn new() -> Self {
39 Self
40 }
41}
42
43impl TypedHeader for AccessControlRequestPrivateNetwork {
44 fn name() -> &'static HeaderName {
45 &::rama_http_types::header::ACCESS_CONTROL_REQUEST_PRIVATE_NETWORK
46 }
47}
48
49impl HeaderDecode for AccessControlRequestPrivateNetwork {
50 fn decode<'i, I: Iterator<Item = &'i HeaderValue>>(values: &mut I) -> Result<Self, Error> {
51 values
52 .next()
53 .and_then(|value| if value == "true" { Some(Self) } else { None })
54 .ok_or_else(Error::invalid)
55 }
56}
57
58impl HeaderEncode for AccessControlRequestPrivateNetwork {
59 fn encode<E: Extend<HeaderValue>>(&self, values: &mut E) {
60 values.extend(::std::iter::once(HeaderValue::from_static("true")));
61 }
62}
63
64#[cfg(test)]
65mod tests {
66 use super::super::test_decode;
67 use super::*;
68
69 #[test]
70 fn allow_private_network_is_case_sensitive() {
71 let allow_header = test_decode::<AccessControlRequestPrivateNetwork>(&["true"]);
72 assert!(allow_header.is_some());
73
74 let allow_header = test_decode::<AccessControlRequestPrivateNetwork>(&["True"]);
75 assert!(allow_header.is_none());
76 }
77}