diff --git a/crates/nu-command/src/filters/columns.rs b/crates/nu-command/src/filters/columns.rs index 826bb9281e..7f5b06cdd5 100644 --- a/crates/nu-command/src/filters/columns.rs +++ b/crates/nu-command/src/filters/columns.rs @@ -1,3 +1,4 @@ +use nu_engine::column::get_columns; use nu_protocol::ast::Call; use nu_protocol::engine::{Command, EngineState, Stack}; use nu_protocol::{ @@ -66,7 +67,7 @@ fn getcol( }, .., ) => { - let input_cols = get_input_cols(input_vals); + let input_cols = get_columns(&input_vals); Ok(input_cols .into_iter() .map(move |x| Value::String { val: x, span }) @@ -74,7 +75,7 @@ fn getcol( } PipelineData::ListStream(stream, ..) => { let v: Vec<_> = stream.into_iter().collect(); - let input_cols = get_input_cols(v); + let input_cols = get_columns(&v); Ok(input_cols .into_iter() @@ -89,14 +90,6 @@ fn getcol( } } -fn get_input_cols(input: Vec) -> Vec { - let rec = input.first(); - match rec { - Some(Value::Record { cols, vals: _, .. }) => cols.to_vec(), - _ => vec!["".to_string()], - } -} - #[cfg(test)] mod test { use super::*; diff --git a/crates/nu-command/src/viewers/table.rs b/crates/nu-command/src/viewers/table.rs index 1cedad77c6..b2b1a153c7 100644 --- a/crates/nu-command/src/viewers/table.rs +++ b/crates/nu-command/src/viewers/table.rs @@ -1,5 +1,6 @@ use lscolors::{LsColors, Style}; use nu_color_config::{get_color_config, style_primitive}; +use nu_engine::column::get_columns; use nu_engine::{env_to_string, CallExt}; use nu_protocol::ast::{Call, PathMember}; use nu_protocol::engine::{Command, EngineState, Stack}; @@ -244,22 +245,6 @@ impl Command for Table { } } -fn get_columns(input: &[Value]) -> Vec { - let mut columns = vec![]; - - for item in input { - if let Value::Record { cols, vals: _, .. } = item { - for col in cols { - if !columns.contains(col) { - columns.push(col.to_string()); - } - } - } - } - - columns -} - fn convert_to_table( row_offset: usize, input: &[Value], diff --git a/crates/nu-engine/src/column.rs b/crates/nu-engine/src/column.rs new file mode 100644 index 0000000000..8726d5033c --- /dev/null +++ b/crates/nu-engine/src/column.rs @@ -0,0 +1,17 @@ +use nu_protocol::Value; + +pub fn get_columns(input: &[Value]) -> Vec { + let mut columns = vec![]; + + for item in input { + if let Value::Record { cols, vals: _, .. } = item { + for col in cols { + if !columns.contains(col) { + columns.push(col.to_string()); + } + } + } + } + + columns +} diff --git a/crates/nu-engine/src/lib.rs b/crates/nu-engine/src/lib.rs index db7b4cf357..2e68647266 100644 --- a/crates/nu-engine/src/lib.rs +++ b/crates/nu-engine/src/lib.rs @@ -1,9 +1,11 @@ mod call_ext; +pub mod column; mod documentation; mod env; mod eval; pub use call_ext::CallExt; +pub use column::get_columns; pub use documentation::{generate_docs, get_brief_help, get_documentation, get_full_help}; pub use env::*; pub use eval::{eval_block, eval_expression, eval_operator};