Refactor: introduce 2 associated functions to PipelineData (#16233)

# Description
As title: this pr is try to introduce 2 functions to `PipelineData`:
1. PipelineData::list_stream --> create a PipelineData::ListStream
2. PipelineData::byte_stream -> create a PipelineData::ByteStream
And use these functions everywhere.

### Reason behind this change
I tried to implement `pipefail` feature, but this would required to
change `PipelineData` from enum to struct. So use these functions can
reduce diff if I finally change to struct. [Discord message
here](https://discord.com/channels/601130461678272522/615962413203718156/1396999539000479784)
is my plan.

# User-Facing Changes
NaN

# Tests + Formatting
NaN

# After Submitting
NaN
This commit is contained in:
Wind
2025-08-02 09:30:30 +08:00
committed by GitHub
parent ee5b5bd39e
commit eb8d2d3206
126 changed files with 299 additions and 304 deletions

View File

@ -184,20 +184,20 @@ pub trait InterfaceManager {
signals: &Signals,
) -> Result<PipelineData, ShellError> {
self.prepare_pipeline_data(match header {
PipelineDataHeader::Empty => PipelineData::Empty,
PipelineDataHeader::Value(value, metadata) => PipelineData::Value(value, metadata),
PipelineDataHeader::Empty => PipelineData::empty(),
PipelineDataHeader::Value(value, metadata) => PipelineData::value(value, metadata),
PipelineDataHeader::ListStream(info) => {
let handle = self.stream_manager().get_handle();
let reader = handle.read_stream(info.id, self.get_interface())?;
let ls = ListStream::new(reader, info.span, signals.clone());
PipelineData::ListStream(ls, info.metadata)
PipelineData::list_stream(ls, info.metadata)
}
PipelineDataHeader::ByteStream(info) => {
let handle = self.stream_manager().get_handle();
let reader = handle.read_stream(info.id, self.get_interface())?;
let bs =
ByteStream::from_result_iter(reader, info.span, signals.clone(), info.type_);
PipelineData::ByteStream(bs, info.metadata)
PipelineData::byte_stream(bs, info.metadata)
}
})
}

View File

@ -302,7 +302,7 @@ fn write_pipeline_data_empty() -> Result<(), ShellError> {
let manager = TestInterfaceManager::new(&test);
let interface = manager.get_interface();
let (header, writer) = interface.init_write_pipeline_data(PipelineData::Empty, &())?;
let (header, writer) = interface.init_write_pipeline_data(PipelineData::empty(), &())?;
assert!(matches!(header, PipelineDataHeader::Empty));
@ -324,7 +324,7 @@ fn write_pipeline_data_value() -> Result<(), ShellError> {
let value = Value::test_int(7);
let (header, writer) =
interface.init_write_pipeline_data(PipelineData::Value(value.clone(), None), &())?;
interface.init_write_pipeline_data(PipelineData::value(value.clone(), None), &())?;
match header {
PipelineDataHeader::Value(read_value, _) => assert_eq!(value, read_value),
@ -349,7 +349,7 @@ fn write_pipeline_data_prepared_properly() {
// Sending a binary should be an error in our test scenario
let value = Value::test_binary(vec![7, 8]);
match interface.init_write_pipeline_data(PipelineData::Value(value, None), &()) {
match interface.init_write_pipeline_data(PipelineData::value(value, None), &()) {
Ok(_) => panic!("prepare_pipeline_data was not called"),
Err(err) => {
assert_eq!(
@ -376,7 +376,7 @@ fn write_pipeline_data_list_stream() -> Result<(), ShellError> {
];
// Set up pipeline data for a list stream
let pipe = PipelineData::ListStream(
let pipe = PipelineData::list_stream(
ListStream::new(
values.clone().into_iter(),
Span::test_data(),
@ -430,7 +430,7 @@ fn write_pipeline_data_byte_stream() -> Result<(), ShellError> {
let span = Span::new(400, 500);
// Set up pipeline data for a byte stream
let data = PipelineData::ByteStream(
let data = PipelineData::byte_stream(
ByteStream::read(
std::io::Cursor::new(expected),
span,