aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/src/package/loader/json_loader.rs
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-05-12 04:07:02 +0900
committernsfisis <nsfisis@gmail.com>2026-05-12 04:07:02 +0900
commit4e96d8c2ad7e09f27fed6b9ec6b02f1228fa7a47 (patch)
treeaba209110be6524f600e41a9865e8d77808948ee /crates/shirabe/src/package/loader/json_loader.rs
parent3e2f7d6803cade819f960b71106338860194fcf1 (diff)
downloadphp-shirabe-4e96d8c2ad7e09f27fed6b9ec6b02f1228fa7a47.tar.gz
php-shirabe-4e96d8c2ad7e09f27fed6b9ec6b02f1228fa7a47.tar.zst
php-shirabe-4e96d8c2ad7e09f27fed6b9ec6b02f1228fa7a47.zip
feat(port): port JsonLoader.php
Diffstat (limited to 'crates/shirabe/src/package/loader/json_loader.rs')
-rw-r--r--crates/shirabe/src/package/loader/json_loader.rs35
1 files changed, 35 insertions, 0 deletions
diff --git a/crates/shirabe/src/package/loader/json_loader.rs b/crates/shirabe/src/package/loader/json_loader.rs
index 520091c..4e7faf9 100644
--- a/crates/shirabe/src/package/loader/json_loader.rs
+++ b/crates/shirabe/src/package/loader/json_loader.rs
@@ -1 +1,36 @@
//! ref: composer/src/Composer/Package/Loader/JsonLoader.php
+
+use std::path::Path;
+use anyhow::Result;
+use crate::json::json_file::JsonFile;
+use crate::package::base_package::BasePackage;
+use crate::package::loader::loader_interface::LoaderInterface;
+
+pub enum JsonLoaderInput {
+ File(JsonFile),
+ String(String),
+}
+
+pub struct JsonLoader {
+ loader: Box<dyn LoaderInterface>,
+}
+
+impl JsonLoader {
+ pub fn new(loader: Box<dyn LoaderInterface>) -> Self {
+ Self { loader }
+ }
+
+ pub fn load(&self, json: JsonLoaderInput) -> Result<Box<BasePackage>> {
+ let config = match json {
+ JsonLoaderInput::File(json_file) => json_file.read()?,
+ JsonLoaderInput::String(ref s) if Path::new(s).exists() => {
+ JsonFile::parse_json(&std::fs::read_to_string(s)?, Some(s))?
+ }
+ JsonLoaderInput::String(ref s) => {
+ JsonFile::parse_json(s, None)?
+ }
+ };
+
+ Ok(self.loader.load(config, None))
+ }
+}