//! ref: composer/src/Composer/Repository/WritableArrayRepository.php use crate::installer::InstallationManager; use crate::repository::ArrayRepository; use crate::repository::RepositoryInterface; use crate::repository::RepositoryInterfaceWeakHandle; use anyhow::Result; use shirabe_php_shim::Countable; #[derive(Debug)] pub struct WritableArrayRepository { inner: ArrayRepository, pub(crate) dev_package_names: Vec, dev_mode: Option, } impl WritableArrayRepository { pub fn new(packages: Vec) -> Result { Ok(Self { inner: ArrayRepository::new(packages)?, dev_package_names: Vec::new(), dev_mode: None, }) } /// Returns true if dev requirements were installed, false if --no-dev was used, None if yet unknown. pub fn get_dev_mode(&self) -> Option { self.dev_mode } pub fn set_dev_package_names(&mut self, dev_package_names: Vec) { self.dev_package_names = dev_package_names; } pub fn get_dev_package_names(&self) -> &Vec { &self.dev_package_names } pub fn write( &mut self, dev_mode: bool, _installation_manager: &InstallationManager, ) -> Result<()> { self.dev_mode = Some(dev_mode); Ok(()) } pub fn reload(&mut self) { self.dev_mode = None; } pub fn add_package(&mut self, package: crate::package::PackageInterfaceHandle) -> Result<()> { self.inner.add_package(package) } pub fn set_self_handle(&self, weak: RepositoryInterfaceWeakHandle) { self.inner.set_self_handle(weak); } pub fn remove_package( &mut self, package: crate::package::PackageInterfaceHandle, ) -> Result<()> { let _ = package; // TODO(phase-b): delegate to ArrayRepository once it implements remove_package Ok(()) } pub fn initialize(&mut self) -> Result<()> { // TODO(phase-b): inner ArrayRepository::initialize signature Ok(()) } pub fn get_canonical_packages(&self) -> Vec { // TODO(phase-b): delegate to inner once it exposes get_canonical_packages Vec::new() } pub fn get_packages(&self) -> Vec { crate::repository::RepositoryInterface::get_packages(&self.inner) } pub fn get_repo_name(&self) -> String { self.inner.get_repo_name() } pub fn count(&self) -> i64 { Countable::count(&self.inner) } }