From 14bb54918d064582de8d5250185c0bf7fc1fea79 Mon Sep 17 00:00:00 2001 From: Nick Mitchell Date: Mon, 7 Apr 2025 13:04:14 -0400 Subject: [PATCH] feat: add support for multiline reads to rust interpreter Signed-off-by: Nick Mitchell --- .../src-tauri/src/pdl/interpreter.rs | 18 ++++++++++++++---- .../src-tauri/tests/cli/read-stdin.pdl | 5 ++--- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/pdl-live-react/src-tauri/src/pdl/interpreter.rs b/pdl-live-react/src-tauri/src/pdl/interpreter.rs index 4364f1d6d..7caaadbed 100644 --- a/pdl-live-react/src-tauri/src/pdl/interpreter.rs +++ b/pdl-live-react/src-tauri/src/pdl/interpreter.rs @@ -276,15 +276,25 @@ impl<'a> Interpreter<'a> { async fn run_read(&mut self, block: &ReadBlock, _context: Context) -> Interpretation { let trace = block.clone(); - if let Some(message) = &block.message { - println!("{}", message); - } + println!( + "{}", + match (&block.message, block.multiline) { + (Some(message), _) => message.as_str(), + (None, Some(true)) => "Enter/Paste your content. Ctrl-D to save it.", + _ => "How can i help you?", + } + ); let buffer = match &block.read { Value::String(file_path) => Ok(read_file_to_string(self.path_to(file_path))?), Value::Null => { let mut buffer = String::new(); - ::std::io::stdin().read_line(&mut buffer)?; + let mut bytes_read = ::std::io::stdin().read_line(&mut buffer)?; + if let Some(true) = block.multiline { + while bytes_read > 0 { + bytes_read = ::std::io::stdin().read_line(&mut buffer)?; + } + } Ok(buffer) } x => Err(Box::::from(format!( diff --git a/pdl-live-react/src-tauri/tests/cli/read-stdin.pdl b/pdl-live-react/src-tauri/tests/cli/read-stdin.pdl index 209fa0e5d..39627923b 100644 --- a/pdl-live-react/src-tauri/tests/cli/read-stdin.pdl +++ b/pdl-live-react/src-tauri/tests/cli/read-stdin.pdl @@ -1,3 +1,2 @@ -text: - - message: How are you? - read: null +message: How are you? +read: null