diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-06-06 02:13:59 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-06-06 02:13:59 +0900 |
| commit | cd25c3e193f05a5e89bca2a1c706c85fdc9c9155 (patch) | |
| tree | 86971cac4e5011af0077416e6ca674c4251496ee /crates/shirabe/src/event_dispatcher | |
| parent | b299a0c9b66523b9630b4cf6d3dca1509c3692b5 (diff) | |
| download | php-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.rs | 18 |
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 ---- |
