From 09081dd1d7d5e3606b5c4a71b3e701937ea2266e Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Tue, 7 Apr 2020 21:24:09 +0800 Subject: [PATCH] use macro to generate headers --- src/lib.rs | 6 +----- src/sn.rs | 9 +++------ src/utils.rs | 28 ++++++++++++++++++++++++++++ 3 files changed, 32 insertions(+), 11 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 999e4c9..79d91ea 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -59,11 +59,7 @@ pub async fn handle_request_rs(req: Request) -> Response { return Response::new_with_opt_str_and_init( None, ResponseInit::new() .status(200) - .headers({ - let headers = Headers::new().unwrap(); - cors!(headers); - headers - }.as_ref()) + .headers(headers!().add_cors().as_ref()) ).unwrap(); } diff --git a/src/sn.rs b/src/sn.rs index f97e806..5ea3271 100644 --- a/src/sn.rs +++ b/src/sn.rs @@ -60,12 +60,9 @@ async fn get_actions(_req: Request, url: Url) -> MyResult { Some(&serde_json::to_string(&info).internal_err()?), ResponseInit::new() .status(200) - .headers({ - let headers = Headers::new().unwrap(); - headers.set("Content-Type", "application/json").unwrap(); - cors!(headers); - headers - }.as_ref()) + .headers(headers!{ + "Content-Type" => "application/json" + }.add_cors().as_ref()) ).internal_err() } diff --git a/src/utils.rs b/src/utils.rs index cac8e10..28241f0 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -1,5 +1,6 @@ use cfg_if::cfg_if; use serde::Deserialize; +use web_sys::Headers; cfg_if! { // When the `console_error_panic_hook` feature is enabled, we can call the @@ -25,6 +26,33 @@ macro_rules! cors { }; } +// Adapted from +#[macro_export] +macro_rules! headers( + { $($key:expr => $value:expr),+ } => { + { + let headers = ::web_sys::Headers::new().unwrap(); + $( + headers.set($key, $value).unwrap(); + )+ + headers + } + }; + () => { ::web_sys::Headers::new().unwrap() }; +); + +pub trait HeadersExt { + fn add_cors(self) -> Self; +} + +impl HeadersExt for Headers { + fn add_cors(self) -> Self { + self.set("Access-Control-Allow-Origin", "*").unwrap(); + self.set("Access-Control-Allow-Headers", "*").unwrap(); + self + } +} + pub trait ResultExt { // Ignore any error and return InternalError for them all // Used in place of ugly `.unwrap()`.