aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe-php-rpc/php/worker.php
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-08-06 20:04:25 +0900
committernsfisis <nsfisis@gmail.com>2026-08-06 20:04:25 +0900
commit3f525f228052ad04e6f9da6ff160bef803d079bd (patch)
tree3fe2d078e6a30b12ce041b1b3f1e589bc47cf8f3 /crates/shirabe-php-rpc/php/worker.php
parentd9dca94603766712b5989ea8169c9e286d27a60c (diff)
downloadphp-shirabe-3f525f228052ad04e6f9da6ff160bef803d079bd.tar.gz
php-shirabe-3f525f228052ad04e6f9da6ff160bef803d079bd.tar.zst
php-shirabe-3f525f228052ad04e6f9da6ff160bef803d079bd.zip
feat(plugin): let links and release dates cross the RPC boundary
The link getters and setters and the release date accessors were explicit errors for every non-empty value, because an immutable value has no entity to point a handle at. They now cross as materialized values: the descriptor names the real class and the constructor arguments, and each side builds a genuine instance of its own. The semver constraint a link holds is encoded structurally rather than re-parsed from its string form, so the pretty strings and the conjunctive flag survive the crossing. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe-php-rpc/php/worker.php')
-rw-r--r--crates/shirabe-php-rpc/php/worker.php7
1 files changed, 7 insertions, 0 deletions
diff --git a/crates/shirabe-php-rpc/php/worker.php b/crates/shirabe-php-rpc/php/worker.php
index 9a36abdd..e82c45ba 100644
--- a/crates/shirabe-php-rpc/php/worker.php
+++ b/crates/shirabe-php-rpc/php/worker.php
@@ -227,6 +227,10 @@ final class ShirabeRpcRuntime
// A natively-constructed dual-mode instance falls through to the P table below.
}
if (is_object($value)) {
+ $materialized = \Shirabe\MaterializedValue::describe($value);
+ if ($materialized !== null) {
+ return array_map([self::class, 'toWire'], $materialized);
+ }
return ShirabePhpObjectRegistry::descriptor($value);
}
if (is_resource($value)) {
@@ -257,6 +261,9 @@ final class ShirabeRpcRuntime
if (isset($value['__pclass']) && count($value) === 1) {
return $value['__pclass'];
}
+ if (isset($value['__pnew'])) {
+ return \Shirabe\MaterializedValue::build(array_map([self::class, 'fromWire'], $value));
+ }
return array_map([self::class, 'fromWire'], $value);
}