aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/src/util/http_downloader.rs
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-06-06 19:47:36 +0900
committernsfisis <nsfisis@gmail.com>2026-06-06 19:47:36 +0900
commitaf4b9fcba1206e3fcc97fc243ffc674f85547942 (patch)
tree7066e219d80024150919316af900c666957a64fb /crates/shirabe/src/util/http_downloader.rs
parentd9090c4c52fa29ee1569aedf8be858bf78001d7b (diff)
downloadphp-shirabe-af4b9fcba1206e3fcc97fc243ffc674f85547942.tar.gz
php-shirabe-af4b9fcba1206e3fcc97fc243ffc674f85547942.tar.zst
php-shirabe-af4b9fcba1206e3fcc97fc243ffc674f85547942.zip
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) <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe/src/util/http_downloader.rs')
-rw-r--r--crates/shirabe/src/util/http_downloader.rs48
1 files changed, 8 insertions, 40 deletions
diff --git a/crates/shirabe/src/util/http_downloader.rs b/crates/shirabe/src/util/http_downloader.rs
index b33ed58..5d0eae6 100644
--- a/crates/shirabe/src/util/http_downloader.rs
+++ b/crates/shirabe/src/util/http_downloader.rs
@@ -388,10 +388,7 @@ impl HttpDownloader {
let headers = rfs.get_last_headers().to_vec();
let code = RemoteFilesystem::find_status_code(&headers);
let body = Some(format!("{}~", copy_to));
- match Response::new(Self::request_to_map(&request), code, headers, body)? {
- Ok(r) => Ok(r),
- Err(e) => Err(e.into()),
- }
+ Ok(Response::new(request.url.clone(), code, headers, body))
} else {
let body = match rfs.get_contents(&origin, &url, false, options.clone())? {
GetResult::Content(s) => Some(s),
@@ -399,10 +396,7 @@ impl HttpDownloader {
};
let headers = rfs.get_last_headers().to_vec();
let code = RemoteFilesystem::find_status_code(&headers);
- match Response::new(Self::request_to_map(&request), code, headers, body)? {
- Ok(r) => Ok(r),
- Err(e) => Err(e.into()),
- }
+ Ok(Response::new(request.url.clone(), code, headers, body))
}
})()
};
@@ -410,30 +404,6 @@ impl HttpDownloader {
self.settle_job(id, result);
}
- /// PHP `new Response($job['request'], ...)` is fed the whole request array; reproduce it.
- fn request_to_map(request: &Request) -> IndexMap<String, PhpMixed> {
- let mut m: IndexMap<String, PhpMixed> = IndexMap::new();
- m.insert("url".to_string(), PhpMixed::String(request.url.clone()));
- m.insert(
- "options".to_string(),
- PhpMixed::Array(
- request
- .options
- .iter()
- .map(|(k, v)| (k.clone(), Box::new(v.clone())))
- .collect(),
- ),
- );
- m.insert(
- "copyTo".to_string(),
- match &request.copy_to {
- Some(s) => PhpMixed::String(s.clone()),
- None => PhpMixed::Null,
- },
- );
- m
- }
-
/// Applies the effect of PHP's promise `.then` handlers: records the response/exception,
/// transitions the job status and decrements the running-job counter.
fn settle_job(&mut self, id: i64, result: anyhow::Result<Response>) {
@@ -508,14 +478,12 @@ impl HttpDownloader {
}
};
if has_if_modified_since {
- let mut req_map: IndexMap<String, PhpMixed> = IndexMap::new();
- req_map.insert("url".to_string(), PhpMixed::String(url.clone()));
- let response =
- match Response::new(req_map, Some(304), Vec::new(), Some(String::new())) {
- Ok(Ok(r)) => Ok(r),
- Ok(Err(e)) => Err(e.into()),
- Err(e) => Err(e),
- };
+ let response = Ok(Response::new(
+ url.clone(),
+ Some(304),
+ Vec::new(),
+ Some(String::new()),
+ ));
self.settle_job(id, response);
} else {
let mut e = TransportException::new(