aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/src/event_dispatcher
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-06-06 02:13:59 +0900
committernsfisis <nsfisis@gmail.com>2026-06-06 02:13:59 +0900
commitcd25c3e193f05a5e89bca2a1c706c85fdc9c9155 (patch)
tree86971cac4e5011af0077416e6ca674c4251496ee /crates/shirabe/src/event_dispatcher
parentb299a0c9b66523b9630b4cf6d3dca1509c3692b5 (diff)
downloadphp-shirabe-cd25c3e193f05a5e89bca2a1c706c85fdc9c9155.tar.gz
php-shirabe-cd25c3e193f05a5e89bca2a1c706c85fdc9c9155.tar.zst
php-shirabe-cd25c3e193f05a5e89bca2a1c706c85fdc9c9155.zip
refactor(repository): make read methods fallible and take &mut self
Change RepositoryInterface and WritableRepositoryInterface read methods (find_package, find_packages, get_packages, load_packages, search, get_providers, get_canonical_packages) to take &mut self and return anyhow::Result, so lazy-loading repositories such as ComposerRepository can perform fallible I/O and mutate internal state on access. Update all implementors and call sites to propagate the Result and pass mutable references. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe/src/event_dispatcher')
-rw-r--r--crates/shirabe/src/event_dispatcher/event_dispatcher.rs18
1 files changed, 10 insertions, 8 deletions
diff --git a/crates/shirabe/src/event_dispatcher/event_dispatcher.rs b/crates/shirabe/src/event_dispatcher/event_dispatcher.rs
index ea0d69a..7122a4b 100644
--- a/crates/shirabe/src/event_dispatcher/event_dispatcher.rs
+++ b/crates/shirabe/src/event_dispatcher/event_dispatcher.rs
@@ -308,7 +308,7 @@ impl EventDispatcher {
if !is_string_callable {
// TODO(plugin): non-string callable handling — verify is_callable, invoke,
// and replicate the get_class / write_error / is_callable error path from PHP.
- self.make_autoloader(event, &callable);
+ let _ = self.make_autoloader(event, &callable);
if !is_callable(&PhpMixed::Null) {
let (class_name, method) = match &callable {
Callable::ArrayCallable(first, m) => {
@@ -504,7 +504,8 @@ impl EventDispatcher {
let class_name = substr(callable_str, 0, Some(pos));
let method_name = substr(callable_str, pos + 2, None);
- self.make_autoloader(event, &Callable::String(callable_str.clone()));
+ let _ =
+ self.make_autoloader(event, &Callable::String(callable_str.clone()));
if !class_exists(&class_name) {
self.io.write_error3(&format!(
"<warning>Class {} is not autoloadable, can not call {} script</warning>",
@@ -550,7 +551,7 @@ impl EventDispatcher {
Callable::String(ref callable_str) if self.is_command_class(callable_str) => {
let class_name = callable_str.clone();
- self.make_autoloader(
+ let _ = self.make_autoloader(
event,
&Callable::ArrayCallable(
Box::new(PhpMixed::String(callable_str.clone())),
@@ -1223,11 +1224,11 @@ impl EventDispatcher {
"unsupported".to_string()
}
- fn make_autoloader(&mut self, event: &Event, callable: &Callable) {
+ fn make_autoloader(&mut self, event: &Event, callable: &Callable) -> anyhow::Result<()> {
let composer = self.composer();
// TODO(plugin): full autoloader rebuild on plugin-supplied callables — currently a stub.
let Some(composer) = composer.as_full() else {
- return;
+ return Ok(());
};
let composer = composer.borrow_mut();
@@ -1244,7 +1245,7 @@ impl EventDispatcher {
Callable::Closure => "closure".to_string(),
};
if self.previous_listeners.contains_key(&callable_key) {
- return;
+ return Ok(());
}
self.previous_listeners.insert(callable_key, true);
@@ -1253,7 +1254,7 @@ impl EventDispatcher {
.get_repository_manager()
.borrow()
.get_local_repository()
- .get_canonical_packages();
+ .get_canonical_packages()?;
let generator = composer.get_autoload_generator().clone();
let generator = generator.borrow();
let mut hash_input = packages
@@ -1269,7 +1270,7 @@ impl EventDispatcher {
let hash_value = hash("sha256", &hash_input);
if self.previous_hash.as_deref() == Some(hash_value.as_str()) {
- return;
+ return Ok(());
}
self.previous_hash = Some(hash_value);
@@ -1302,6 +1303,7 @@ impl EventDispatcher {
let mut loader = generator.create_loader(&map, Some(vendor_dir.clone()));
loader.register(false);
self.loader = Some(loader);
+ Ok(())
}
// ---- helpers ----