From 749e7007576f81c6fccf1217945bd4ab07454132 Mon Sep 17 00:00:00 2001 From: Matthias Endler Date: Mon, 22 Feb 2021 15:56:13 +0100 Subject: [PATCH] Add support for multiple matching quirks --- src/client.rs | 7 +++---- src/quirks/mod.rs | 13 +++++++------ 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/client.rs b/src/client.rs index 68e16f1..46b1797 100644 --- a/src/client.rs +++ b/src/client.rs @@ -249,11 +249,10 @@ impl Client { let mut final_url = url.to_owned(); let mut additional_headers = None; - let quirk = self.quirks.rewrite(url); - if let Some(quirk) = quirk { + for quirk in self.quirks.matching(url) { println!("Applying quirk: {:?}", quirk); - if let Some(url_func) = quirk.url { - final_url = url_func(url.to_owned()); + if let Some(rewrite) = quirk.rewrite { + final_url = rewrite(url.to_owned()); } additional_headers = quirk.headers; } diff --git a/src/quirks/mod.rs b/src/quirks/mod.rs index e67b1ea..5eac7a0 100644 --- a/src/quirks/mod.rs +++ b/src/quirks/mod.rs @@ -30,7 +30,7 @@ pub struct Quirk { pub pattern: Regex, pub method: Option, pub headers: Option, - pub url: Option Url>, + pub rewrite: Option Url>, } #[derive(Debug, Clone)] @@ -49,14 +49,14 @@ impl Quirks { .parse() .unwrap(), )), - url: None, + rewrite: None, }, Quirk { // https://stackoverflow.com/a/19377429/270334 pattern: Regex::new(r"^(https?://)?(www\.)?(youtube\.com|youtu\.?be)").unwrap(), method: Some(Method::HEAD), headers: None, - url: Some(|orig_url| { + rewrite: Some(|orig_url| { let mut url = Url::parse("https://www.youtube.com/oembed?").unwrap(); url.set_query(Some(&format!("url={}", orig_url.as_str()))); url @@ -67,12 +67,13 @@ impl Quirks { Self { quirks } } - pub fn rewrite(&self, url: &Url) -> Option { + pub fn matching(&self, url: &Url) -> Vec { + let mut matching = vec![]; for quirk in &self.quirks { if quirk.pattern.is_match(url.as_str()) { - return Some(quirk.clone()); + matching.push(quirk.clone()); } } - None + matching } }