From 15923b95c9466d9165e540238184eef18bf80a7f Mon Sep 17 00:00:00 2001 From: Fuwn Date: Sun, 2 Apr 2023 02:06:25 +0000 Subject: feat(response): allow multiple languages --- src/response.rs | 20 ++++++++++++-------- src/router.rs | 23 ++++++++++++++--------- 2 files changed, 26 insertions(+), 17 deletions(-) (limited to 'src') diff --git a/src/response.rs b/src/response.rs index 6feecf5..2a615a7 100644 --- a/src/response.rs +++ b/src/response.rs @@ -37,7 +37,7 @@ pub struct Response { pub mime: Option, pub content: String, pub character_set: Option, - pub language: Option, + pub languages: Option>, } impl Response { @@ -79,7 +79,7 @@ impl Response { pub fn success(content: impl ToString) -> Self { Self::new(20, content.to_string()) .with_mime("text/gemini") - .with_language("en") + .with_languages(["en"]) .with_character_set("utf-8") .clone() } @@ -109,7 +109,7 @@ impl Response { mime: None, content: content.into(), character_set: None, - language: None, + languages: None, } } @@ -131,11 +131,15 @@ impl Response { self } - pub fn with_language( - &mut self, - language: impl Into + AsRef, - ) -> &mut Self { - self.language = Some(language.into()); + pub fn with_languages(&mut self, languages: impl AsRef<[S]>) -> &mut Self + where S: Into + AsRef { + self.languages = Some( + languages + .as_ref() + .iter() + .map(|s| s.as_ref().to_string()) + .collect::>(), + ); self } diff --git a/src/router.rs b/src/router.rs index 04e955e..b245722 100644 --- a/src/router.rs +++ b/src/router.rs @@ -66,7 +66,7 @@ pub struct Router { pre_route_callback: Arc>, post_route_callback: Arc>, character_set: String, - language: String, + languages: Vec, port: i32, modules: Arc>>>, fix_path: bool, @@ -416,7 +416,10 @@ impl Router { content .character_set .unwrap_or_else(|| self.character_set.clone()), - content.language.unwrap_or_else(|| self.language.clone()) + content + .languages + .unwrap_or_else(|| self.languages.clone()) + .join(","), ), 21 => content.mime.unwrap_or_default(), #[cfg(feature = "auto-deduce-mime")] @@ -716,13 +719,15 @@ impl Router { /// # Examples /// /// ```rust - /// windmark::Router::new().set_language("en"); + /// windmark::Router::new().set_languages("en"); /// ``` - pub fn set_language( - &mut self, - language: impl Into + AsRef, - ) -> &mut Self { - self.language = language.into(); + pub fn set_languages(&mut self, language: impl AsRef<[S]>) -> &mut Self + where S: Into + AsRef { + self.languages = language + .as_ref() + .iter() + .map(|s| s.as_ref().to_string()) + .collect::>(); self } @@ -779,7 +784,7 @@ impl Default for Router { pre_route_callback: Arc::new(Mutex::new(Box::new(|_| {}))), post_route_callback: Arc::new(Mutex::new(Box::new(|_, _| {}))), character_set: "utf-8".to_string(), - language: "en".to_string(), + languages: vec!["en".to_string()], port: 1965, modules: Arc::new(Mutex::new(vec![])), fix_path: false, -- cgit v1.2.3