diff options
Diffstat (limited to 'crates')
| -rw-r--r-- | crates/shirabe-symfony-finder/Cargo.toml | 1 | ||||
| -rw-r--r-- | crates/shirabe-symfony-finder/src/spl_file_info.rs | 14 |
2 files changed, 11 insertions, 4 deletions
diff --git a/crates/shirabe-symfony-finder/Cargo.toml b/crates/shirabe-symfony-finder/Cargo.toml index 8088aa23..0823bfaf 100644 --- a/crates/shirabe-symfony-finder/Cargo.toml +++ b/crates/shirabe-symfony-finder/Cargo.toml @@ -10,6 +10,7 @@ license.workspace = true [dependencies] shirabe-pcre.workspace = true shirabe-php-shim.workspace = true +anyhow.workspace = true chrono.workspace = true indexmap.workspace = true regex.workspace = true diff --git a/crates/shirabe-symfony-finder/src/spl_file_info.rs b/crates/shirabe-symfony-finder/src/spl_file_info.rs index b719efc5..40bd153a 100644 --- a/crates/shirabe-symfony-finder/src/spl_file_info.rs +++ b/crates/shirabe-symfony-finder/src/spl_file_info.rs @@ -76,9 +76,15 @@ impl SplFileInfo { shirabe_php_shim::realpath(&self.pathname) } - pub fn get_size(&self) -> i64 { - // \SplFileInfo::getSize() returns the file size in bytes (throws on failure). - // TODO(php-semantics): PHP throws a \RuntimeException on stat failure; this returns 0 instead. - shirabe_php_shim::filesize(&self.pathname).unwrap_or(0) + pub fn get_size(&self) -> anyhow::Result<i64> { + // Inherited from \SplFileInfo, whose failure message names the base class even for subclasses. + match shirabe_php_shim::filesize(&self.pathname) { + Some(size) => Ok(size), + None => Err(shirabe_php_shim::RuntimeException::new(format!( + "SplFileInfo::getSize(): stat failed for {}", + self.pathname + )) + .into()), + } } } |
