diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-08-31 00:22:02 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-08-31 00:22:02 +0900 |
| commit | 4a2f024846ca1b0bbdb4f6904bae964756c9f701 (patch) | |
| tree | 3261da76e9f84e9a07946a7c537a394cf01b29de /crates/shirabe-symfony-console/src/descriptor | |
| parent | 6a6ec1b8f8a5c70d21f3772ce637b763e8ab21ea (diff) | |
| download | php-shirabe-4a2f024846ca1b0bbdb4f6904bae964756c9f701.tar.gz php-shirabe-4a2f024846ca1b0bbdb4f6904bae964756c9f701.tar.zst php-shirabe-4a2f024846ca1b0bbdb4f6904bae964756c9f701.zip | |
feat(plugin): serve HttpDownloader's async surface
add() and addCopy() answer with a promise, and enableAsync(), wait() and
countActiveJobs() answer alongside them. The Rust future runs to completion
before the promise is handed over, so requests a plugin starts together run
one after another rather than overlapping; overlapping them needs a promise
representation that crosses the boundary unresolved.
Everything else the surface does is preserved. add() still refuses a
downloader outside a Loop, and it does so by throwing out of the call the way
PHP does, where a failed request instead arrives as a rejection the caller
handles — __shirabe_rejected_promise is the failure half of the resolved-
promise helper. wait() and countActiveJobs() answer for a downloader with no
outstanding job, which, once every request settles before its call returns,
it never has.
This is where HttpDownloader parts company with ProcessExecutor, whose async
surface stays an explicit error: executeAsync() resolves its promise with a
Symfony Process, whose state is the proc_open() resource of whichever process
called start(), where a request resolves its promise with a Response.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe-symfony-console/src/descriptor')
0 files changed, 0 insertions, 0 deletions
