1use nu_engine::{command_prelude::*, get_full_help};
2
3#[derive(Clone)]
4pub struct Path;
5
6impl Command for Path {
7 fn name(&self) -> &str {
8 "path"
9 }
10
11 fn signature(&self) -> Signature {
12 Signature::build("path")
13 .input_output_types(vec![(Type::Nothing, Type::String)])
14 .category(Category::Path)
15 }
16
17 fn description(&self) -> &str {
18 "Explore and manipulate paths."
19 }
20
21 fn extra_description(&self) -> &str {
22 "You must use one of the following subcommands. Using this command as-is will only produce this help message.
23
24There are three ways to represent a path:
25
26* As a path literal, e.g., '/home/viking/spam.txt'
27* As a structured path: a table with 'parent', 'stem', and 'extension' (and
28* 'prefix' on Windows) columns. This format is produced by the 'path parse'
29 subcommand.
30* As a list of path parts, e.g., '[ / home viking spam.txt ]'. Splitting into
31 parts is done by the `path split` command.
32
33All subcommands accept all three variants as an input. Furthermore, the 'path
34join' subcommand can be used to join the structured path or path parts back into
35the path literal."
36 }
37
38 fn run(
39 &self,
40 engine_state: &EngineState,
41 stack: &mut Stack,
42 call: &Call,
43 _input: PipelineData,
44 ) -> Result<PipelineData, ShellError> {
45 Ok(Value::string(
46 get_full_help(self, engine_state, stack, call.head),
47 call.head,
48 )
49 .into_pipeline_data())
50 }
51}