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.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() .map(|v| ReturnValue::Value(v.copy())) .collect::>() .boxed() }); Ok(output.flatten_stream().boxed()) }