diff --git a/src/commands/search.rs b/src/commands/search.rs index 2fbab3f..81f3c06 100644 --- a/src/commands/search.rs +++ b/src/commands/search.rs @@ -138,11 +138,7 @@ async fn execute(req: &DaemonRequest, api_key_override: Option<&str>) -> Result< handle_response(resp).await } "fetch" => { - let urls = req.urls.as_ref().ok_or_else(|| missing("urls"))?; - let mut query: Vec<(&str, &str)> = urls.iter().map(|u| ("url", u.as_str())).collect(); - if req.live { - query.push(("live", "true")); - } + let query = req.fetch_query().ok_or_else(|| missing("urls"))?; let resp = client .get(endpoint("/v1/fetch", authenticated)) .query(&query) diff --git a/src/daemon.rs b/src/daemon.rs index b612c02..bb2b0bb 100644 --- a/src/daemon.rs +++ b/src/daemon.rs @@ -19,6 +19,22 @@ impl DaemonRequest { pub fn idempotent(&self) -> bool { self.command != "feedback" } + + /// Query params for GET /v1/fetch, shared by the daemon and the direct + /// HTTP path so fetch params can't drift between them. None when `urls` + /// is missing. + pub fn fetch_query(&self) -> Option> { + let mut query: Vec<(&str, &str)> = self + .urls + .as_ref()? + .iter() + .map(|u| ("url", u.as_str())) + .collect(); + if self.live { + query.push(("live", "true")); + } + Some(query) + } } #[derive(Serialize, Deserialize, Debug)] @@ -276,15 +292,10 @@ mod platform { .await } "fetch" => { - let urls = match &req.urls { - Some(u) => u, + let query = match req.fetch_query() { + Some(q) => q, None => return err_response("Missing urls"), }; - let mut query: Vec<(&str, &str)> = - urls.iter().map(|u| ("url", u.as_str())).collect(); - if req.live { - query.push(("live", "true")); - } send_api( client .get(endpoint("/v1/fetch", authenticated))