diff options
Diffstat (limited to 'crates/shirabe-external-packages/src/symfony/console/output')
5 files changed, 108 insertions, 13 deletions
diff --git a/crates/shirabe-external-packages/src/symfony/console/output/console_output.rs b/crates/shirabe-external-packages/src/symfony/console/output/console_output.rs new file mode 100644 index 0000000..5aa6ff0 --- /dev/null +++ b/crates/shirabe-external-packages/src/symfony/console/output/console_output.rs @@ -0,0 +1,73 @@ +use crate::symfony::console::formatter::OutputFormatter; +use crate::symfony::console::output::ConsoleOutputInterface; +use crate::symfony::console::output::OutputInterface; + +#[derive(Debug)] +pub struct ConsoleOutput; + +impl ConsoleOutput { + pub fn new( + _verbosity: i64, + _decorated: Option<bool>, + _formatter: Option<OutputFormatter>, + ) -> Self { + todo!() + } +} + +impl ConsoleOutputInterface for ConsoleOutput { + fn get_error_output(&self) -> std::rc::Rc<std::cell::RefCell<dyn OutputInterface>> { + todo!() + } + + fn set_error_output(&mut self, _error: std::rc::Rc<std::cell::RefCell<dyn OutputInterface>>) { + todo!() + } +} + +impl OutputInterface for ConsoleOutput { + fn is_console_output_interface(&self) -> bool { + true + } + + fn as_console_output_interface(&self) -> Option<&dyn ConsoleOutputInterface> { + Some(self) + } + + fn write(&self, _messages: &str, _newline: bool, _type: i64) { + todo!() + } + fn writeln(&self, _messages: &str, _type: i64) { + todo!() + } + fn set_verbosity(&self, _level: i64) { + todo!() + } + fn get_verbosity(&self) -> i64 { + todo!() + } + fn is_quiet(&self) -> bool { + todo!() + } + fn is_verbose(&self) -> bool { + todo!() + } + fn is_very_verbose(&self) -> bool { + todo!() + } + fn is_debug(&self) -> bool { + todo!() + } + fn set_decorated(&self, _decorated: bool) { + todo!() + } + fn is_decorated(&self) -> bool { + todo!() + } + fn set_formatter(&self, _formatter: OutputFormatter) { + todo!() + } + fn get_formatter(&self) -> &OutputFormatter { + todo!() + } +} diff --git a/crates/shirabe-external-packages/src/symfony/console/output/console_output_interface.rs b/crates/shirabe-external-packages/src/symfony/console/output/console_output_interface.rs new file mode 100644 index 0000000..0b5b432 --- /dev/null +++ b/crates/shirabe-external-packages/src/symfony/console/output/console_output_interface.rs @@ -0,0 +1,6 @@ +use crate::symfony::console::output::OutputInterface; + +pub trait ConsoleOutputInterface: OutputInterface { + fn get_error_output(&self) -> std::rc::Rc<std::cell::RefCell<dyn OutputInterface>>; + fn set_error_output(&mut self, error: std::rc::Rc<std::cell::RefCell<dyn OutputInterface>>); +} diff --git a/crates/shirabe-external-packages/src/symfony/console/output/mod.rs b/crates/shirabe-external-packages/src/symfony/console/output/mod.rs index 8f0c7f1..ac2b687 100644 --- a/crates/shirabe-external-packages/src/symfony/console/output/mod.rs +++ b/crates/shirabe-external-packages/src/symfony/console/output/mod.rs @@ -1,5 +1,9 @@ +pub mod console_output; +pub mod console_output_interface; pub mod output_interface; pub mod stream_output; +pub use console_output::*; +pub use console_output_interface::*; pub use output_interface::*; pub use stream_output::*; diff --git a/crates/shirabe-external-packages/src/symfony/console/output/output_interface.rs b/crates/shirabe-external-packages/src/symfony/console/output/output_interface.rs index 4d5b7c7..18eadfb 100644 --- a/crates/shirabe-external-packages/src/symfony/console/output/output_interface.rs +++ b/crates/shirabe-external-packages/src/symfony/console/output/output_interface.rs @@ -1,24 +1,33 @@ use crate::symfony::console::formatter::OutputFormatter; +use crate::symfony::console::output::ConsoleOutputInterface; -pub trait OutputInterface { - fn write(&mut self, messages: &str, newline: bool, r#type: i64); - fn writeln(&mut self, messages: &str, r#type: i64); - fn set_verbosity(&mut self, level: i64); +pub trait OutputInterface: std::fmt::Debug { + // PHP class semantics: OutputInterface methods take &self with interior mutability, + // because output objects are shared by reference across the PHP code. + fn write(&self, messages: &str, newline: bool, r#type: i64); + fn writeln(&self, messages: &str, r#type: i64); + fn set_verbosity(&self, level: i64); fn get_verbosity(&self) -> i64; fn is_quiet(&self) -> bool; fn is_verbose(&self) -> bool; fn is_very_verbose(&self) -> bool; fn is_debug(&self) -> bool; - fn set_decorated(&mut self, decorated: bool); + fn set_decorated(&self, decorated: bool); fn is_decorated(&self) -> bool; - fn set_formatter(&mut self, formatter: OutputFormatter); - fn get_formatter(&mut self) -> &mut OutputFormatter; + fn set_formatter(&self, formatter: OutputFormatter); + fn get_formatter(&self) -> &OutputFormatter; /// PHP: `$output instanceof ConsoleOutputInterface`. Default false; ConsoleOutput overrides. fn is_console_output_interface(&self) -> bool { false } + /// PHP: `$output instanceof ConsoleOutputInterface`. Returns the output as a + /// ConsoleOutputInterface trait object when it is one. Default None; ConsoleOutput overrides. + fn as_console_output_interface(&self) -> Option<&dyn ConsoleOutputInterface> { + None + } + /// PHP: only StreamOutput exposes `getStream()`. Default panics for outputs without one. fn get_stream(&self) -> shirabe_php_shim::PhpResource { todo!("get_stream not available on this OutputInterface implementation") diff --git a/crates/shirabe-external-packages/src/symfony/console/output/stream_output.rs b/crates/shirabe-external-packages/src/symfony/console/output/stream_output.rs index 654e7f6..6aa79b8 100644 --- a/crates/shirabe-external-packages/src/symfony/console/output/stream_output.rs +++ b/crates/shirabe-external-packages/src/symfony/console/output/stream_output.rs @@ -12,13 +12,13 @@ impl StreamOutput { } impl OutputInterface for StreamOutput { - fn write(&mut self, _messages: &str, _newline: bool, _type: i64) { + fn write(&self, _messages: &str, _newline: bool, _type: i64) { todo!() } - fn writeln(&mut self, _messages: &str, _type: i64) { + fn writeln(&self, _messages: &str, _type: i64) { todo!() } - fn set_verbosity(&mut self, _level: i64) { + fn set_verbosity(&self, _level: i64) { todo!() } fn get_verbosity(&self) -> i64 { @@ -36,16 +36,19 @@ impl OutputInterface for StreamOutput { fn is_debug(&self) -> bool { todo!() } - fn set_decorated(&mut self, _decorated: bool) { + fn set_decorated(&self, _decorated: bool) { todo!() } fn is_decorated(&self) -> bool { todo!() } - fn set_formatter(&mut self, _formatter: OutputFormatter) { + fn set_formatter(&self, _formatter: OutputFormatter) { todo!() } - fn get_formatter(&mut self) -> &mut OutputFormatter { + fn get_formatter(&self) -> &OutputFormatter { + todo!() + } + fn get_stream(&self) -> shirabe_php_shim::PhpResource { todo!() } } |
