use crate::errors::ShellError; use crate::prelude::*; pub fn sort_by(args: CommandArgs, registry: &CommandRegistry) -> Result { let args = args.evaluate_once(registry)?; let (input, args) = args.parts(); let fields: Result, _> = args .positional .iter() .flatten() .map(|a| a.as_string()) .collect(); let fields = fields?; let output = 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.clone())) .collect::>>>() }); vec.into_iter().collect::>() }); Ok(output.flatten_stream().from_input_stream()) }