From af4b9fcba1206e3fcc97fc243ffc674f85547942 Mon Sep 17 00:00:00 2001 From: nsfisis Date: Sat, 6 Jun 2026 19:47:36 +0900 Subject: refactor(http-response): take url directly instead of request map Response only ever reads the url out of the request array, so accept it as a String directly. With url always present the 'url key missing' LogicException can no longer fire, so Response::new and CurlResponse::new return Self instead of a double Result. Also drops the unused from_php_mixed/to_php_mixed stubs and the request_to_map helper. Co-Authored-By: Claude Opus 4.8 (1M context) --- crates/shirabe/src/util/http/response.rs | 51 +++++--------------------------- 1 file changed, 8 insertions(+), 43 deletions(-) (limited to 'crates/shirabe/src/util/http/response.rs') diff --git a/crates/shirabe/src/util/http/response.rs b/crates/shirabe/src/util/http/response.rs index a2bc0f1..4810397 100644 --- a/crates/shirabe/src/util/http/response.rs +++ b/crates/shirabe/src/util/http/response.rs @@ -1,37 +1,25 @@ //! ref: composer/src/Composer/Util/Http/Response.php use crate::json::JsonFile; -use indexmap::IndexMap; use shirabe_external_packages::composer::pcre::Preg; -use shirabe_php_shim::{LogicException, PhpMixed, preg_quote}; +use shirabe_php_shim::{PhpMixed, preg_quote}; #[derive(Debug)] pub struct Response { - request: IndexMap, + url: String, code: i64, headers: Vec, body: Option, } impl Response { - pub fn new( - request: IndexMap, - code: Option, - headers: Vec, - body: Option, - ) -> anyhow::Result> { - if !request.contains_key("url") { - return Ok(Err(LogicException { - message: "url key missing from request array".to_string(), - code: 0, - })); - } - Ok(Ok(Self { - request, + pub fn new(url: String, code: Option, headers: Vec, body: Option) -> Self { + Self { + url, code: code.unwrap_or(0), headers, body, - })) + } } pub fn get_status_code(&self) -> i64 { @@ -63,16 +51,11 @@ impl Response { } pub fn decode_json(&self) -> anyhow::Result { - let url = self - .request - .get("url") - .and_then(|u| u.as_string()) - .unwrap_or(""); - JsonFile::parse_json(self.body.as_deref(), Some(url)) + JsonFile::parse_json(self.body.as_deref(), Some(self.url.as_str())) } pub fn collect(&mut self) { - self.request = IndexMap::new(); + self.url = String::new(); self.code = 0; self.headers = vec![]; self.body = None; @@ -96,22 +79,4 @@ impl Response { } value } - - // TODO(phase-b): historical helpers used in composer_repository — provide stubs. - pub fn from_php_mixed(_data: PhpMixed) -> Self { - todo!() - } - - pub fn to_php_mixed(&self) -> PhpMixed { - todo!() - } - - pub fn new_fake( - _url: &str, - _code: i64, - _headers: IndexMap, - _body: String, - ) -> Self { - todo!() - } } -- cgit v1.3.1