diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-06-24 00:50:07 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-06-24 00:50:07 +0900 |
| commit | 0ccb1a7740e63e4118c156f81aacf6381ae38464 (patch) | |
| tree | 9087108ae74fd460c5f0f540405ce245bd9000a8 /crates/shirabe-external-packages/src/symfony/console/input | |
| parent | 27c961ee7bee5c775e1902e59f74a9871d31321d (diff) | |
| download | php-shirabe-0ccb1a7740e63e4118c156f81aacf6381ae38464.tar.gz php-shirabe-0ccb1a7740e63e4118c156f81aacf6381ae38464.tar.zst php-shirabe-0ccb1a7740e63e4118c156f81aacf6381ae38464.zip | |
feat(io): implement BufferIO new/get_output/set_user_inputs
Wire StreamOutput into BufferIO::new, retrieve the stream in get_output
via downcast, and set the user input stream in set_user_inputs.
Add as_streamable_mut to InputInterface (and ArgvInput) for mutable
streamable access, and make StringInput implement StreamableInputInterface
to match PHP, where StringInput is streamable via its Input ancestor.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe-external-packages/src/symfony/console/input')
3 files changed, 28 insertions, 0 deletions
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 0784c7b..875d217 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 @@ -623,6 +623,10 @@ impl InputInterface for ArgvInput { fn as_streamable(&self) -> Option<&dyn StreamableInputInterface> { Some(self) } + + fn as_streamable_mut(&mut self) -> Option<&mut dyn StreamableInputInterface> { + Some(self) + } } impl StreamableInputInterface for ArgvInput { 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 ccb5a98..6ef7877 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 @@ -48,4 +48,9 @@ pub trait InputInterface: std::fmt::Debug + shirabe_php_shim::AsAny { fn as_streamable(&self) -> Option<&dyn StreamableInputInterface> { None } + + /// Mutable counterpart of `as_streamable`, needed to call `set_stream`/`set_interactive`. + fn as_streamable_mut(&mut self) -> Option<&mut dyn StreamableInputInterface> { + None + } } 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 e04e519..c3a0262 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 @@ -4,6 +4,7 @@ use crate::symfony::console::exception::invalid_argument_exception::InvalidArgum use crate::symfony::console::input::argv_input::ArgvInput; use crate::symfony::console::input::input_definition::InputDefinition; use crate::symfony::console::input::input_interface::InputInterface; +use crate::symfony::console::input::streamable_input_interface::StreamableInputInterface; use indexmap::IndexMap; use shirabe_php_shim::{CaptureKey, PhpMixed}; @@ -210,4 +211,22 @@ impl InputInterface for StringInput { fn set_interactive(&mut self, interactive: bool) { self.inner.set_interactive(interactive) } + + fn as_streamable(&self) -> Option<&dyn StreamableInputInterface> { + Some(self) + } + + fn as_streamable_mut(&mut self) -> Option<&mut dyn StreamableInputInterface> { + Some(self) + } +} + +impl StreamableInputInterface for StringInput { + fn set_stream(&mut self, stream: shirabe_php_shim::PhpResource) { + self.inner.set_stream(stream) + } + + fn get_stream(&self) -> Option<shirabe_php_shim::PhpResource> { + self.inner.get_stream() + } } |
