diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-05-12 04:07:02 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-05-12 04:07:02 +0900 |
| commit | 4e96d8c2ad7e09f27fed6b9ec6b02f1228fa7a47 (patch) | |
| tree | aba209110be6524f600e41a9865e8d77808948ee /crates/shirabe/src/package/loader/json_loader.rs | |
| parent | 3e2f7d6803cade819f960b71106338860194fcf1 (diff) | |
| download | php-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.rs | 35 |
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)) + } +} |
