use crate::errors::ShellError; use crate::prelude::*; pub fn sort_by(args: CommandArgs) -> Result { let fields: Result, _> = args.positional_iter().map(|a| a.as_string()).collect(); let fields = fields?; let output = args.input.values.collect::>(); let output = output.map(move |mut vec| { vec.sort_by_key(|item| { fields .iter() .map(|f| item.get_data_by_key(f).map(|i| i.copy())) .collect::>>() }); vec.into_iter().collect::>() }); Ok(output.flatten_stream().from_input_stream()) }