use crate::errors::ShellError; use crate::prelude::*; use derive_new::new; #[derive(new)] pub struct SortBy; impl crate::Command for SortBy { fn run(&self, args: CommandArgs<'caller>) -> Result, ShellError> { let fields: Result, _> = args.args.iter().map(|a| a.as_string()).collect(); let fields = fields?; let mut output = args.input.into_iter().collect::>(); output.sort_by_key(|item| { fields .iter() .map(|f| item.get_data_by_key(f).borrow().copy()) .collect::>() }); let output = output .iter() .map(|o| ReturnValue::Value(o.copy())) .collect(); Ok(output) } }