__rhandle = $rhandle; $this->__epoch = $epoch; } public function __destruct() { \ShirabeRustObjectRegistry::release($this->__rhandle); } public function __shirabeRustHandleDescriptor(): array { return [ '__rhandle' => $this->__rhandle, '__class' => static::class, '__epoch' => $this->__epoch, ]; } public function __clone() { // PHP has already shallow-copied this stub, so both copies would point at one // entity and release it twice. The Rust side clones the entity instead, applying // whatever __clone semantics the real class defines, and this copy rebinds to the // fresh handle. Entities without clone semantics answer with an explicit error. [$this->__rhandle, $this->__epoch] = \ShirabeRpcRuntime::callRust($this->__rhandle, '__shirabeClone', []); \ShirabeRustObjectRegistry::adopt($this->__rhandle, $this); } public function __get($name) { return \ShirabeRpcRuntime::callRust($this->__rhandle, '__get', [$name]); } public function __set($name, $value): void { \ShirabeRpcRuntime::callRust($this->__rhandle, '__set', [$name, $value]); } public function __isset($name): bool { return \ShirabeRpcRuntime::callRust($this->__rhandle, '__isset', [$name]); } public function __unset($name): void { \ShirabeRpcRuntime::callRust($this->__rhandle, '__unset', [$name]); } public function __construct(HttpDownloader $httpDownloader, ?ProcessExecutor $processExecutor = null) { [$this->__rhandle, $this->__epoch] = \ShirabeRpcRuntime::callRust(0, '__shirabeConstruct', [static::class, [$httpDownloader, $processExecutor]]); \ShirabeRustObjectRegistry::adopt($this->__rhandle, $this); } public function getHttpDownloader(): HttpDownloader { return \ShirabeRpcRuntime::callRust($this->__rhandle, 'getHttpDownloader', []); } public function getProcessExecutor(): ?ProcessExecutor { return \ShirabeRpcRuntime::callRust($this->__rhandle, 'getProcessExecutor', []); } public function wait(array $promises, ?ProgressBar $progress = null): void { \ShirabeRpcRuntime::callRust($this->__rhandle, 'wait', [$promises, $progress]); } public function abortJobs(): void { \ShirabeRpcRuntime::callRust($this->__rhandle, 'abortJobs', []); } }