From 0ae6c4fa67673ddef68433d629b34ac94db43cb8 Mon Sep 17 00:00:00 2001 From: Jack Wright Date: Wed, 31 Jul 2024 09:55:54 -0700 Subject: [PATCH] added helper methods to PipelineDataHeader and cleaned up match statements --- crates/nu-plugin-core/src/interface/tests.rs | 8 +- .../nu-plugin-core/src/serializers/tests.rs | 9 +- .../nu-plugin-engine/src/interface/tests.rs | 86 +++++++------------ crates/nu-plugin-protocol/src/lib.rs | 26 +++++- .../nu-plugin/src/plugin/interface/tests.rs | 67 +++++---------- 5 files changed, 81 insertions(+), 115 deletions(-) diff --git a/crates/nu-plugin-core/src/interface/tests.rs b/crates/nu-plugin-core/src/interface/tests.rs index 40a33213c4..bcd841db64 100644 --- a/crates/nu-plugin-core/src/interface/tests.rs +++ b/crates/nu-plugin-core/src/interface/tests.rs @@ -339,8 +339,7 @@ fn write_pipeline_data_value() -> Result<(), ShellError> { match header { PipelineDataHeader::Value { - value: read_value, - metadata: None, + value: read_value, .. } => assert_eq!(value, read_value), _ => panic!("unexpected header: {header:?}"), } @@ -457,10 +456,7 @@ fn write_pipeline_data_byte_stream() -> Result<(), ShellError> { let (header, writer) = interface.init_write_pipeline_data(data, &())?; let info = match header { - PipelineDataHeader::ByteStream { - info, - metadata: None, - } => info, + PipelineDataHeader::ByteStream { info, .. } => info, _ => panic!("unexpected header: {header:?}"), }; diff --git a/crates/nu-plugin-core/src/serializers/tests.rs b/crates/nu-plugin-core/src/serializers/tests.rs index 7a8efc6445..d12c4ee282 100644 --- a/crates/nu-plugin-core/src/serializers/tests.rs +++ b/crates/nu-plugin-core/src/serializers/tests.rs @@ -322,7 +322,7 @@ macro_rules! generate_tests { 4, PluginCallResponse::PipelineData(PipelineDataHeader::Value { value: returned_value, - metadata: None, + .. }), ) => { assert_eq!(value, returned_value) @@ -343,10 +343,7 @@ macro_rules! generate_tests { span, ); - let response = PluginCallResponse::PipelineData(PipelineDataHeader::Value { - value, - metadata: None, - }); + let response = PluginCallResponse::PipelineData(PipelineDataHeader::value(value)); let output = PluginOutput::CallResponse(5, response); let encoder = $encoder; @@ -364,7 +361,7 @@ macro_rules! generate_tests { 5, PluginCallResponse::PipelineData(PipelineDataHeader::Value { value: returned_value, - metadata: None, + .. }), ) => { assert_eq!(span, returned_value.span()); diff --git a/crates/nu-plugin-engine/src/interface/tests.rs b/crates/nu-plugin-engine/src/interface/tests.rs index 23eda81474..d0ac4b9a21 100644 --- a/crates/nu-plugin-engine/src/interface/tests.rs +++ b/crates/nu-plugin-engine/src/interface/tests.rs @@ -53,13 +53,10 @@ fn manager_consume_all_exits_after_streams_and_interfaces_are_dropped() -> Resul // Create a stream... let stream = manager.read_pipeline_data( - PipelineDataHeader::ListStream { - info: ListStreamInfo { - id: 0, - span: Span::test_data(), - }, - metadata: None, - }, + PipelineDataHeader::list_stream(ListStreamInfo { + id: 0, + span: Span::test_data(), + }), &Signals::empty(), )?; @@ -112,13 +109,10 @@ fn manager_consume_all_propagates_io_error_to_readers() -> Result<(), ShellError test.set_read_error(test_io_error()); let stream = manager.read_pipeline_data( - PipelineDataHeader::ListStream { - info: ListStreamInfo { - id: 0, - span: Span::test_data(), - }, - metadata: None, - }, + PipelineDataHeader::list_stream(ListStreamInfo { + id: 0, + span: Span::test_data(), + }), &Signals::empty(), )?; @@ -161,14 +155,11 @@ fn manager_consume_all_propagates_message_error_to_readers() -> Result<(), Shell test.add(invalid_output()); let stream = manager.read_pipeline_data( - PipelineDataHeader::ByteStream { - info: ByteStreamInfo { - id: 0, - span: Span::test_data(), - type_: ByteStreamType::Unknown, - }, - metadata: None, - }, + PipelineDataHeader::byte_stream(ByteStreamInfo { + id: 0, + span: Span::test_data(), + type_: ByteStreamType::Unknown, + }), &Signals::empty(), )?; @@ -341,13 +332,10 @@ fn manager_consume_call_response_forwards_to_subscriber_with_pipeline_data( manager.consume(PluginOutput::CallResponse( 0, - PluginCallResponse::PipelineData(PipelineDataHeader::ListStream { - info: ListStreamInfo { - id: 0, - span: Span::test_data(), - }, - metadata: None, - }), + PluginCallResponse::PipelineData(PipelineDataHeader::list_stream(ListStreamInfo { + id: 0, + span: Span::test_data(), + })), ))?; for i in 0..2 { @@ -388,24 +376,18 @@ fn manager_consume_call_response_registers_streams() -> Result<(), ShellError> { // Check list streams, byte streams manager.consume(PluginOutput::CallResponse( 0, - PluginCallResponse::PipelineData(PipelineDataHeader::ListStream { - info: ListStreamInfo { - id: 0, - span: Span::test_data(), - }, - metadata: None, - }), + PluginCallResponse::PipelineData(PipelineDataHeader::list_stream(ListStreamInfo { + id: 0, + span: Span::test_data(), + })), ))?; manager.consume(PluginOutput::CallResponse( 1, - PluginCallResponse::PipelineData(PipelineDataHeader::ByteStream { - info: ByteStreamInfo { - id: 1, - span: Span::test_data(), - type_: ByteStreamType::Unknown, - }, - metadata: None, - }), + PluginCallResponse::PipelineData(PipelineDataHeader::byte_stream(ByteStreamInfo { + id: 1, + span: Span::test_data(), + type_: ByteStreamType::Unknown, + })), ))?; // ListStream should have one @@ -461,13 +443,10 @@ fn manager_consume_engine_call_forwards_to_subscriber_with_pipeline_data() -> Re span: Span::test_data(), }, positional: vec![], - input: PipelineDataHeader::ListStream { - info: ListStreamInfo { - id: 2, - span: Span::test_data(), - }, - metadata: None, - }, + input: PipelineDataHeader::list_stream(ListStreamInfo { + id: 2, + span: Span::test_data(), + }), redirect_stdout: false, redirect_stderr: false, }, @@ -896,10 +875,7 @@ fn interface_write_plugin_call_writes_run_with_stream_input() -> Result<(), Shel PluginCall::Run(CallInfo { name, input, .. }) => { assert_eq!("foo", name); match input { - PipelineDataHeader::ListStream { - info, - metadata: None, - } => info, + PipelineDataHeader::ListStream { info, .. } => info, _ => panic!("unexpected input header: {input:?}"), } } diff --git a/crates/nu-plugin-protocol/src/lib.rs b/crates/nu-plugin-protocol/src/lib.rs index 5c379b1d57..9487f6a477 100644 --- a/crates/nu-plugin-protocol/src/lib.rs +++ b/crates/nu-plugin-protocol/src/lib.rs @@ -108,6 +108,27 @@ impl PipelineDataHeader { PipelineDataHeader::ByteStream { info, .. } => Some(info.id), } } + + pub fn value(value: Value) -> Self { + PipelineDataHeader::Value { + value, + metadata: None, + } + } + + pub fn list_stream(info: ListStreamInfo) -> Self { + PipelineDataHeader::ListStream { + info, + metadata: None, + } + } + + pub fn byte_stream(info: ByteStreamInfo) -> Self { + PipelineDataHeader::ByteStream { + info, + metadata: None, + } + } } /// Additional information about list (value) streams @@ -351,10 +372,7 @@ impl PluginCallResponse { if value.is_nothing() { PluginCallResponse::PipelineData(PipelineDataHeader::Empty) } else { - PluginCallResponse::PipelineData(PipelineDataHeader::Value { - value, - metadata: None, - }) + PluginCallResponse::PipelineData(PipelineDataHeader::value(value)) } } } diff --git a/crates/nu-plugin/src/plugin/interface/tests.rs b/crates/nu-plugin/src/plugin/interface/tests.rs index ee7a4d2a75..8279c192fb 100644 --- a/crates/nu-plugin/src/plugin/interface/tests.rs +++ b/crates/nu-plugin/src/plugin/interface/tests.rs @@ -55,13 +55,10 @@ fn manager_consume_all_exits_after_streams_and_interfaces_are_dropped() -> Resul // Create a stream... let stream = manager.read_pipeline_data( - PipelineDataHeader::ListStream { - info: ListStreamInfo { - id: 0, - span: Span::test_data(), - }, - metadata: None, - }, + PipelineDataHeader::list_stream(ListStreamInfo { + id: 0, + span: Span::test_data(), + }), &Signals::empty(), )?; @@ -114,13 +111,10 @@ fn manager_consume_all_propagates_io_error_to_readers() -> Result<(), ShellError test.set_read_error(test_io_error()); let stream = manager.read_pipeline_data( - PipelineDataHeader::ListStream { - info: ListStreamInfo { - id: 0, - span: Span::test_data(), - }, - metadata: None, - }, + PipelineDataHeader::list_stream(ListStreamInfo { + id: 0, + span: Span::test_data(), + }), &Signals::empty(), )?; @@ -163,14 +157,11 @@ fn manager_consume_all_propagates_message_error_to_readers() -> Result<(), Shell test.add(invalid_input()); let stream = manager.read_pipeline_data( - PipelineDataHeader::ByteStream { - info: ByteStreamInfo { - id: 0, - span: Span::test_data(), - type_: ByteStreamType::Unknown, - }, - metadata: None, - }, + PipelineDataHeader::byte_stream(ByteStreamInfo { + id: 0, + span: Span::test_data(), + type_: ByteStreamType::Unknown, + }), &Signals::empty(), )?; @@ -423,13 +414,10 @@ fn manager_consume_call_run_forwards_to_receiver_with_pipeline_data() -> Result< positional: vec![], named: vec![], }, - input: PipelineDataHeader::ListStream { - info: ListStreamInfo { - id: 6, - span: Span::test_data(), - }, - metadata: None, - }, + input: PipelineDataHeader::list_stream(ListStreamInfo { + id: 6, + span: Span::test_data(), + }), }), ))?; @@ -568,13 +556,10 @@ fn manager_consume_engine_call_response_forwards_to_subscriber_with_pipeline_dat manager.consume(PluginInput::EngineCallResponse( 0, - EngineCallResponse::PipelineData(PipelineDataHeader::ListStream { - info: ListStreamInfo { - id: 0, - span: Span::test_data(), - }, - metadata: None, - }), + EngineCallResponse::PipelineData(PipelineDataHeader::list_stream(ListStreamInfo { + id: 0, + span: Span::test_data(), + })), ))?; for i in 0..2 { @@ -722,10 +707,7 @@ fn interface_write_response_with_value() -> Result<(), ShellError> { assert_eq!(33, id, "id"); match response { PluginCallResponse::PipelineData(header) => match header { - PipelineDataHeader::Value { - value, - metadata: None, - } => assert_eq!(6, value.as_int()?), + PipelineDataHeader::Value { value, .. } => assert_eq!(6, value.as_int()?), _ => panic!("unexpected pipeline data header: {header:?}"), }, _ => panic!("unexpected response: {response:?}"), @@ -757,10 +739,7 @@ fn interface_write_response_with_stream() -> Result<(), ShellError> { let info = match written { PluginOutput::CallResponse(_, response) => match response { PluginCallResponse::PipelineData(header) => match header { - PipelineDataHeader::ListStream { - info, - metadata: None, - } => info, + PipelineDataHeader::ListStream { info, .. } => info, _ => panic!("expected ListStream header: {header:?}"), }, _ => panic!("wrong response: {response:?}"),