Make Value::columns return slice instead of cloned Vec (#9927)

# Description
This PR changes `Value::columns` to return a slice of columns instead of
cloning said columns. If the caller needs an owned copy, they can use
`slice::to_vec` or the like. This eliminates unnecessary Vec clones
(e.g., in `update cells`).

# User-Facing Changes
Breaking change for `nu_protocol` API.
This commit is contained in:
Ian Manske 2023-08-07 19:43:32 +00:00 committed by GitHub
parent d302d63030
commit c070e2d6f7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 4 additions and 4 deletions

View file

@ -261,7 +261,7 @@ fn convert_to_list(
let mut iter = iter.into_iter().peekable();
if let Some(first) = iter.peek() {
let mut headers = first.columns();
let mut headers = first.columns().to_vec();
if !headers.is_empty() {
headers.insert(0, "#".into());

View file

@ -1732,10 +1732,10 @@ impl Value {
matches!(self, Value::Bool { val: false, .. })
}
pub fn columns(&self) -> Vec<String> {
pub fn columns(&self) -> &[String] {
match self {
Value::Record { cols, .. } => cols.clone(),
_ => vec![],
Value::Record { cols, .. } => cols,
_ => &[],
}
}