mirror of
https://github.com/nushell/nushell.git
synced 2025-06-30 22:50:14 +02:00
Remove Record::from_raw_cols_vals_unchecked
(#11810)
# Description Follows from #11718 and replaces all usages of `Record::from_raw_cols_vals_unchecked` with iterator or `record!` equivalents.
This commit is contained in:
@ -1,5 +1,5 @@
|
||||
use csv::{ReaderBuilder, Trim};
|
||||
use nu_protocol::{IntoPipelineData, PipelineData, Record, ShellError, Span, Value};
|
||||
use nu_protocol::{IntoPipelineData, PipelineData, ShellError, Span, Value};
|
||||
|
||||
fn from_delimited_string_to_value(
|
||||
DelimitedReaderConfig {
|
||||
@ -36,28 +36,28 @@ fn from_delimited_string_to_value(
|
||||
let mut rows = vec![];
|
||||
for row in reader.records() {
|
||||
let row = row?;
|
||||
let output_row = (0..headers.len())
|
||||
.map(|i| {
|
||||
row.get(i)
|
||||
.map(|value| {
|
||||
if no_infer {
|
||||
Value::string(value.to_string(), span)
|
||||
} else if let Ok(i) = value.parse::<i64>() {
|
||||
Value::int(i, span)
|
||||
} else if let Ok(f) = value.parse::<f64>() {
|
||||
Value::float(f, span)
|
||||
} else {
|
||||
Value::string(value.to_string(), span)
|
||||
}
|
||||
})
|
||||
.unwrap_or(Value::nothing(span))
|
||||
let columns = headers.iter().cloned();
|
||||
let values = row
|
||||
.into_iter()
|
||||
.map(|s| {
|
||||
if no_infer {
|
||||
Value::string(s, span)
|
||||
} else if let Ok(i) = s.parse() {
|
||||
Value::int(i, span)
|
||||
} else if let Ok(f) = s.parse() {
|
||||
Value::float(f, span)
|
||||
} else {
|
||||
Value::string(s, span)
|
||||
}
|
||||
})
|
||||
.collect::<Vec<Value>>();
|
||||
.chain(std::iter::repeat(Value::nothing(span)));
|
||||
|
||||
rows.push(Value::record(
|
||||
Record::from_raw_cols_vals_unchecked(headers.clone(), output_row),
|
||||
span,
|
||||
));
|
||||
// If there are more values than the number of headers,
|
||||
// then the remaining values are ignored.
|
||||
//
|
||||
// Otherwise, if there are less values than headers,
|
||||
// then `Value::nothing(span)` is used to fill the remaining columns.
|
||||
rows.push(Value::record(columns.zip(values).collect(), span));
|
||||
}
|
||||
|
||||
Ok(Value::list(rows, span))
|
||||
|
@ -421,15 +421,16 @@ fn convert_to_value(
|
||||
span: expr.span,
|
||||
});
|
||||
}
|
||||
let vals: Vec<Value> = row
|
||||
.into_iter()
|
||||
.map(|cell| convert_to_value(cell, span, original_text))
|
||||
|
||||
let record = cols
|
||||
.iter()
|
||||
.zip(row)
|
||||
.map(|(col, cell)| {
|
||||
convert_to_value(cell, span, original_text).map(|val| (col.clone(), val))
|
||||
})
|
||||
.collect::<Result<_, _>>()?;
|
||||
|
||||
output.push(Value::record(
|
||||
Record::from_raw_cols_vals_unchecked(cols.clone(), vals),
|
||||
span,
|
||||
));
|
||||
output.push(Value::record(record, span));
|
||||
}
|
||||
|
||||
Ok(Value::list(output, span))
|
||||
|
Reference in New Issue
Block a user