| // Copyright 2021 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::{FromArgValue, FromArgs}, |
| ffx_core::ffx_command, |
| std::path::PathBuf, |
| }; |
| |
| #[derive(Debug, PartialEq)] |
| pub enum CapabilityType { |
| Directory, |
| Protocol, |
| } |
| |
| impl FromArgValue for CapabilityType { |
| fn from_arg_value(value: &str) -> Result<Self, String> { |
| match value { |
| "directory" => Ok(Self::Directory), |
| "protocol" => Ok(Self::Protocol), |
| _ => Err(format!("Unsupported capability type \"{}\"; possible values are: \"directory\", \"protocol\".", value)), |
| } |
| } |
| } |
| |
| impl Into<String> for CapabilityType { |
| fn into(self) -> String { |
| String::from(match self { |
| Self::Directory => "directory", |
| Self::Protocol => "protocol", |
| }) |
| } |
| } |
| |
| #[derive(Debug, PartialEq)] |
| pub enum ResponseLevel { |
| Verbose, |
| All, |
| Warn, |
| Error, |
| } |
| |
| impl FromArgValue for ResponseLevel { |
| fn from_arg_value(value: &str) -> Result<Self, String> { |
| match value { |
| "verbose" => Ok(Self::Verbose), |
| "all" => Ok(Self::All), |
| "warn" => Ok(Self::Warn), |
| "error" => Ok(Self::Error), |
| _ => Err(format!("Unsupported response level \"{}\"; possible values are: \"verbose\", \"all\", \"warn\", \"error\".", value)), |
| } |
| } |
| } |
| |
| impl Into<String> for ResponseLevel { |
| fn into(self) -> String { |
| String::from(match self { |
| Self::Verbose => "verbose", |
| Self::All => "all", |
| Self::Warn => "warn", |
| Self::Error => "error", |
| }) |
| } |
| } |
| |
| pub fn default_capability_types() -> Vec<CapabilityType> { |
| vec![CapabilityType::Directory, CapabilityType::Protocol] |
| } |
| |
| #[ffx_command()] |
| #[derive(FromArgs, Debug, PartialEq)] |
| #[argh( |
| subcommand, |
| name = "routes", |
| description = "Verifies capability routes in the component tree", |
| example = "To verify routes on your current build: |
| |
| $ ffx scrutiny verify routes \ |
| --build-path $(fx get-build-dir) \ |
| --repository-path $(fx get-build-dir)/amber-files/repository" |
| )] |
| pub struct Command { |
| /// capability types to verify. |
| #[argh(option)] |
| pub capability_type: Vec<CapabilityType>, |
| /// response level to report from routes scrutiny plugin. |
| #[argh(option, default = "ResponseLevel::Error")] |
| pub response_level: ResponseLevel, |
| /// path to root output directory of build. |
| #[argh(option)] |
| pub build_path: PathBuf, |
| /// path to fuchsia update package. |
| #[argh(option)] |
| pub update: PathBuf, |
| /// path to one or more blobfs archives that contain fuchsia packages and |
| /// their packages. |
| #[argh(option)] |
| pub blobfs: Vec<PathBuf>, |
| /// path(s) to allowlist(s) used to verify routes. |
| #[argh(option)] |
| pub allowlist: Vec<PathBuf>, |
| /// path to component tree configuration file that affects how component |
| /// tree data is gathered. |
| #[argh(option)] |
| pub component_tree_config: Option<PathBuf>, |
| } |