diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-06-21 18:49:24 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-06-21 18:52:05 +0900 |
| commit | a3171eefd8f8e520329bdd8f613e83ba6f0a7c13 (patch) | |
| tree | 195599a0c46b97349f017b97e965e4b4c1794f36 /crates/shirabe-php-shim/src/json.rs | |
| parent | e24bf7e3b6b16a77c2eaeae9ba7b453f5138ff25 (diff) | |
| download | php-shirabe-a3171eefd8f8e520329bdd8f613e83ba6f0a7c13.tar.gz php-shirabe-a3171eefd8f8e520329bdd8f613e83ba6f0a7c13.tar.zst php-shirabe-a3171eefd8f8e520329bdd8f613e83ba6f0a7c13.zip | |
refactor(php-shim): remove ArrayObject, inline IndexMap into PhpMixed::Object
ArrayObject was only a thin wrapper around IndexMap<String, PhpMixed>
used as an empty-{} vs empty-[] marker and as the assoc=false JSON
object representation; no reference semantics were involved. Inline its
payload directly into PhpMixed::Object and drop the type along with the
now-dead StdClass.
Side effects of the unification:
- ArrayObject::new was todo!(); the config --global / object-typed get
paths that built PhpMixed::Object(ArrayObject::new(None)) no longer
panic.
- base_config_command wrote 'config' as PhpMixed::Array(empty), emitting
[] instead of {}; now matches PHP's new \ArrayObject ({}).
- The dead is::<StdClass>()/is::<ArrayObject>() instanceof checks in
JsonManipulator are replaced with the faithful as_object() mapping.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe-php-shim/src/json.rs')
| -rw-r--r-- | crates/shirabe-php-shim/src/json.rs | 7 |
1 files changed, 2 insertions, 5 deletions
diff --git a/crates/shirabe-php-shim/src/json.rs b/crates/shirabe-php-shim/src/json.rs index 23c4c41..3d3ee5b 100644 --- a/crates/shirabe-php-shim/src/json.rs +++ b/crates/shirabe-php-shim/src/json.rs @@ -1,4 +1,3 @@ -use crate::ArrayObject; use crate::PhpMixed; use indexmap::IndexMap; @@ -58,7 +57,7 @@ pub fn json_encode_ex<T: serde::Serialize + ?Sized>( // PHP's two-argument `json_decode`: without JSON_THROW_ON_ERROR it never throws, // returning null on malformed input. With `assoc` false, JSON objects decode to -// stdClass-equivalent ArrayObject values; with `assoc` true, to associative arrays. +// stdClass-equivalent `PhpMixed::Object` values; with `assoc` true, to associative arrays. pub fn json_decode(s: &str, assoc: bool) -> anyhow::Result<PhpMixed> { match serde_json::from_str::<serde_json::Value>(s) { Ok(value) => Ok(json_value_to_php_mixed(value, assoc)), @@ -91,9 +90,7 @@ fn json_value_to_php_mixed(value: serde_json::Value, assoc: bool) -> PhpMixed { if assoc { PhpMixed::Array(data) } else { - PhpMixed::Object(ArrayObject { - data: data.into_iter().collect(), - }) + PhpMixed::Object(data) } } } |
