nu_command/filters/
reverse.rs1use nu_engine::command_prelude::*;
2
3#[derive(Clone)]
4pub struct Reverse;
5
6impl Command for Reverse {
7 fn name(&self) -> &str {
8 "reverse"
9 }
10
11 fn signature(&self) -> nu_protocol::Signature {
12 Signature::build("reverse")
13 .input_output_types(vec![(
14 Type::List(Box::new(Type::Any)),
15 Type::List(Box::new(Type::Any)),
16 )])
17 .category(Category::Filters)
18 }
19
20 fn description(&self) -> &str {
21 "Reverses the input list or table."
22 }
23
24 fn search_terms(&self) -> Vec<&str> {
25 vec!["convert, inverse, flip"]
26 }
27
28 fn examples(&self) -> Vec<Example> {
29 vec![
30 Example {
31 example: "[0,1,2,3] | reverse",
32 description: "Reverse a list",
33 result: Some(Value::test_list(vec![
34 Value::test_int(3),
35 Value::test_int(2),
36 Value::test_int(1),
37 Value::test_int(0),
38 ])),
39 },
40 Example {
41 example: "[{a: 1} {a: 2}] | reverse",
42 description: "Reverse a table",
43 result: Some(Value::test_list(vec![
44 Value::test_record(record! {
45 "a" => Value::test_int(2),
46 }),
47 Value::test_record(record! {
48 "a" => Value::test_int(1),
49 }),
50 ])),
51 },
52 ]
53 }
54
55 fn run(
56 &self,
57 engine_state: &EngineState,
58 _stack: &mut Stack,
59 call: &Call,
60 input: PipelineData,
61 ) -> Result<PipelineData, ShellError> {
62 let head = call.head;
63 let metadata = input.metadata();
64 let values = input.into_iter_strict(head)?.collect::<Vec<_>>();
65 let iter = values.into_iter().rev();
66 Ok(iter.into_pipeline_data_with_metadata(head, engine_state.signals().clone(), metadata))
67 }
68}
69
70#[cfg(test)]
71mod test {
72 use super::*;
73
74 #[test]
75 fn test_examples() {
76 use crate::test_examples;
77
78 test_examples(Reverse {})
79 }
80}