aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-08-05 03:57:48 +0900
committernsfisis <nsfisis@gmail.com>2026-08-05 03:57:48 +0900
commitbe3458128ef09b3d1074b134f2822162e077e165 (patch)
treec313e180c63f60b65485e42ed371398dcac2aa3a
parentbaf82ff950fef512c3e9bfed30747adce034a92a (diff)
downloadphp-shirabe-be3458128ef09b3d1074b134f2822162e077e165.tar.gz
php-shirabe-be3458128ef09b3d1074b134f2822162e077e165.tar.zst
php-shirabe-be3458128ef09b3d1074b134f2822162e077e165.zip
feat(symfony-console): expose the input __toString on InputInterface
Every Symfony input already ports __toString as a Display impl, but callers holding a dyn InputInterface could not reach it; forwarding a command run across the plugin RPC boundary needs the stringified input. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-rw-r--r--crates/shirabe-external-packages/src/symfony/console/completion/completion_input.rs4
-rw-r--r--crates/shirabe-external-packages/src/symfony/console/input/argv_input.rs4
-rw-r--r--crates/shirabe-external-packages/src/symfony/console/input/array_input.rs4
-rw-r--r--crates/shirabe-external-packages/src/symfony/console/input/input_interface.rs4
-rw-r--r--crates/shirabe-external-packages/src/symfony/console/input/string_input.rs4
5 files changed, 20 insertions, 0 deletions
diff --git a/crates/shirabe-external-packages/src/symfony/console/completion/completion_input.rs b/crates/shirabe-external-packages/src/symfony/console/completion/completion_input.rs
index 636e794c..f8bddcee 100644
--- a/crates/shirabe-external-packages/src/symfony/console/completion/completion_input.rs
+++ b/crates/shirabe-external-packages/src/symfony/console/completion/completion_input.rs
@@ -294,6 +294,10 @@ impl crate::symfony::console::input::input_interface::InputInterface for Complet
self.inner.get_first_argument()
}
+ fn __to_string(&self) -> String {
+ self.to_string()
+ }
+
fn has_parameter_option(&self, values: PhpMixed, only_params: bool) -> bool {
crate::symfony::console::input::input_interface::InputInterface::has_parameter_option(
&self.inner,
diff --git a/crates/shirabe-external-packages/src/symfony/console/input/argv_input.rs b/crates/shirabe-external-packages/src/symfony/console/input/argv_input.rs
index 59828631..fdc2dcc2 100644
--- a/crates/shirabe-external-packages/src/symfony/console/input/argv_input.rs
+++ b/crates/shirabe-external-packages/src/symfony/console/input/argv_input.rs
@@ -619,6 +619,10 @@ impl InputInterface for ArgvInput {
self.inner.set_interactive(interactive)
}
+ fn __to_string(&self) -> String {
+ self.to_string()
+ }
+
fn as_streamable(&self) -> Option<&dyn StreamableInputInterface> {
Some(self)
}
diff --git a/crates/shirabe-external-packages/src/symfony/console/input/array_input.rs b/crates/shirabe-external-packages/src/symfony/console/input/array_input.rs
index eeea48ca..1ae7069d 100644
--- a/crates/shirabe-external-packages/src/symfony/console/input/array_input.rs
+++ b/crates/shirabe-external-packages/src/symfony/console/input/array_input.rs
@@ -366,6 +366,10 @@ impl InputInterface for ArrayInput {
self.inner.set_interactive(interactive)
}
+ fn __to_string(&self) -> String {
+ self.to_string()
+ }
+
fn as_streamable(&self) -> Option<&dyn StreamableInputInterface> {
Some(self)
}
diff --git a/crates/shirabe-external-packages/src/symfony/console/input/input_interface.rs b/crates/shirabe-external-packages/src/symfony/console/input/input_interface.rs
index 6ef7877e..e4beca91 100644
--- a/crates/shirabe-external-packages/src/symfony/console/input/input_interface.rs
+++ b/crates/shirabe-external-packages/src/symfony/console/input/input_interface.rs
@@ -43,6 +43,10 @@ pub trait InputInterface: std::fmt::Debug + shirabe_php_shim::AsAny {
fn set_interactive(&mut self, interactive: bool);
+ /// PHP's `(string) $input` (the `__toString` magic method every Symfony input implements);
+ /// implementors forward to their `Display` impl.
+ fn __to_string(&self) -> String;
+
/// Models PHP's `$input instanceof StreamableInputInterface` check. Streamable inputs override
/// this to return `Some(self)`; everything else falls back to `None`.
fn as_streamable(&self) -> Option<&dyn StreamableInputInterface> {
diff --git a/crates/shirabe-external-packages/src/symfony/console/input/string_input.rs b/crates/shirabe-external-packages/src/symfony/console/input/string_input.rs
index c9871c34..3b3c3207 100644
--- a/crates/shirabe-external-packages/src/symfony/console/input/string_input.rs
+++ b/crates/shirabe-external-packages/src/symfony/console/input/string_input.rs
@@ -224,6 +224,10 @@ impl InputInterface for StringInput {
self.inner.set_interactive(interactive)
}
+ fn __to_string(&self) -> String {
+ self.to_string()
+ }
+
fn as_streamable(&self) -> Option<&dyn StreamableInputInterface> {
Some(self)
}