__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 __construct(PartialComposer $composer, IOInterface $io, ?ProcessExecutor $process = null) { [$this->__rhandle, $this->__epoch] = \ShirabeRpcRuntime::callRust(0, '__shirabeConstruct', [static::class, [$composer, $io, $process]]); \ShirabeRustObjectRegistry::adopt($this->__rhandle, $this); } public function setRunScripts(bool $runScripts = true): self { \ShirabeRpcRuntime::callRust($this->__rhandle, 'setRunScripts', [$runScripts]); return $this; } public function dispatch(?string $eventName, ?Event $event = null): int { return \ShirabeRpcRuntime::callRust($this->__rhandle, 'dispatch', [$eventName, $event]); } public function dispatchScript(string $eventName, bool $devMode = false, array $additionalArgs = [], array $flags = []): int { return \ShirabeRpcRuntime::callRust($this->__rhandle, 'dispatchScript', [$eventName, $devMode, $additionalArgs, $flags]); } public function dispatchPackageEvent(string $eventName, bool $devMode, RepositoryInterface $localRepo, array $operations, OperationInterface $operation): int { return \ShirabeRpcRuntime::callRust($this->__rhandle, 'dispatchPackageEvent', [$eventName, $devMode, $localRepo, $operations, $operation]); } public function dispatchInstallerEvent(string $eventName, bool $devMode, bool $executeOperations, Transaction $transaction): int { return \ShirabeRpcRuntime::callRust($this->__rhandle, 'dispatchInstallerEvent', [$eventName, $devMode, $executeOperations, $transaction]); } public function addListener(string $eventName, $listener, int $priority = 0): void { \ShirabeRpcRuntime::callRust($this->__rhandle, 'addListener', [$eventName, $listener, $priority]); } public function removeListener($listener): void { \ShirabeRpcRuntime::callRust($this->__rhandle, 'removeListener', [$listener]); } public function addSubscriber(EventSubscriberInterface $subscriber): void { \ShirabeRpcRuntime::callRust($this->__rhandle, 'addSubscriber', [$subscriber]); } public function hasEventListeners(Event $event): bool { return \ShirabeRpcRuntime::callRust($this->__rhandle, 'hasEventListeners', [$event]); } }