Skip to main content

tower_helmet/header/
cross_origin_resource_policy.rs

1use std::fmt::{Display, Formatter};
2
3use http::header::{HeaderName, InvalidHeaderValue};
4use http::HeaderValue;
5
6use crate::IntoHeader;
7
8/// `CrossOriginResourcePolicy` sets the `Cross-Origin-Resource-Policy` header.
9/// For more, see ["Consider deploying Cross-Origin Resource Policy](https://resourcepolicy.fyi/) and [MDN's article on this header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cross-Origin-Resource-Policy).
10#[derive(Debug, Clone, Copy, Default)]
11pub enum CrossOriginResourcePolicy {
12    SameSite,
13    #[default]
14    SameOrigin,
15    CrossOrigin,
16}
17
18impl Display for CrossOriginResourcePolicy {
19    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
20        let s = match self {
21            CrossOriginResourcePolicy::SameSite => "same-site",
22            CrossOriginResourcePolicy::SameOrigin => "same-origin",
23            CrossOriginResourcePolicy::CrossOrigin => "cross-origin",
24        };
25
26        write!(f, "{}", s)
27    }
28}
29
30impl IntoHeader for CrossOriginResourcePolicy {
31    fn header_name(&self) -> HeaderName {
32        HeaderName::from_static("cross-origin-resource-policy")
33    }
34
35    fn header_value(&self) -> Result<HeaderValue, InvalidHeaderValue> {
36        HeaderValue::from_str(self.to_string().as_str())
37    }
38}