aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-06-06 17:02:16 +0900
committernsfisis <nsfisis@gmail.com>2026-06-06 17:02:16 +0900
commit5c872cd39802739bfe5e21913b968fe0ae934830 (patch)
tree6cc561f58bf3b1fbd7b943c5b2cfca6311ea67ed /crates/shirabe
parent44e82cc7d937d49593c6f436d03a38f3371b6873 (diff)
downloadphp-shirabe-5c872cd39802739bfe5e21913b968fe0ae934830.tar.gz
php-shirabe-5c872cd39802739bfe5e21913b968fe0ae934830.tar.zst
php-shirabe-5c872cd39802739bfe5e21913b968fe0ae934830.zip
fix(json-loader): pass decoded config to loader instead of empty map
The Phase B stub discarded the decoded PhpMixed and handed an empty IndexMap to LoaderInterface::load, so nothing was actually loaded. Unbox PhpMixed::Array into the map; mirror PHP's array $config type juggling by raising a TypeError for non-array decode results. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe')
-rw-r--r--crates/shirabe/src/package/loader/json_loader.rs17
1 files changed, 14 insertions, 3 deletions
diff --git a/crates/shirabe/src/package/loader/json_loader.rs b/crates/shirabe/src/package/loader/json_loader.rs
index 5f8cc4f..fa0e914 100644
--- a/crates/shirabe/src/package/loader/json_loader.rs
+++ b/crates/shirabe/src/package/loader/json_loader.rs
@@ -4,6 +4,8 @@ use crate::json::JsonFile;
use crate::package::PackageInterfaceHandle;
use crate::package::loader::LoaderInterface;
use anyhow::Result;
+use indexmap::IndexMap;
+use shirabe_php_shim::{PhpMixed, TypeError};
use std::path::Path;
pub enum JsonLoaderInput {
@@ -30,8 +32,17 @@ impl JsonLoader {
JsonLoaderInput::String(ref s) => JsonFile::parse_json(Some(s), None)?,
};
- // TODO(phase-b): JsonFile::parse_json returns PhpMixed; loader::load expects IndexMap
- let _ = config;
- self.loader.load(indexmap::IndexMap::new(), None)
+ let config: IndexMap<String, PhpMixed> = match config {
+ PhpMixed::Array(m) => m.into_iter().map(|(k, v)| (k, *v)).collect(),
+ _ => {
+ return Err(TypeError {
+ message: "Composer\\Package\\Loader\\LoaderInterface::load(): Argument #1 ($config) must be of type array".to_string(),
+ code: 0,
+ }
+ .into());
+ }
+ };
+
+ self.loader.load(config, None)
}
}