__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(IOInterface $io, bool $preferSource = false, ?Filesystem $filesystem = null) { [$this->__rhandle, $this->__epoch] = \ShirabeRpcRuntime::callRust(0, '__shirabeConstruct', [static::class, [$io, $preferSource, $filesystem]]); \ShirabeRustObjectRegistry::adopt($this->__rhandle, $this); } public function setPreferSource(bool $preferSource): self { \ShirabeRpcRuntime::callRust($this->__rhandle, 'setPreferSource', [$preferSource]); return $this; } public function setPreferDist(bool $preferDist): self { \ShirabeRpcRuntime::callRust($this->__rhandle, 'setPreferDist', [$preferDist]); return $this; } public function setPreferences(array $preferences): self { \ShirabeRpcRuntime::callRust($this->__rhandle, 'setPreferences', [$preferences]); return $this; } public function setDownloader(string $type, DownloaderInterface $downloader): self { \ShirabeRpcRuntime::callRust($this->__rhandle, 'setDownloader', [$type, $downloader]); return $this; } public function getDownloader(string $type): DownloaderInterface { return \ShirabeRpcRuntime::callRust($this->__rhandle, 'getDownloader', [$type]); } public function getDownloaderForPackage(PackageInterface $package): ?DownloaderInterface { return \ShirabeRpcRuntime::callRust($this->__rhandle, 'getDownloaderForPackage', [$package]); } public function getDownloaderType(DownloaderInterface $downloader): string { return \ShirabeRpcRuntime::callRust($this->__rhandle, 'getDownloaderType', [$downloader]); } public function download(PackageInterface $package, string $targetDir, ?PackageInterface $prevPackage = null): PromiseInterface { return \ShirabeRpcRuntime::callRust($this->__rhandle, 'download', [$package, $targetDir, $prevPackage]); } public function prepare(string $type, PackageInterface $package, string $targetDir, ?PackageInterface $prevPackage = null): PromiseInterface { return \ShirabeRpcRuntime::callRust($this->__rhandle, 'prepare', [$type, $package, $targetDir, $prevPackage]); } public function install(PackageInterface $package, string $targetDir): PromiseInterface { return \ShirabeRpcRuntime::callRust($this->__rhandle, 'install', [$package, $targetDir]); } public function update(PackageInterface $initial, PackageInterface $target, string $targetDir): PromiseInterface { return \ShirabeRpcRuntime::callRust($this->__rhandle, 'update', [$initial, $target, $targetDir]); } public function remove(PackageInterface $package, string $targetDir): PromiseInterface { return \ShirabeRpcRuntime::callRust($this->__rhandle, 'remove', [$package, $targetDir]); } public function cleanup(string $type, PackageInterface $package, string $targetDir, ?PackageInterface $prevPackage = null): PromiseInterface { return \ShirabeRpcRuntime::callRust($this->__rhandle, 'cleanup', [$type, $package, $targetDir, $prevPackage]); } }