package/
args.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
// Copyright 2024 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

use argh::FromArgs;
use fidl_fuchsia_dash as fdash;

#[derive(FromArgs, PartialEq, Debug)]
#[argh(name = "package", description = "Interact with the packaging system.")]
pub struct PackageArgs {
    #[argh(subcommand)]
    pub subcommand: PackageSubcommand,
}

#[derive(FromArgs, PartialEq, Debug)]
#[argh(subcommand)]
pub enum PackageSubcommand {
    Explore(ExploreArgs),
}

#[derive(FromArgs, Debug, PartialEq)]
#[argh(subcommand, name = "explore", description = "Same as `ffx target-package explore`")]
pub struct ExploreArgs {
    #[argh(positional)]
    /// the package URL to resolve. If `subpackages` is empty the resolved package directory will
    /// be loaded into the shell's namespace at `/pkg`.
    pub url: String,

    #[argh(option, long = "subpackage")]
    /// the chain of subpackages, if any, of `url` to resolve, in resolution order.
    /// If `subpackages` is not empty, the package directory of the final subpackage will be
    /// loaded into the shell's namespace at `/pkg`.
    pub subpackages: Vec<String>,

    #[argh(option)]
    /// list of URLs of tools packages to include in the shell environment.
    /// the PATH variable will be updated to include binaries from these tools packages.
    /// repeat `--tools url` for each package to be included.
    /// The path preference is given by command line order.
    pub tools: Vec<String>,

    #[argh(option, short = 'c', long = "command")]
    /// execute a command instead of reading from stdin.
    /// the exit code of the command will be forwarded to the host.
    pub command: Option<String>,

    #[argh(option, default = "fdash::FuchsiaPkgResolver::Full", from_str_fn(parse_resolver))]
    /// the resolver to use when resolving package URLs with scheme "fuchsia-pkg".
    /// Possible values are "base" and "full". Defaults to "full".
    pub fuchsia_pkg_resolver: fdash::FuchsiaPkgResolver,
}

fn parse_resolver(flag: &str) -> Result<fdash::FuchsiaPkgResolver, String> {
    Ok(match flag {
        "base" => fdash::FuchsiaPkgResolver::Base,
        "full" => fdash::FuchsiaPkgResolver::Full,
        _ => return Err("supported fuchsia-pkg resolvers are: 'base' and 'full'".into()),
    })
}