From e7f83b74e8f8c12b4a1b0f9f613387b03858dbdd Mon Sep 17 00:00:00 2001 From: nsfisis Date: Fri, 7 Aug 2026 07:15:08 +0900 Subject: chore: use shirabe_php_shim::impl_php_class --- crates/shirabe/src/command/about_command.rs | 3 ++- crates/shirabe/src/command/depends_command.rs | 3 ++- crates/shirabe/src/command/prohibits_command.rs | 3 ++- crates/shirabe/src/command/status_command.rs | 3 ++- crates/shirabe/src/command/validate_command.rs | 3 ++- crates/shirabe/src/downloader/download_manager.rs | 2 +- crates/shirabe/src/downloader/downloader_interface.rs | 2 -- crates/shirabe/src/downloader/file_downloader.rs | 8 ++++---- crates/shirabe/src/downloader/fossil_downloader.rs | 6 +++--- crates/shirabe/src/downloader/git_downloader.rs | 9 +++++---- crates/shirabe/src/downloader/gzip_downloader.rs | 8 ++++---- crates/shirabe/src/downloader/hg_downloader.rs | 6 +++--- crates/shirabe/src/downloader/path_downloader.rs | 6 +++--- crates/shirabe/src/downloader/perforce_downloader.rs | 12 ++++++------ crates/shirabe/src/downloader/phar_downloader.rs | 6 +++--- crates/shirabe/src/downloader/rar_downloader.rs | 7 ++++--- crates/shirabe/src/downloader/svn_downloader.rs | 8 +++++--- crates/shirabe/src/downloader/tar_downloader.rs | 6 +++--- crates/shirabe/src/downloader/xz_downloader.rs | 6 +++--- crates/shirabe/src/downloader/zip_downloader.rs | 8 ++++---- crates/shirabe/tests/downloader/download_manager_test.rs | 4 ++-- 21 files changed, 63 insertions(+), 56 deletions(-) (limited to 'crates') diff --git a/crates/shirabe/src/command/about_command.rs b/crates/shirabe/src/command/about_command.rs index 95d0a343..764ecf5f 100644 --- a/crates/shirabe/src/command/about_command.rs +++ b/crates/shirabe/src/command/about_command.rs @@ -7,13 +7,14 @@ use crate::composer; use shirabe_external_packages::symfony::console::command::command::Command; use shirabe_external_packages::symfony::console::input::InputInterface; use shirabe_external_packages::symfony::console::output::OutputInterface; +use shirabe_php_shim::impl_php_class; #[derive(Debug)] pub struct AboutCommand { base_command_data: BaseCommandData, } -shirabe_php_shim::impl_php_class!(AboutCommand, r"Composer\Command\AboutCommand"); +impl_php_class!(AboutCommand, r"Composer\Command\AboutCommand"); impl Default for AboutCommand { fn default() -> Self { diff --git a/crates/shirabe/src/command/depends_command.rs b/crates/shirabe/src/command/depends_command.rs index a8910603..974e55b1 100644 --- a/crates/shirabe/src/command/depends_command.rs +++ b/crates/shirabe/src/command/depends_command.rs @@ -10,6 +10,7 @@ use crate::console::input::InputOption; use shirabe_external_packages::symfony::console::command::command::Command; use shirabe_external_packages::symfony::console::input::InputInterface; use shirabe_external_packages::symfony::console::output::OutputInterface; +use shirabe_php_shim::impl_php_class; #[derive(Debug)] pub struct DependsCommand { @@ -18,7 +19,7 @@ pub struct DependsCommand { colors: std::cell::RefCell>, } -shirabe_php_shim::impl_php_class!(DependsCommand, r"Composer\Command\DependsCommand"); +impl_php_class!(DependsCommand, r"Composer\Command\DependsCommand"); impl Default for DependsCommand { fn default() -> Self { diff --git a/crates/shirabe/src/command/prohibits_command.rs b/crates/shirabe/src/command/prohibits_command.rs index 305af738..da853f49 100644 --- a/crates/shirabe/src/command/prohibits_command.rs +++ b/crates/shirabe/src/command/prohibits_command.rs @@ -9,6 +9,7 @@ use crate::console::input::InputOption; use shirabe_external_packages::symfony::console::command::command::Command; use shirabe_external_packages::symfony::console::input::InputInterface; use shirabe_external_packages::symfony::console::output::OutputInterface; +use shirabe_php_shim::impl_php_class; #[derive(Debug)] pub struct ProhibitsCommand { @@ -17,7 +18,7 @@ pub struct ProhibitsCommand { colors: std::cell::RefCell>, } -shirabe_php_shim::impl_php_class!(ProhibitsCommand, r"Composer\Command\ProhibitsCommand"); +impl_php_class!(ProhibitsCommand, r"Composer\Command\ProhibitsCommand"); impl Default for ProhibitsCommand { fn default() -> Self { diff --git a/crates/shirabe/src/command/status_command.rs b/crates/shirabe/src/command/status_command.rs index 5bcb7dd7..7a8ac04c 100644 --- a/crates/shirabe/src/command/status_command.rs +++ b/crates/shirabe/src/command/status_command.rs @@ -16,13 +16,14 @@ use indexmap::IndexMap; use shirabe_external_packages::symfony::console::command::command::Command; use shirabe_external_packages::symfony::console::input::InputInterface; use shirabe_external_packages::symfony::console::output::OutputInterface; +use shirabe_php_shim::impl_php_class; #[derive(Debug)] pub struct StatusCommand { base_command_data: BaseCommandData, } -shirabe_php_shim::impl_php_class!(StatusCommand, r"Composer\Command\StatusCommand"); +impl_php_class!(StatusCommand, r"Composer\Command\StatusCommand"); impl Default for StatusCommand { fn default() -> Self { diff --git a/crates/shirabe/src/command/validate_command.rs b/crates/shirabe/src/command/validate_command.rs index 6e84c9d9..0a89b71d 100644 --- a/crates/shirabe/src/command/validate_command.rs +++ b/crates/shirabe/src/command/validate_command.rs @@ -16,13 +16,14 @@ use crate::util::Filesystem; use shirabe_external_packages::symfony::console::command::command::Command; use shirabe_external_packages::symfony::console::input::InputInterface; use shirabe_external_packages::symfony::console::output::OutputInterface; +use shirabe_php_shim::impl_php_class; #[derive(Debug)] pub struct ValidateCommand { base_command_data: BaseCommandData, } -shirabe_php_shim::impl_php_class!(ValidateCommand, r"Composer\Command\ValidateCommand"); +impl_php_class!(ValidateCommand, r"Composer\Command\ValidateCommand"); impl Default for ValidateCommand { fn default() -> Self { diff --git a/crates/shirabe/src/downloader/download_manager.rs b/crates/shirabe/src/downloader/download_manager.rs index 682fdcb8..423eda28 100644 --- a/crates/shirabe/src/downloader/download_manager.rs +++ b/crates/shirabe/src/downloader/download_manager.rs @@ -149,7 +149,7 @@ impl DownloadManager { return Err(LogicException { message: format!( "Downloader \"{}\" is a {} type downloader and can not be used to download {} for package {}", - shirabe_php_shim::PhpClass::php_class_name(&*downloader.borrow()), + downloader.borrow().php_class_name(), downloader_installation_source, installation_source.unwrap_or_default(), package, diff --git a/crates/shirabe/src/downloader/downloader_interface.rs b/crates/shirabe/src/downloader/downloader_interface.rs index 8f2e2c0d..c5b05a87 100644 --- a/crates/shirabe/src/downloader/downloader_interface.rs +++ b/crates/shirabe/src/downloader/downloader_interface.rs @@ -3,8 +3,6 @@ use crate::package::PackageInterfaceHandle; use shirabe_php_shim::PhpMixed; -/// `PhpClass` is a supertrait because `DownloadManager::getDownloaderForPackage` reports -/// `get_class($downloader)` in its error message, and Rust has no runtime class name. #[async_trait::async_trait(?Send)] pub trait DownloaderInterface: std::fmt::Debug + shirabe_php_shim::PhpClass { fn get_installation_source(&self) -> String; diff --git a/crates/shirabe/src/downloader/file_downloader.rs b/crates/shirabe/src/downloader/file_downloader.rs index 053a7161..d3b08b36 100644 --- a/crates/shirabe/src/downloader/file_downloader.rs +++ b/crates/shirabe/src/downloader/file_downloader.rs @@ -28,8 +28,8 @@ use indexmap::IndexMap; use shirabe_php_shim::{ DIRECTORY_SEPARATOR, InvalidArgumentException, PATHINFO_BASENAME, PATHINFO_EXTENSION, PHP_URL_PATH, PhpMixed, RuntimeException, UnexpectedValueException, array_search, file_exists, - filesize, get_class, hash, hash_file, is_dir, is_executable, parse_url, pathinfo, realpath, - rtrim, spl_object_hash, strlen, strpos, strtr, trim, umask, usleep, + filesize, get_class, hash, hash_file, impl_php_class, is_dir, is_executable, parse_url, + pathinfo, realpath, rtrim, spl_object_hash, strlen, strpos, strtr, trim, umask, usleep, }; use std::sync::{LazyLock, Mutex}; @@ -47,8 +47,6 @@ pub static DOWNLOAD_METADATA: LazyLock>> = pub static RESPONSE_HEADERS: LazyLock>>> = LazyLock::new(|| Mutex::new(IndexMap::new())); -shirabe_php_shim::impl_php_class!(FileDownloader, r"Composer\Downloader\FileDownloader"); - /// Base downloader for files #[derive(Debug)] pub struct FileDownloader { @@ -83,6 +81,8 @@ pub struct FileDownloader { additional_cleanup_paths: std::cell::RefCell>>, } +impl_php_class!(FileDownloader, r"Composer\Downloader\FileDownloader"); + impl FileDownloader { pub fn reset_download_metadata() { DOWNLOAD_METADATA.lock().unwrap().clear(); diff --git a/crates/shirabe/src/downloader/fossil_downloader.rs b/crates/shirabe/src/downloader/fossil_downloader.rs index c6be8f24..72409a1f 100644 --- a/crates/shirabe/src/downloader/fossil_downloader.rs +++ b/crates/shirabe/src/downloader/fossil_downloader.rs @@ -13,15 +13,15 @@ use crate::util::Filesystem; use crate::util::ProcessExecutor; use indexmap::IndexMap; use shirabe_external_packages::composer::pcre::Preg; -use shirabe_php_shim::{PhpMixed, RuntimeException, php_regex}; - -shirabe_php_shim::impl_php_class!(FossilDownloader, r"Composer\Downloader\FossilDownloader"); +use shirabe_php_shim::{PhpMixed, RuntimeException, impl_php_class, php_regex}; #[derive(Debug)] pub struct FossilDownloader { inner: VcsDownloaderBase, } +impl_php_class!(FossilDownloader, r"Composer\Downloader\FossilDownloader"); + impl FossilDownloader { pub fn new( io: std::rc::Rc>, diff --git a/crates/shirabe/src/downloader/git_downloader.rs b/crates/shirabe/src/downloader/git_downloader.rs index dd5f4e41..5e57de52 100644 --- a/crates/shirabe/src/downloader/git_downloader.rs +++ b/crates/shirabe/src/downloader/git_downloader.rs @@ -19,12 +19,11 @@ use crate::util::Url; use indexmap::IndexMap; use shirabe_external_packages::composer::pcre::{CaptureKey, Preg}; use shirabe_php_shim::{ - PhpMixed, RuntimeException, array_map, basename, dirname, implode, in_array_strict, is_dir, - php_regex, preg_quote, realpath, rtrim, strlen, strpos, substr, trim, version_compare, + PhpMixed, RuntimeException, array_map, basename, dirname, impl_php_class, implode, + in_array_strict, is_dir, php_regex, preg_quote, realpath, rtrim, strlen, strpos, substr, trim, + version_compare, }; -shirabe_php_shim::impl_php_class!(GitDownloader, r"Composer\Downloader\GitDownloader"); - #[derive(Debug)] pub struct GitDownloader { inner: VcsDownloaderBase, @@ -37,6 +36,8 @@ pub struct GitDownloader { cached_packages: std::cell::RefCell>>, } +impl_php_class!(GitDownloader, r"Composer\Downloader\GitDownloader"); + impl GitDownloader { pub fn new( io: std::rc::Rc>, diff --git a/crates/shirabe/src/downloader/gzip_downloader.rs b/crates/shirabe/src/downloader/gzip_downloader.rs index ff7962e0..b0494479 100644 --- a/crates/shirabe/src/downloader/gzip_downloader.rs +++ b/crates/shirabe/src/downloader/gzip_downloader.rs @@ -15,18 +15,18 @@ use crate::util::ProcessExecutor; use indexmap::IndexMap; use shirabe_php_shim::{ DIRECTORY_SEPARATOR, PATHINFO_FILENAME, PHP_URL_PATH, PhpMixed, RuntimeException, - extension_loaded, fclose, fopen, fwrite, gzclose, gzopen, gzread, implode, parse_url, pathinfo, - strtr, + extension_loaded, fclose, fopen, fwrite, gzclose, gzopen, gzread, impl_php_class, implode, + parse_url, pathinfo, strtr, }; -shirabe_php_shim::impl_php_class!(GzipDownloader, r"Composer\Downloader\GzipDownloader"); - #[derive(Debug)] pub struct GzipDownloader { inner: FileDownloader, cleanup_executed: std::cell::RefCell>, } +impl_php_class!(GzipDownloader, r"Composer\Downloader\GzipDownloader"); + impl GzipDownloader { pub fn new( io: std::rc::Rc>, diff --git a/crates/shirabe/src/downloader/hg_downloader.rs b/crates/shirabe/src/downloader/hg_downloader.rs index 68a84535..e555ccf5 100644 --- a/crates/shirabe/src/downloader/hg_downloader.rs +++ b/crates/shirabe/src/downloader/hg_downloader.rs @@ -13,15 +13,15 @@ use crate::util::Filesystem; use crate::util::Hg as HgUtils; use crate::util::ProcessExecutor; use indexmap::IndexMap; -use shirabe_php_shim::{PhpMixed, RuntimeException}; - -shirabe_php_shim::impl_php_class!(HgDownloader, r"Composer\Downloader\HgDownloader"); +use shirabe_php_shim::{PhpMixed, RuntimeException, impl_php_class}; #[derive(Debug)] pub struct HgDownloader { inner: VcsDownloaderBase, } +impl_php_class!(HgDownloader, r"Composer\Downloader\HgDownloader"); + impl HgDownloader { pub fn new( io: std::rc::Rc>, diff --git a/crates/shirabe/src/downloader/path_downloader.rs b/crates/shirabe/src/downloader/path_downloader.rs index ec07d057..f10da72a 100644 --- a/crates/shirabe/src/downloader/path_downloader.rs +++ b/crates/shirabe/src/downloader/path_downloader.rs @@ -24,16 +24,16 @@ use indexmap::IndexMap; use shirabe_external_packages::symfony::filesystem::Filesystem as SymfonyFilesystem; use shirabe_php_shim::{ DIRECTORY_SEPARATOR, PHP_WINDOWS_VERSION_MAJOR, PHP_WINDOWS_VERSION_MINOR, PhpMixed, - RuntimeException, file_exists, function_exists, is_dir, realpath, + RuntimeException, file_exists, function_exists, impl_php_class, is_dir, realpath, }; -shirabe_php_shim::impl_php_class!(PathDownloader, r"Composer\Downloader\PathDownloader"); - #[derive(Debug)] pub struct PathDownloader { pub(crate) inner: FileDownloader, } +impl_php_class!(PathDownloader, r"Composer\Downloader\PathDownloader"); + impl PathDownloader { const STRATEGY_SYMLINK: i64 = 10; const STRATEGY_MIRROR: i64 = 20; diff --git a/crates/shirabe/src/downloader/perforce_downloader.rs b/crates/shirabe/src/downloader/perforce_downloader.rs index 74b2155b..9d4ff2a3 100644 --- a/crates/shirabe/src/downloader/perforce_downloader.rs +++ b/crates/shirabe/src/downloader/perforce_downloader.rs @@ -15,12 +15,7 @@ use crate::util::Perforce; use crate::util::PerforceInterface; use crate::util::ProcessExecutor; use indexmap::IndexMap; -use shirabe_php_shim::PhpMixed; - -shirabe_php_shim::impl_php_class!( - PerforceDownloader, - r"Composer\Downloader\PerforceDownloader" -); +use shirabe_php_shim::{PhpMixed, impl_php_class}; #[derive(Debug)] pub struct PerforceDownloader { @@ -28,6 +23,11 @@ pub struct PerforceDownloader { pub(crate) perforce: std::cell::RefCell>>, } +impl_php_class!( + PerforceDownloader, + r"Composer\Downloader\PerforceDownloader" +); + impl PerforceDownloader { pub fn new( io: std::rc::Rc>, diff --git a/crates/shirabe/src/downloader/phar_downloader.rs b/crates/shirabe/src/downloader/phar_downloader.rs index 50b45eba..fc54e4b5 100644 --- a/crates/shirabe/src/downloader/phar_downloader.rs +++ b/crates/shirabe/src/downloader/phar_downloader.rs @@ -13,9 +13,7 @@ use crate::util::Filesystem; use crate::util::HttpDownloader; use crate::util::ProcessExecutor; use indexmap::IndexMap; -use shirabe_php_shim::{Phar, PhpMixed}; - -shirabe_php_shim::impl_php_class!(PharDownloader, r"Composer\Downloader\PharDownloader"); +use shirabe_php_shim::{Phar, PhpMixed, impl_php_class}; #[derive(Debug)] pub struct PharDownloader { @@ -23,6 +21,8 @@ pub struct PharDownloader { cleanup_executed: std::cell::RefCell>, } +impl_php_class!(PharDownloader, r"Composer\Downloader\PharDownloader"); + impl PharDownloader { pub fn new( io: std::rc::Rc>, diff --git a/crates/shirabe/src/downloader/rar_downloader.rs b/crates/shirabe/src/downloader/rar_downloader.rs index 645a5247..ee0148c7 100644 --- a/crates/shirabe/src/downloader/rar_downloader.rs +++ b/crates/shirabe/src/downloader/rar_downloader.rs @@ -15,17 +15,18 @@ use crate::util::Platform; use crate::util::ProcessExecutor; use indexmap::IndexMap; use shirabe_php_shim::{ - PhpMixed, RarArchive, RuntimeException, UnexpectedValueException, class_exists, implode, + PhpMixed, RarArchive, RuntimeException, UnexpectedValueException, class_exists, impl_php_class, + implode, }; -shirabe_php_shim::impl_php_class!(RarDownloader, r"Composer\Downloader\RarDownloader"); - #[derive(Debug)] pub struct RarDownloader { inner: FileDownloader, cleanup_executed: std::cell::RefCell>, } +impl_php_class!(RarDownloader, r"Composer\Downloader\RarDownloader"); + impl RarDownloader { pub fn new( io: std::rc::Rc>, diff --git a/crates/shirabe/src/downloader/svn_downloader.rs b/crates/shirabe/src/downloader/svn_downloader.rs index 6abe3ddf..99a5bfe6 100644 --- a/crates/shirabe/src/downloader/svn_downloader.rs +++ b/crates/shirabe/src/downloader/svn_downloader.rs @@ -16,9 +16,9 @@ use crate::util::ProcessExecutor; use crate::util::Svn as SvnUtil; use indexmap::IndexMap; use shirabe_external_packages::composer::pcre::{CaptureKey, Preg}; -use shirabe_php_shim::{PhpMixed, RuntimeException, is_dir, php_regex, version_compare}; - -shirabe_php_shim::impl_php_class!(SvnDownloader, r"Composer\Downloader\SvnDownloader"); +use shirabe_php_shim::{ + PhpMixed, RuntimeException, impl_php_class, is_dir, php_regex, version_compare, +}; #[derive(Debug)] pub struct SvnDownloader { @@ -26,6 +26,8 @@ pub struct SvnDownloader { pub(crate) cache_credentials: std::cell::Cell, } +impl_php_class!(SvnDownloader, r"Composer\Downloader\SvnDownloader"); + impl SvnDownloader { pub fn new( io: std::rc::Rc>, diff --git a/crates/shirabe/src/downloader/tar_downloader.rs b/crates/shirabe/src/downloader/tar_downloader.rs index ad18f052..88a53620 100644 --- a/crates/shirabe/src/downloader/tar_downloader.rs +++ b/crates/shirabe/src/downloader/tar_downloader.rs @@ -13,9 +13,7 @@ use crate::util::Filesystem; use crate::util::HttpDownloader; use crate::util::ProcessExecutor; use indexmap::IndexMap; -use shirabe_php_shim::{PharData, PhpMixed}; - -shirabe_php_shim::impl_php_class!(TarDownloader, r"Composer\Downloader\TarDownloader"); +use shirabe_php_shim::{PharData, PhpMixed, impl_php_class}; #[derive(Debug)] pub struct TarDownloader { @@ -23,6 +21,8 @@ pub struct TarDownloader { cleanup_executed: std::cell::RefCell>, } +impl_php_class!(TarDownloader, r"Composer\Downloader\TarDownloader"); + impl TarDownloader { pub fn new( io: std::rc::Rc>, diff --git a/crates/shirabe/src/downloader/xz_downloader.rs b/crates/shirabe/src/downloader/xz_downloader.rs index 6be5ea2e..49dd9deb 100644 --- a/crates/shirabe/src/downloader/xz_downloader.rs +++ b/crates/shirabe/src/downloader/xz_downloader.rs @@ -13,9 +13,7 @@ use crate::util::HttpDownloader; use crate::util::ProcessExecutor; use anyhow::bail; use indexmap::IndexMap; -use shirabe_php_shim::PhpMixed; - -shirabe_php_shim::impl_php_class!(XzDownloader, r"Composer\Downloader\XzDownloader"); +use shirabe_php_shim::{PhpMixed, impl_php_class}; #[derive(Debug)] pub struct XzDownloader { @@ -23,6 +21,8 @@ pub struct XzDownloader { cleanup_executed: std::cell::RefCell>, } +impl_php_class!(XzDownloader, r"Composer\Downloader\XzDownloader"); + impl XzDownloader { pub fn new( io: std::rc::Rc>, diff --git a/crates/shirabe/src/downloader/zip_downloader.rs b/crates/shirabe/src/downloader/zip_downloader.rs index 9d7dbe7a..350ea738 100644 --- a/crates/shirabe/src/downloader/zip_downloader.rs +++ b/crates/shirabe/src/downloader/zip_downloader.rs @@ -13,8 +13,8 @@ use shirabe_external_packages::symfony::process::ExecutableFinder; use shirabe_php_shim::{ DIRECTORY_SEPARATOR, ErrorException, PhpMixed, RuntimeException, UnexpectedValueException, ZipArchive, bin2hex, class_exists, file_exists, file_get_contents, filesize, function_exists, - hash_file, is_file, json_encode, php_regex, random_int, str_contains, str_replace, strlen, - substr, version_compare, + hash_file, impl_php_class, is_file, json_encode, php_regex, random_int, str_contains, + str_replace, strlen, substr, version_compare, }; use std::sync::Mutex; @@ -22,8 +22,6 @@ static UNZIP_COMMANDS: Mutex>>> = Mutex::new(None); static HAS_ZIP_ARCHIVE: Mutex> = Mutex::new(None); static IS_WINDOWS: Mutex> = Mutex::new(None); -shirabe_php_shim::impl_php_class!(ZipDownloader, r"Composer\Downloader\ZipDownloader"); - #[derive(Debug)] pub struct ZipDownloader { inner: FileDownloader, @@ -32,6 +30,8 @@ pub struct ZipDownloader { zip_archive_object: std::cell::RefCell>, } +impl_php_class!(ZipDownloader, r"Composer\Downloader\ZipDownloader"); + impl ZipDownloader { pub fn new( io: std::rc::Rc>, diff --git a/crates/shirabe/tests/downloader/download_manager_test.rs b/crates/shirabe/tests/downloader/download_manager_test.rs index b7d88a21..9d12bad6 100644 --- a/crates/shirabe/tests/downloader/download_manager_test.rs +++ b/crates/shirabe/tests/downloader/download_manager_test.rs @@ -7,7 +7,7 @@ use shirabe::downloader::DownloaderInterface; use shirabe::downloader::download_manager::DownloadManager; use shirabe::io::IOInterface; use shirabe::package::handle::{CompletePackageHandle, PackageInterfaceHandle}; -use shirabe_php_shim::{PhpMixed, RuntimeException}; +use shirabe_php_shim::{PhpMixed, RuntimeException, impl_php_class}; use shirabe_semver::VersionParser; // PHP mocks `Composer\Downloader\DownloaderInterface` with getMockBuilder. @@ -61,7 +61,7 @@ mockall::mock! { // PHPUnit reports a generated class name for `getMockBuilder(DownloaderInterface::class)`; // no ported assertion reads it, so the mock answers with the interface it stands in for. -shirabe_php_shim::impl_php_class!(MockDownloader, r"Composer\Downloader\DownloaderInterface"); +impl_php_class!(MockDownloader, r"Composer\Downloader\DownloaderInterface"); /// ref: DownloadManagerTest::createPackageMock /// -- cgit v1.3.1