From 4e96d8c2ad7e09f27fed6b9ec6b02f1228fa7a47 Mon Sep 17 00:00:00 2001 From: nsfisis Date: Tue, 12 May 2026 04:07:02 +0900 Subject: feat(port): port JsonLoader.php --- crates/shirabe/src/package/loader/json_loader.rs | 35 ++++++++++++++++++++++++ 1 file changed, 35 insertions(+) (limited to 'crates/shirabe/src/package/loader') 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, +} + +impl JsonLoader { + pub fn new(loader: Box) -> Self { + Self { loader } + } + + pub fn load(&self, json: JsonLoaderInput) -> Result> { + 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)) + } +} -- cgit v1.3.1