prepare release of version 2.0, regen all APIs

This commit is contained in:
Sebastian Thiel
2021-04-01 23:46:26 +08:00
parent f1c05f2554
commit c606d37dd3
3415 changed files with 3620084 additions and 2930380 deletions

View File

@@ -4,7 +4,7 @@
[package]
name = "google-networkmanagement1-cli"
version = "1.0.14+20200520"
version = "2.0.0+20210325"
authors = ["Sebastian Thiel <byronimo@gmail.com>"]
description = "A complete library to interact with Network Management (protocol v1)"
repository = "https://github.com/Byron/google-apis-rs/tree/master/gen/networkmanagement1-cli"
@@ -13,33 +13,28 @@ documentation = "http://byron.github.io/google-apis-rs/google_networkmanagement1
license = "MIT"
keywords = ["networkmanagement", "google", "cli"]
autobins = false
edition = "2018"
[[bin]]
name = "networkmanagement1"
path = "src/main.rs"
[dev-dependencies]
hyper-rustls = "^0.6"
[dependencies]
hyper = "^ 0.10"
hyper-rustls = "^0.22"
mime = "^ 0.2.0"
serde = "^ 1.0"
serde_json = "^ 1.0"
serde_derive = "^ 1.0"
yup-oauth2 = { version = "^ 1.0", default-features = false }
yup-oauth2 = "^ 5.0"
itertools = "^ 0.10"
strsim = "^0.5"
hyper-rustls = "^0.6"
yup-hyper-mock = "^2.0"
clap = "^2.0"
hyper = { version = "0.14", features = ["full"] }
tokio = { version = "^ 1.0", features = ["full"] }
[features]
default = ["openssl"]
openssl = ["yup-oauth2/default"]
rustls = ["yup-oauth2/no-openssl"]
[dependencies.google-networkmanagement1]
path = "../networkmanagement1"
version = "1.0.14+20200520"
version = "2.0.0+20210325"

View File

@@ -25,7 +25,7 @@ Find the source code [on github](https://github.com/Byron/google-apis-rs/tree/ma
# Usage
This documentation was generated from the *Network Management* API at revision *20200520*. The CLI is at version *1.0.14*.
This documentation was generated from the *Network Management* API at revision *20210325*. The CLI is at version *2.0.0*.
```bash
networkmanagement1 [options]
@@ -56,12 +56,6 @@ Configuration:
A directory into which we will store our persistent data. Defaults to
a user-writable directory that we will create during the first invocation.
[default: ~/.google-service-cli]
--debug
Output all server communication to standard error. `tx` and `rx` are placed
into the same stream.
--debug-auth
Output all communication related to authentication to standard error. `tx`
and `rx` are placed into the same stream.
```
@@ -114,10 +108,7 @@ Even though the CLI does its best to provide usable error messages, sometimes it
what exactly led to a particular issue. This is done by allowing all client-server communication to be
output to standard error *as-is*.
The `--debug` flag will print all client-server communication to standard error, whereas the `--debug-auth` flag
will cause all communication related to authentication to standard error.
If the `--debug` flag is set, error-results will be debug-printed, possibly yielding more information about the
issue at hand.
The `--debug` flag will print errors using the `Debug` representation to standard error.
You may consider redirecting standard error into a file for ease of use, e.g. `networkmanagement1 --debug <resource> <method> [options] 2>debug.txt`.

View File

@@ -1,4 +1,4 @@
site_name: Network Management v1.0.14+20200520
site_name: Network Management v2.0.0+20210325
site_url: http://byron.github.io/google-apis-rs/google-networkmanagement1-cli
site_description: A complete library to interact with Network Management (protocol v1)

View File

@@ -1,27 +1,26 @@
// COPY OF 'src/rust/cli/cmn.rs'
// COPY OF 'src/rust/cli/client.rs'
// DO NOT EDIT
use oauth2::{ApplicationSecret, ConsoleApplicationSecret, TokenStorage, Token};
use clap::{App, SubCommand};
use mime::Mime;
use oauth2::{ApplicationSecret, ConsoleApplicationSecret};
use serde_json as json;
use serde_json::value::Value;
use mime::Mime;
use clap::{App, SubCommand};
use strsim;
use std::fs;
use std::env;
use std::io;
use std::error::Error as StdError;
use std::fmt;
use std::fs;
use std::io;
use std::io::{stdout, Read, Write};
use std::path::{Path, PathBuf};
use std::str::FromStr;
use std::string::ToString;
use std::io::{Write, Read, stdout};
use std::default::Default;
const FIELD_SEP: char = '.';
pub enum ComplexType {
Pod,
Vec,
@@ -83,12 +82,11 @@ pub fn remove_json_null_values(value: &mut Value) {
}
fn did_you_mean<'a>(v: &str, possible_values: &[&'a str]) -> Option<&'a str> {
let mut candidate: Option<(f64, &str)> = None;
for pv in possible_values {
let confidence = strsim::jaro_winkler(v, pv);
if confidence > 0.8 &&
(candidate.is_none() || (candidate.as_ref().unwrap().0 < confidence)) {
if confidence > 0.8 && (candidate.is_none() || (candidate.as_ref().unwrap().0 < confidence))
{
candidate = Some((confidence, pv));
}
}
@@ -103,10 +101,10 @@ pub enum CallType {
Standard,
}
arg_enum!{
arg_enum! {
pub enum UploadProtocol {
Simple,
Resumable
// Resumable // This seems to be lost during the async conversion
}
}
@@ -114,7 +112,7 @@ impl AsRef<str> for UploadProtocol {
fn as_ref(&self) -> &str {
match *self {
UploadProtocol::Simple => "simple",
UploadProtocol::Resumable => "resumable",
// UploadProtocol::Resumable => "resumable",
}
}
}
@@ -131,7 +129,7 @@ impl AsRef<str> for CallType {
#[derive(Clone, Default)]
pub struct FieldCursor(Vec<String>);
impl ToString for FieldCursor {
impl ToString for FieldCursor {
fn to_string(&self) -> String {
self.0.join(".")
}
@@ -208,7 +206,9 @@ impl FieldCursor {
fields.truncate(0);
}
if char_count > 1 && num_conscutive_field_seps == 1 {
return Err(CLIError::Field(FieldError::TrailingFieldSep(value.to_string())));
return Err(CLIError::Field(FieldError::TrailingFieldSep(
value.to_string(),
)));
}
self.0 = fields;
@@ -257,20 +257,20 @@ impl FieldCursor {
}
}
pub fn set_json_value(&self,
mut object: &mut Value,
value: &str,
type_info: JsonTypeInfo,
err: &mut InvalidOptionsError,
orig_cursor: &FieldCursor) {
pub fn set_json_value(
&self,
mut object: &mut Value,
value: &str,
type_info: JsonTypeInfo,
err: &mut InvalidOptionsError,
orig_cursor: &FieldCursor,
) {
assert!(self.0.len() > 0);
for field in &self.0[..self.0.len() - 1] {
let tmp = object;
object = match *tmp {
Value::Object(ref mut mapping) => {
assure_entry(mapping, &field)
}
Value::Object(ref mut mapping) => assure_entry(mapping, &field),
_ => panic!("We don't expect non-object Values here ..."),
};
}
@@ -278,58 +278,55 @@ impl FieldCursor {
match *object {
Value::Object(ref mut mapping) => {
let field = &self.0[self.0.len() - 1];
let to_jval = |value: &str,
jtype: JsonType,
err: &mut InvalidOptionsError|
-> Value {
match jtype {
JsonType::Boolean =>
Value::Bool(arg_from_str(value, err, &field, "boolean")),
JsonType::Int =>
Value::Number(json::Number::from_f64(arg_from_str(value,
err,
&field,
"int"))
.expect("valid f64")),
JsonType::Uint =>
Value::Number(json::Number::from_f64(arg_from_str(value,
err,
&field,
"uint"))
.expect("valid f64")),
JsonType::Float =>
Value::Number(json::Number::from_f64(arg_from_str(value,
err,
&field,
"float"))
.expect("valid f64")),
JsonType::String => Value::String(value.to_owned()),
}
};
let to_jval =
|value: &str, jtype: JsonType, err: &mut InvalidOptionsError| -> Value {
match jtype {
JsonType::Boolean => {
Value::Bool(arg_from_str(value, err, &field, "boolean"))
}
JsonType::Int => Value::Number(
json::Number::from_f64(arg_from_str(value, err, &field, "int"))
.expect("valid f64"),
),
JsonType::Uint => Value::Number(
json::Number::from_f64(arg_from_str(value, err, &field, "uint"))
.expect("valid f64"),
),
JsonType::Float => Value::Number(
json::Number::from_f64(arg_from_str(value, err, &field, "float"))
.expect("valid f64"),
),
JsonType::String => Value::String(value.to_owned()),
}
};
match type_info.ctype {
ComplexType::Pod => {
if mapping.insert(field.to_owned(), to_jval(value, type_info.jtype, err))
.is_some() {
err.issues.push(CLIError::Field(FieldError::Duplicate(orig_cursor.to_string())));
if mapping
.insert(field.to_owned(), to_jval(value, type_info.jtype, err))
.is_some()
{
err.issues.push(CLIError::Field(FieldError::Duplicate(
orig_cursor.to_string(),
)));
}
}
ComplexType::Vec => {
match *assure_entry(mapping, field) {
Value::Array(ref mut values) =>
values.push(to_jval(value, type_info.jtype, err)),
_ => unreachable!(),
ComplexType::Vec => match *assure_entry(mapping, field) {
Value::Array(ref mut values) => {
values.push(to_jval(value, type_info.jtype, err))
}
}
_ => unreachable!(),
},
ComplexType::Map => {
let (key, value) = parse_kv_arg(value, err, true);
let jval = to_jval(value.unwrap_or(""), type_info.jtype, err);
match *assure_entry(mapping, &field) {
Value::Object(ref mut value_map) => {
if value_map.insert(key.to_owned(), jval).is_some() {
err.issues.push(CLIError::Field(FieldError::Duplicate(orig_cursor.to_string())));
err.issues.push(CLIError::Field(FieldError::Duplicate(
orig_cursor.to_string(),
)));
}
}
_ => unreachable!(),
@@ -346,12 +343,14 @@ impl FieldCursor {
}
}
pub fn parse_kv_arg<'a>(kv: &'a str,
err: &mut InvalidOptionsError,
for_hashmap: bool)
-> (&'a str, Option<&'a str>) {
pub fn parse_kv_arg<'a>(
kv: &'a str,
err: &mut InvalidOptionsError,
for_hashmap: bool,
) -> (&'a str, Option<&'a str>) {
let mut add_err = || {
err.issues.push(CLIError::InvalidKeyValueSyntax(kv.to_string(), for_hashmap))
err.issues
.push(CLIError::InvalidKeyValueSyntax(kv.to_string(), for_hashmap))
};
match kv.find('=') {
None => {
@@ -369,14 +368,18 @@ pub fn parse_kv_arg<'a>(kv: &'a str,
}
}
pub fn calltype_from_str(name: &str,
valid_protocols: Vec<String>,
err: &mut InvalidOptionsError)
-> CallType {
pub fn calltype_from_str(
name: &str,
valid_protocols: Vec<String>,
err: &mut InvalidOptionsError,
) -> CallType {
CallType::Upload(match UploadProtocol::from_str(name) {
Ok(up) => up,
Err(msg) => {
err.issues.push(CLIError::InvalidUploadProtocol(name.to_string(), valid_protocols));
err.issues.push(CLIError::InvalidUploadProtocol(
name.to_string(),
valid_protocols,
));
UploadProtocol::Simple
}
})
@@ -386,7 +389,10 @@ pub fn input_file_from_opts(file_path: &str, err: &mut InvalidOptionsError) -> O
match fs::File::open(file_path) {
Ok(f) => Some(f),
Err(io_err) => {
err.issues.push(CLIError::Input(InputError::Io((file_path.to_string(), io_err))));
err.issues.push(CLIError::Input(InputError::Io((
file_path.to_string(),
io_err,
))));
None
}
}
@@ -396,7 +402,8 @@ pub fn input_mime_from_opts(mime: &str, err: &mut InvalidOptionsError) -> Option
match mime.parse() {
Ok(m) => Some(m),
Err(_) => {
err.issues.push(CLIError::Input(InputError::Mime(mime.to_string())));
err.issues
.push(CLIError::Input(InputError::Mime(mime.to_string())));
None
}
}
@@ -406,120 +413,42 @@ pub fn writer_from_opts(arg: Option<&str>) -> Result<Box<dyn Write>, io::Error>
let f = arg.unwrap_or("-");
match f {
"-" => Ok(Box::new(stdout())),
_ => match fs::OpenOptions::new().create(true).truncate(true).write(true).open(f) {
_ => match fs::OpenOptions::new()
.create(true)
.truncate(true)
.write(true)
.open(f)
{
Ok(f) => Ok(Box::new(f)),
Err(io_err) => Err(io_err),
},
}
}
pub fn arg_from_str<'a, T>(arg: &str,
err: &mut InvalidOptionsError,
arg_name: &'a str,
arg_type: &'a str)
-> T
where T: FromStr + Default,
<T as FromStr>::Err: fmt::Display
pub fn arg_from_str<'a, T>(
arg: &str,
err: &mut InvalidOptionsError,
arg_name: &'a str,
arg_type: &'a str,
) -> T
where
T: FromStr + Default,
<T as FromStr>::Err: fmt::Display,
{
match FromStr::from_str(arg) {
Err(perr) => {
err.issues.push(CLIError::ParseError(arg_name.to_owned(),
arg_type.to_owned(),
arg.to_string(),
format!("{}", perr)));
err.issues.push(CLIError::ParseError(
arg_name.to_owned(),
arg_type.to_owned(),
arg.to_string(),
format!("{}", perr),
));
Default::default()
}
Ok(v) => v,
}
}
pub struct JsonTokenStorage {
pub program_name: &'static str,
pub db_dir: String,
}
impl JsonTokenStorage {
fn path(&self, scope_hash: u64) -> PathBuf {
Path::new(&self.db_dir).join(&format!("{}-token-{}.json", self.program_name, scope_hash))
}
}
#[derive(Debug)]
pub enum TokenStorageError {
Json(json::Error),
Io(io::Error),
}
impl fmt::Display for TokenStorageError {
fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> {
match *self {
TokenStorageError::Json(ref err) => writeln!(f, "Could not serialize secrets: {}", err),
TokenStorageError::Io(ref err) => writeln!(f, "Failed to write secret token: {}", err),
}
}
}
impl StdError for TokenStorageError {
fn description(&self) -> &str {
"Failure when getting or setting the token storage"
}
}
impl TokenStorage for JsonTokenStorage {
type Error = TokenStorageError;
// NOTE: logging might be interesting, currently we swallow all errors
fn set(&mut self,
scope_hash: u64,
_: &Vec<&str>,
token: Option<Token>)
-> Result<(), TokenStorageError> {
match token {
None => {
match fs::remove_file(self.path(scope_hash)) {
Err(err) => match err.kind() {
io::ErrorKind::NotFound => Ok(()),
_ => Err(TokenStorageError::Io(err)),
},
Ok(_) => Ok(()),
}
}
Some(token) => {
match fs::OpenOptions::new().create(true).write(true).truncate(true).open(&self.path(scope_hash)) {
Ok(mut f) => {
match json::to_writer_pretty(&mut f, &token) {
Ok(_) => Ok(()),
Err(serde_err) => Err(TokenStorageError::Json(serde_err)),
}
}
Err(io_err) => Err(TokenStorageError::Io(io_err)),
}
}
}
}
fn get(&self, scope_hash: u64, _: &Vec<&str>) -> Result<Option<Token>, TokenStorageError> {
match fs::File::open(&self.path(scope_hash)) {
Ok(f) => {
match json::de::from_reader(f) {
Ok(token) => Ok(Some(token)),
Err(err) => Err(TokenStorageError::Json(err)),
}
}
Err(io_err) => {
match io_err.kind() {
io::ErrorKind::NotFound => Ok(None),
_ => Err(TokenStorageError::Io(io_err)),
}
}
}
}
}
#[derive(Debug)]
pub enum ApplicationSecretError {
DecoderError((String, json::Error)),
@@ -529,15 +458,16 @@ pub enum ApplicationSecretError {
impl fmt::Display for ApplicationSecretError {
fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> {
match *self {
ApplicationSecretError::DecoderError((ref path, ref err)) =>
writeln!(f,
"Could not decode file at '{}' with error: {}.",
path,
err),
ApplicationSecretError::FormatError(ref path) =>
writeln!(f,
"'installed' field is unset in secret file at '{}'.",
path),
ApplicationSecretError::DecoderError((ref path, ref err)) => writeln!(
f,
"Could not decode file at '{}' with error: {}.",
path, err
),
ApplicationSecretError::FormatError(ref path) => writeln!(
f,
"'installed' field is unset in secret file at '{}'.",
path
),
}
}
}
@@ -554,22 +484,23 @@ pub enum ConfigurationError {
impl fmt::Display for ConfigurationError {
fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> {
match *self {
ConfigurationError::DirectoryCreationFailed((ref dir, ref err)) =>
writeln!(f,
"Directory '{}' could not be created with error: {}.",
dir,
err),
ConfigurationError::DirectoryCreationFailed((ref dir, ref err)) => writeln!(
f,
"Directory '{}' could not be created with error: {}.",
dir, err
),
ConfigurationError::DirectoryUnset => writeln!(f, "--config-dir was unset or empty."),
ConfigurationError::HomeExpansionFailed(ref dir) =>
writeln!(f,
"Couldn't find HOME directory of current user, failed to expand '{}'.",
dir),
ConfigurationError::HomeExpansionFailed(ref dir) => writeln!(
f,
"Couldn't find HOME directory of current user, failed to expand '{}'.",
dir
),
ConfigurationError::Secret(ref err) => writeln!(f, "Secret -> {}", err),
ConfigurationError::Io((ref path, ref err)) =>
writeln!(f,
"IO operation failed on path '{}' with error: {}.",
path,
err),
ConfigurationError::Io((ref path, ref err)) => writeln!(
f,
"IO operation failed on path '{}' with error: {}.",
path, err
),
}
}
}
@@ -583,11 +514,11 @@ pub enum InputError {
impl fmt::Display for InputError {
fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> {
match *self {
InputError::Io((ref file_path, ref io_err)) =>
writeln!(f,
"Failed to open '{}' for reading with error: {}.",
file_path,
io_err),
InputError::Io((ref file_path, ref io_err)) => writeln!(
f,
"Failed to open '{}' for reading with error: {}.",
file_path, io_err
),
InputError::Mime(ref mime) => writeln!(f, "'{}' is not a known mime-type.", mime),
}
}
@@ -602,16 +533,17 @@ pub enum FieldError {
Empty,
}
impl fmt::Display for FieldError {
fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> {
match *self {
FieldError::PopOnEmpty(ref field) =>
writeln!(f, "'{}': Cannot move up on empty field cursor.", field),
FieldError::TrailingFieldSep(ref field) =>
writeln!(f,
"'{}': Single field separator may not be last character.",
field),
FieldError::PopOnEmpty(ref field) => {
writeln!(f, "'{}': Cannot move up on empty field cursor.", field)
}
FieldError::TrailingFieldSep(ref field) => writeln!(
f,
"'{}': Single field separator may not be last character.",
field
),
FieldError::Unknown(ref field, ref suggestion, ref value) => {
let suffix = match *suggestion {
Some(ref s) => {
@@ -625,14 +557,14 @@ impl fmt::Display for FieldError {
};
writeln!(f, "Field '{}' does not exist.{}", field, suffix)
}
FieldError::Duplicate(ref cursor) =>
writeln!(f, "Value at '{}' was already set", cursor),
FieldError::Duplicate(ref cursor) => {
writeln!(f, "Value at '{}' was already set", cursor)
}
FieldError::Empty => writeln!(f, "Field names must not be empty."),
}
}
}
#[derive(Debug)]
pub enum CLIError {
Configuration(ConfigurationError),
@@ -652,18 +584,17 @@ impl fmt::Display for CLIError {
CLIError::Configuration(ref err) => write!(f, "Configuration -> {}", err),
CLIError::Input(ref err) => write!(f, "Input -> {}", err),
CLIError::Field(ref err) => write!(f, "Field -> {}", err),
CLIError::InvalidUploadProtocol(ref proto_name, ref valid_names) =>
writeln!(f,
"'{}' is not a valid upload protocol. Choose from one of {}.",
proto_name,
valid_names.join(", ")),
CLIError::ParseError(ref arg_name, ref type_name, ref value, ref err_desc) =>
writeln!(f,
"Failed to parse argument '{}' with value '{}' as {} with error: {}.",
arg_name,
value,
type_name,
err_desc),
CLIError::InvalidUploadProtocol(ref proto_name, ref valid_names) => writeln!(
f,
"'{}' is not a valid upload protocol. Choose from one of {}.",
proto_name,
valid_names.join(", ")
),
CLIError::ParseError(ref arg_name, ref type_name, ref value, ref err_desc) => writeln!(
f,
"Failed to parse argument '{}' with value '{}' as {} with error: {}.",
arg_name, value, type_name, err_desc
),
CLIError::UnknownParameter(ref param_name, ref possible_values) => {
let suffix = match did_you_mean(param_name, &possible_values) {
Some(v) => format!(" Did you mean '{}' ?", v),
@@ -672,21 +603,19 @@ impl fmt::Display for CLIError {
write!(f, "Parameter '{}' is unknown.{}\n", param_name, suffix)
}
CLIError::InvalidKeyValueSyntax(ref kv, is_hashmap) => {
let hashmap_info = if is_hashmap {
"hashmap "
} else {
""
};
writeln!(f,
"'{}' does not match {}pattern <key>=<value>.",
kv,
hashmap_info)
let hashmap_info = if is_hashmap { "hashmap " } else { "" };
writeln!(
f,
"'{}' does not match {}pattern <key>=<value>.",
kv, hashmap_info
)
}
CLIError::MissingCommandError => writeln!(f, "Please specify the main sub-command."),
CLIError::MissingMethodError(ref cmd) =>
writeln!(f,
"Please specify the method to call on the '{}' command.",
cmd),
CLIError::MissingMethodError(ref cmd) => writeln!(
f,
"Please specify the method to call on the '{}' command.",
cmd
),
}
}
}
@@ -730,7 +659,11 @@ pub fn assure_config_dir_exists(dir: &str) -> Result<String, CLIError> {
let expanded_config_dir = if trdir.as_bytes()[0] == b'~' {
match env::var("HOME").ok().or(env::var("UserProfile").ok()) {
None => return Err(CLIError::Configuration(ConfigurationError::HomeExpansionFailed(trdir.to_string()))),
None => {
return Err(CLIError::Configuration(
ConfigurationError::HomeExpansionFailed(trdir.to_string()),
))
}
Some(mut user) => {
user.push_str(&trdir[1..]);
user
@@ -743,21 +676,26 @@ pub fn assure_config_dir_exists(dir: &str) -> Result<String, CLIError> {
if let Err(err) = fs::create_dir(&expanded_config_dir) {
if err.kind() != io::ErrorKind::AlreadyExists {
return Err(CLIError::Configuration(
ConfigurationError::DirectoryCreationFailed((expanded_config_dir, err))));
ConfigurationError::DirectoryCreationFailed((expanded_config_dir, err)),
));
}
}
Ok(expanded_config_dir)
}
pub fn application_secret_from_directory(dir: &str,
secret_basename: &str,
json_console_secret: &str)
-> Result<ApplicationSecret, CLIError> {
pub fn application_secret_from_directory(
dir: &str,
secret_basename: &str,
json_console_secret: &str,
) -> Result<ApplicationSecret, CLIError> {
let secret_path = Path::new(dir).join(secret_basename);
let secret_str = || secret_path.as_path().to_str().unwrap().to_string();
let secret_io_error = |io_err: io::Error| {
Err(CLIError::Configuration(ConfigurationError::Io((secret_str(), io_err))))
Err(CLIError::Configuration(ConfigurationError::Io((
secret_str(),
io_err,
))))
};
for _ in 0..2 {
@@ -767,18 +705,20 @@ pub fn application_secret_from_directory(dir: &str,
// Write our built-in one - user may adjust the written file at will
err = match fs::OpenOptions::new()
.create(true)
.write(true)
.truncate(true)
.open(&secret_path) {
.create(true)
.write(true)
.truncate(true)
.open(&secret_path)
{
Err(cfe) => cfe,
Ok(mut f) => {
// Assure we convert 'ugly' json string into pretty one
let console_secret: ConsoleApplicationSecret =
json::from_str(json_console_secret).unwrap();
match json::to_writer_pretty(&mut f, &console_secret) {
Err(serde_err) =>
panic!("Unexpected serde error: {:#?}", serde_err),
Err(serde_err) => {
panic!("Unexpected serde error: {:#?}", serde_err)
}
Ok(_) => continue,
}
}
@@ -787,24 +727,21 @@ pub fn application_secret_from_directory(dir: &str,
}
return secret_io_error(err);
}
Ok(f) => {
match json::de::from_reader::<_, ConsoleApplicationSecret>(f) {
Err(json_err) =>
return Err(CLIError::Configuration(
ConfigurationError::Secret(
ApplicationSecretError::DecoderError(
(secret_str(), json_err)
)))),
Ok(console_secret) => match console_secret.installed {
Some(secret) => return Ok(secret),
None => return Err(
CLIError::Configuration(
ConfigurationError::Secret(
ApplicationSecretError::FormatError(secret_str())
))),
},
Ok(f) => match json::de::from_reader::<_, ConsoleApplicationSecret>(f) {
Err(json_err) => {
return Err(CLIError::Configuration(ConfigurationError::Secret(
ApplicationSecretError::DecoderError((secret_str(), json_err)),
)))
}
}
Ok(console_secret) => match console_secret.installed {
Some(secret) => return Ok(secret),
None => {
return Err(CLIError::Configuration(ConfigurationError::Secret(
ApplicationSecretError::FormatError(secret_str()),
)))
}
},
},
}
}
unreachable!();

View File

@@ -3,50 +3,46 @@
// DO NOT EDIT !
#![allow(unused_variables, unused_imports, dead_code, unused_mut)]
extern crate tokio;
#[macro_use]
extern crate clap;
extern crate yup_oauth2 as oauth2;
extern crate yup_hyper_mock as mock;
extern crate hyper_rustls;
extern crate serde;
extern crate serde_json;
extern crate hyper;
extern crate mime;
extern crate strsim;
extern crate google_networkmanagement1 as api;
use std::env;
use std::io::{self, Write};
use clap::{App, SubCommand, Arg};
mod cmn;
use google_networkmanagement1::{api, Error};
use cmn::{InvalidOptionsError, CLIError, JsonTokenStorage, arg_from_str, writer_from_opts, parse_kv_arg,
mod client;
use client::{InvalidOptionsError, CLIError, arg_from_str, writer_from_opts, parse_kv_arg,
input_file_from_opts, input_mime_from_opts, FieldCursor, FieldError, CallType, UploadProtocol,
calltype_from_str, remove_json_null_values, ComplexType, JsonType, JsonTypeInfo};
use std::default::Default;
use std::str::FromStr;
use oauth2::{Authenticator, DefaultAuthenticatorDelegate, FlowType};
use serde_json as json;
use clap::ArgMatches;
enum DoitError {
IoError(String, io::Error),
ApiError(api::Error),
ApiError(Error),
}
struct Engine<'n> {
opt: ArgMatches<'n>,
hub: api::NetworkManagement<hyper::Client, Authenticator<DefaultAuthenticatorDelegate, JsonTokenStorage, hyper::Client>>,
hub: api::NetworkManagement<hyper::Client<hyper_rustls::HttpsConnector<hyper::client::connect::HttpConnector>, hyper::body::Body>
>,
gp: Vec<&'static str>,
gpm: Vec<(&'static str, &'static str)>,
}
impl<'n> Engine<'n> {
fn _projects_locations_get(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
async fn _projects_locations_get(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
-> Result<(), DoitError> {
let mut call = self.hub.projects().locations_get(opt.value_of("name").unwrap_or(""));
for parg in opt.values_of("v").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
@@ -83,7 +79,7 @@ impl<'n> Engine<'n> {
Err(io_err) => return Err(DoitError::IoError(opt.value_of("out").unwrap_or("-").to_string(), io_err)),
};
match match protocol {
CallType::Standard => call.doit(),
CallType::Standard => call.doit().await,
_ => unreachable!()
} {
Err(api_err) => Err(DoitError::ApiError(api_err)),
@@ -98,7 +94,7 @@ impl<'n> Engine<'n> {
}
}
fn _projects_locations_global_connectivity_tests_create(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
async fn _projects_locations_global_connectivity_tests_create(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
-> Result<(), DoitError> {
let mut field_cursor = FieldCursor::default();
@@ -121,30 +117,30 @@ impl<'n> Engine<'n> {
let type_info: Option<(&'static str, JsonTypeInfo)> =
match &temp_cursor.to_string()[..] {
"update-time" => Some(("updateTime", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"destination.network" => Some(("destination.network", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"destination.project-id" => Some(("destination.projectId", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"destination.instance" => Some(("destination.instance", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"destination.network-type" => Some(("destination.networkType", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"destination.ip-address" => Some(("destination.ipAddress", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"destination.port" => Some(("destination.port", JsonTypeInfo { jtype: JsonType::Int, ctype: ComplexType::Pod })),
"display-name" => Some(("displayName", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"name" => Some(("name", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"labels" => Some(("labels", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Map })),
"source.network" => Some(("source.network", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"source.project-id" => Some(("source.projectId", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"source.instance" => Some(("source.instance", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"source.network-type" => Some(("source.networkType", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"source.ip-address" => Some(("source.ipAddress", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"source.port" => Some(("source.port", JsonTypeInfo { jtype: JsonType::Int, ctype: ComplexType::Pod })),
"reachability-details.result" => Some(("reachabilityDetails.result", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"reachability-details.verify-time" => Some(("reachabilityDetails.verifyTime", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"reachability-details.error.message" => Some(("reachabilityDetails.error.message", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"reachability-details.error.code" => Some(("reachabilityDetails.error.code", JsonTypeInfo { jtype: JsonType::Int, ctype: ComplexType::Pod })),
"protocol" => Some(("protocol", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"related-projects" => Some(("relatedProjects", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Vec })),
"create-time" => Some(("createTime", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"description" => Some(("description", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"destination.instance" => Some(("destination.instance", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"destination.ip-address" => Some(("destination.ipAddress", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"destination.network" => Some(("destination.network", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"destination.network-type" => Some(("destination.networkType", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"destination.port" => Some(("destination.port", JsonTypeInfo { jtype: JsonType::Int, ctype: ComplexType::Pod })),
"destination.project-id" => Some(("destination.projectId", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"display-name" => Some(("displayName", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"labels" => Some(("labels", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Map })),
"name" => Some(("name", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"protocol" => Some(("protocol", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"reachability-details.error.code" => Some(("reachabilityDetails.error.code", JsonTypeInfo { jtype: JsonType::Int, ctype: ComplexType::Pod })),
"reachability-details.error.message" => Some(("reachabilityDetails.error.message", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"reachability-details.result" => Some(("reachabilityDetails.result", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"reachability-details.verify-time" => Some(("reachabilityDetails.verifyTime", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"related-projects" => Some(("relatedProjects", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Vec })),
"source.instance" => Some(("source.instance", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"source.ip-address" => Some(("source.ipAddress", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"source.network" => Some(("source.network", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"source.network-type" => Some(("source.networkType", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"source.port" => Some(("source.port", JsonTypeInfo { jtype: JsonType::Int, ctype: ComplexType::Pod })),
"source.project-id" => Some(("source.projectId", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"update-time" => Some(("updateTime", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
_ => {
let suggestion = FieldCursor::did_you_mean(key, &vec!["code", "create-time", "description", "destination", "display-name", "error", "instance", "ip-address", "labels", "message", "name", "network", "network-type", "port", "project-id", "protocol", "reachability-details", "related-projects", "result", "source", "update-time", "verify-time"]);
err.issues.push(CLIError::Field(FieldError::Unknown(temp_cursor.to_string(), suggestion, value.map(|v| v.to_string()))));
@@ -195,7 +191,7 @@ impl<'n> Engine<'n> {
Err(io_err) => return Err(DoitError::IoError(opt.value_of("out").unwrap_or("-").to_string(), io_err)),
};
match match protocol {
CallType::Standard => call.doit(),
CallType::Standard => call.doit().await,
_ => unreachable!()
} {
Err(api_err) => Err(DoitError::ApiError(api_err)),
@@ -210,7 +206,7 @@ impl<'n> Engine<'n> {
}
}
fn _projects_locations_global_connectivity_tests_delete(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
async fn _projects_locations_global_connectivity_tests_delete(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
-> Result<(), DoitError> {
let mut call = self.hub.projects().locations_global_connectivity_tests_delete(opt.value_of("name").unwrap_or(""));
for parg in opt.values_of("v").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
@@ -247,7 +243,7 @@ impl<'n> Engine<'n> {
Err(io_err) => return Err(DoitError::IoError(opt.value_of("out").unwrap_or("-").to_string(), io_err)),
};
match match protocol {
CallType::Standard => call.doit(),
CallType::Standard => call.doit().await,
_ => unreachable!()
} {
Err(api_err) => Err(DoitError::ApiError(api_err)),
@@ -262,7 +258,7 @@ impl<'n> Engine<'n> {
}
}
fn _projects_locations_global_connectivity_tests_get(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
async fn _projects_locations_global_connectivity_tests_get(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
-> Result<(), DoitError> {
let mut call = self.hub.projects().locations_global_connectivity_tests_get(opt.value_of("name").unwrap_or(""));
for parg in opt.values_of("v").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
@@ -299,7 +295,7 @@ impl<'n> Engine<'n> {
Err(io_err) => return Err(DoitError::IoError(opt.value_of("out").unwrap_or("-").to_string(), io_err)),
};
match match protocol {
CallType::Standard => call.doit(),
CallType::Standard => call.doit().await,
_ => unreachable!()
} {
Err(api_err) => Err(DoitError::ApiError(api_err)),
@@ -314,7 +310,7 @@ impl<'n> Engine<'n> {
}
}
fn _projects_locations_global_connectivity_tests_get_iam_policy(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
async fn _projects_locations_global_connectivity_tests_get_iam_policy(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
-> Result<(), DoitError> {
let mut call = self.hub.projects().locations_global_connectivity_tests_get_iam_policy(opt.value_of("resource").unwrap_or(""));
for parg in opt.values_of("v").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
@@ -355,7 +351,7 @@ impl<'n> Engine<'n> {
Err(io_err) => return Err(DoitError::IoError(opt.value_of("out").unwrap_or("-").to_string(), io_err)),
};
match match protocol {
CallType::Standard => call.doit(),
CallType::Standard => call.doit().await,
_ => unreachable!()
} {
Err(api_err) => Err(DoitError::ApiError(api_err)),
@@ -370,7 +366,7 @@ impl<'n> Engine<'n> {
}
}
fn _projects_locations_global_connectivity_tests_list(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
async fn _projects_locations_global_connectivity_tests_list(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
-> Result<(), DoitError> {
let mut call = self.hub.projects().locations_global_connectivity_tests_list(opt.value_of("parent").unwrap_or(""));
for parg in opt.values_of("v").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
@@ -401,7 +397,7 @@ impl<'n> Engine<'n> {
err.issues.push(CLIError::UnknownParameter(key.to_string(),
{let mut v = Vec::new();
v.extend(self.gp.iter().map(|v|*v));
v.extend(["order-by", "page-token", "filter", "page-size"].iter().map(|v|*v));
v.extend(["page-size", "filter", "page-token", "order-by"].iter().map(|v|*v));
v } ));
}
}
@@ -420,7 +416,7 @@ impl<'n> Engine<'n> {
Err(io_err) => return Err(DoitError::IoError(opt.value_of("out").unwrap_or("-").to_string(), io_err)),
};
match match protocol {
CallType::Standard => call.doit(),
CallType::Standard => call.doit().await,
_ => unreachable!()
} {
Err(api_err) => Err(DoitError::ApiError(api_err)),
@@ -435,7 +431,7 @@ impl<'n> Engine<'n> {
}
}
fn _projects_locations_global_connectivity_tests_patch(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
async fn _projects_locations_global_connectivity_tests_patch(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
-> Result<(), DoitError> {
let mut field_cursor = FieldCursor::default();
@@ -458,30 +454,30 @@ impl<'n> Engine<'n> {
let type_info: Option<(&'static str, JsonTypeInfo)> =
match &temp_cursor.to_string()[..] {
"update-time" => Some(("updateTime", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"destination.network" => Some(("destination.network", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"destination.project-id" => Some(("destination.projectId", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"destination.instance" => Some(("destination.instance", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"destination.network-type" => Some(("destination.networkType", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"destination.ip-address" => Some(("destination.ipAddress", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"destination.port" => Some(("destination.port", JsonTypeInfo { jtype: JsonType::Int, ctype: ComplexType::Pod })),
"display-name" => Some(("displayName", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"name" => Some(("name", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"labels" => Some(("labels", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Map })),
"source.network" => Some(("source.network", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"source.project-id" => Some(("source.projectId", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"source.instance" => Some(("source.instance", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"source.network-type" => Some(("source.networkType", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"source.ip-address" => Some(("source.ipAddress", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"source.port" => Some(("source.port", JsonTypeInfo { jtype: JsonType::Int, ctype: ComplexType::Pod })),
"reachability-details.result" => Some(("reachabilityDetails.result", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"reachability-details.verify-time" => Some(("reachabilityDetails.verifyTime", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"reachability-details.error.message" => Some(("reachabilityDetails.error.message", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"reachability-details.error.code" => Some(("reachabilityDetails.error.code", JsonTypeInfo { jtype: JsonType::Int, ctype: ComplexType::Pod })),
"protocol" => Some(("protocol", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"related-projects" => Some(("relatedProjects", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Vec })),
"create-time" => Some(("createTime", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"description" => Some(("description", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"destination.instance" => Some(("destination.instance", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"destination.ip-address" => Some(("destination.ipAddress", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"destination.network" => Some(("destination.network", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"destination.network-type" => Some(("destination.networkType", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"destination.port" => Some(("destination.port", JsonTypeInfo { jtype: JsonType::Int, ctype: ComplexType::Pod })),
"destination.project-id" => Some(("destination.projectId", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"display-name" => Some(("displayName", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"labels" => Some(("labels", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Map })),
"name" => Some(("name", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"protocol" => Some(("protocol", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"reachability-details.error.code" => Some(("reachabilityDetails.error.code", JsonTypeInfo { jtype: JsonType::Int, ctype: ComplexType::Pod })),
"reachability-details.error.message" => Some(("reachabilityDetails.error.message", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"reachability-details.result" => Some(("reachabilityDetails.result", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"reachability-details.verify-time" => Some(("reachabilityDetails.verifyTime", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"related-projects" => Some(("relatedProjects", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Vec })),
"source.instance" => Some(("source.instance", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"source.ip-address" => Some(("source.ipAddress", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"source.network" => Some(("source.network", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"source.network-type" => Some(("source.networkType", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"source.port" => Some(("source.port", JsonTypeInfo { jtype: JsonType::Int, ctype: ComplexType::Pod })),
"source.project-id" => Some(("source.projectId", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"update-time" => Some(("updateTime", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
_ => {
let suggestion = FieldCursor::did_you_mean(key, &vec!["code", "create-time", "description", "destination", "display-name", "error", "instance", "ip-address", "labels", "message", "name", "network", "network-type", "port", "project-id", "protocol", "reachability-details", "related-projects", "result", "source", "update-time", "verify-time"]);
err.issues.push(CLIError::Field(FieldError::Unknown(temp_cursor.to_string(), suggestion, value.map(|v| v.to_string()))));
@@ -532,7 +528,7 @@ impl<'n> Engine<'n> {
Err(io_err) => return Err(DoitError::IoError(opt.value_of("out").unwrap_or("-").to_string(), io_err)),
};
match match protocol {
CallType::Standard => call.doit(),
CallType::Standard => call.doit().await,
_ => unreachable!()
} {
Err(api_err) => Err(DoitError::ApiError(api_err)),
@@ -547,7 +543,7 @@ impl<'n> Engine<'n> {
}
}
fn _projects_locations_global_connectivity_tests_rerun(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
async fn _projects_locations_global_connectivity_tests_rerun(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
-> Result<(), DoitError> {
let mut field_cursor = FieldCursor::default();
@@ -616,7 +612,7 @@ impl<'n> Engine<'n> {
Err(io_err) => return Err(DoitError::IoError(opt.value_of("out").unwrap_or("-").to_string(), io_err)),
};
match match protocol {
CallType::Standard => call.doit(),
CallType::Standard => call.doit().await,
_ => unreachable!()
} {
Err(api_err) => Err(DoitError::ApiError(api_err)),
@@ -631,7 +627,7 @@ impl<'n> Engine<'n> {
}
}
fn _projects_locations_global_connectivity_tests_set_iam_policy(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
async fn _projects_locations_global_connectivity_tests_set_iam_policy(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
-> Result<(), DoitError> {
let mut field_cursor = FieldCursor::default();
@@ -703,7 +699,7 @@ impl<'n> Engine<'n> {
Err(io_err) => return Err(DoitError::IoError(opt.value_of("out").unwrap_or("-").to_string(), io_err)),
};
match match protocol {
CallType::Standard => call.doit(),
CallType::Standard => call.doit().await,
_ => unreachable!()
} {
Err(api_err) => Err(DoitError::ApiError(api_err)),
@@ -718,7 +714,7 @@ impl<'n> Engine<'n> {
}
}
fn _projects_locations_global_connectivity_tests_test_iam_permissions(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
async fn _projects_locations_global_connectivity_tests_test_iam_permissions(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
-> Result<(), DoitError> {
let mut field_cursor = FieldCursor::default();
@@ -788,7 +784,7 @@ impl<'n> Engine<'n> {
Err(io_err) => return Err(DoitError::IoError(opt.value_of("out").unwrap_or("-").to_string(), io_err)),
};
match match protocol {
CallType::Standard => call.doit(),
CallType::Standard => call.doit().await,
_ => unreachable!()
} {
Err(api_err) => Err(DoitError::ApiError(api_err)),
@@ -803,7 +799,7 @@ impl<'n> Engine<'n> {
}
}
fn _projects_locations_global_operations_cancel(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
async fn _projects_locations_global_operations_cancel(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
-> Result<(), DoitError> {
let mut field_cursor = FieldCursor::default();
@@ -872,7 +868,7 @@ impl<'n> Engine<'n> {
Err(io_err) => return Err(DoitError::IoError(opt.value_of("out").unwrap_or("-").to_string(), io_err)),
};
match match protocol {
CallType::Standard => call.doit(),
CallType::Standard => call.doit().await,
_ => unreachable!()
} {
Err(api_err) => Err(DoitError::ApiError(api_err)),
@@ -887,7 +883,7 @@ impl<'n> Engine<'n> {
}
}
fn _projects_locations_global_operations_delete(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
async fn _projects_locations_global_operations_delete(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
-> Result<(), DoitError> {
let mut call = self.hub.projects().locations_global_operations_delete(opt.value_of("name").unwrap_or(""));
for parg in opt.values_of("v").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
@@ -924,7 +920,7 @@ impl<'n> Engine<'n> {
Err(io_err) => return Err(DoitError::IoError(opt.value_of("out").unwrap_or("-").to_string(), io_err)),
};
match match protocol {
CallType::Standard => call.doit(),
CallType::Standard => call.doit().await,
_ => unreachable!()
} {
Err(api_err) => Err(DoitError::ApiError(api_err)),
@@ -939,7 +935,7 @@ impl<'n> Engine<'n> {
}
}
fn _projects_locations_global_operations_get(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
async fn _projects_locations_global_operations_get(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
-> Result<(), DoitError> {
let mut call = self.hub.projects().locations_global_operations_get(opt.value_of("name").unwrap_or(""));
for parg in opt.values_of("v").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
@@ -976,7 +972,7 @@ impl<'n> Engine<'n> {
Err(io_err) => return Err(DoitError::IoError(opt.value_of("out").unwrap_or("-").to_string(), io_err)),
};
match match protocol {
CallType::Standard => call.doit(),
CallType::Standard => call.doit().await,
_ => unreachable!()
} {
Err(api_err) => Err(DoitError::ApiError(api_err)),
@@ -991,7 +987,7 @@ impl<'n> Engine<'n> {
}
}
fn _projects_locations_global_operations_list(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
async fn _projects_locations_global_operations_list(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
-> Result<(), DoitError> {
let mut call = self.hub.projects().locations_global_operations_list(opt.value_of("name").unwrap_or(""));
for parg in opt.values_of("v").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
@@ -1019,7 +1015,7 @@ impl<'n> Engine<'n> {
err.issues.push(CLIError::UnknownParameter(key.to_string(),
{let mut v = Vec::new();
v.extend(self.gp.iter().map(|v|*v));
v.extend(["filter", "page-token", "page-size"].iter().map(|v|*v));
v.extend(["page-size", "page-token", "filter"].iter().map(|v|*v));
v } ));
}
}
@@ -1038,7 +1034,7 @@ impl<'n> Engine<'n> {
Err(io_err) => return Err(DoitError::IoError(opt.value_of("out").unwrap_or("-").to_string(), io_err)),
};
match match protocol {
CallType::Standard => call.doit(),
CallType::Standard => call.doit().await,
_ => unreachable!()
} {
Err(api_err) => Err(DoitError::ApiError(api_err)),
@@ -1053,7 +1049,7 @@ impl<'n> Engine<'n> {
}
}
fn _projects_locations_list(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
async fn _projects_locations_list(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
-> Result<(), DoitError> {
let mut call = self.hub.projects().locations_list(opt.value_of("name").unwrap_or(""));
for parg in opt.values_of("v").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
@@ -1081,7 +1077,7 @@ impl<'n> Engine<'n> {
err.issues.push(CLIError::UnknownParameter(key.to_string(),
{let mut v = Vec::new();
v.extend(self.gp.iter().map(|v|*v));
v.extend(["filter", "page-token", "page-size"].iter().map(|v|*v));
v.extend(["page-size", "page-token", "filter"].iter().map(|v|*v));
v } ));
}
}
@@ -1100,7 +1096,7 @@ impl<'n> Engine<'n> {
Err(io_err) => return Err(DoitError::IoError(opt.value_of("out").unwrap_or("-").to_string(), io_err)),
};
match match protocol {
CallType::Standard => call.doit(),
CallType::Standard => call.doit().await,
_ => unreachable!()
} {
Err(api_err) => Err(DoitError::ApiError(api_err)),
@@ -1115,7 +1111,7 @@ impl<'n> Engine<'n> {
}
}
fn _doit(&self, dry_run: bool) -> Result<Result<(), DoitError>, Option<InvalidOptionsError>> {
async fn _doit(&self, dry_run: bool) -> Result<Result<(), DoitError>, Option<InvalidOptionsError>> {
let mut err = InvalidOptionsError::new();
let mut call_result: Result<(), DoitError> = Ok(());
let mut err_opt: Option<InvalidOptionsError> = None;
@@ -1123,49 +1119,49 @@ impl<'n> Engine<'n> {
("projects", Some(opt)) => {
match opt.subcommand() {
("locations-get", Some(opt)) => {
call_result = self._projects_locations_get(opt, dry_run, &mut err);
call_result = self._projects_locations_get(opt, dry_run, &mut err).await;
},
("locations-global-connectivity-tests-create", Some(opt)) => {
call_result = self._projects_locations_global_connectivity_tests_create(opt, dry_run, &mut err);
call_result = self._projects_locations_global_connectivity_tests_create(opt, dry_run, &mut err).await;
},
("locations-global-connectivity-tests-delete", Some(opt)) => {
call_result = self._projects_locations_global_connectivity_tests_delete(opt, dry_run, &mut err);
call_result = self._projects_locations_global_connectivity_tests_delete(opt, dry_run, &mut err).await;
},
("locations-global-connectivity-tests-get", Some(opt)) => {
call_result = self._projects_locations_global_connectivity_tests_get(opt, dry_run, &mut err);
call_result = self._projects_locations_global_connectivity_tests_get(opt, dry_run, &mut err).await;
},
("locations-global-connectivity-tests-get-iam-policy", Some(opt)) => {
call_result = self._projects_locations_global_connectivity_tests_get_iam_policy(opt, dry_run, &mut err);
call_result = self._projects_locations_global_connectivity_tests_get_iam_policy(opt, dry_run, &mut err).await;
},
("locations-global-connectivity-tests-list", Some(opt)) => {
call_result = self._projects_locations_global_connectivity_tests_list(opt, dry_run, &mut err);
call_result = self._projects_locations_global_connectivity_tests_list(opt, dry_run, &mut err).await;
},
("locations-global-connectivity-tests-patch", Some(opt)) => {
call_result = self._projects_locations_global_connectivity_tests_patch(opt, dry_run, &mut err);
call_result = self._projects_locations_global_connectivity_tests_patch(opt, dry_run, &mut err).await;
},
("locations-global-connectivity-tests-rerun", Some(opt)) => {
call_result = self._projects_locations_global_connectivity_tests_rerun(opt, dry_run, &mut err);
call_result = self._projects_locations_global_connectivity_tests_rerun(opt, dry_run, &mut err).await;
},
("locations-global-connectivity-tests-set-iam-policy", Some(opt)) => {
call_result = self._projects_locations_global_connectivity_tests_set_iam_policy(opt, dry_run, &mut err);
call_result = self._projects_locations_global_connectivity_tests_set_iam_policy(opt, dry_run, &mut err).await;
},
("locations-global-connectivity-tests-test-iam-permissions", Some(opt)) => {
call_result = self._projects_locations_global_connectivity_tests_test_iam_permissions(opt, dry_run, &mut err);
call_result = self._projects_locations_global_connectivity_tests_test_iam_permissions(opt, dry_run, &mut err).await;
},
("locations-global-operations-cancel", Some(opt)) => {
call_result = self._projects_locations_global_operations_cancel(opt, dry_run, &mut err);
call_result = self._projects_locations_global_operations_cancel(opt, dry_run, &mut err).await;
},
("locations-global-operations-delete", Some(opt)) => {
call_result = self._projects_locations_global_operations_delete(opt, dry_run, &mut err);
call_result = self._projects_locations_global_operations_delete(opt, dry_run, &mut err).await;
},
("locations-global-operations-get", Some(opt)) => {
call_result = self._projects_locations_global_operations_get(opt, dry_run, &mut err);
call_result = self._projects_locations_global_operations_get(opt, dry_run, &mut err).await;
},
("locations-global-operations-list", Some(opt)) => {
call_result = self._projects_locations_global_operations_list(opt, dry_run, &mut err);
call_result = self._projects_locations_global_operations_list(opt, dry_run, &mut err).await;
},
("locations-list", Some(opt)) => {
call_result = self._projects_locations_list(opt, dry_run, &mut err);
call_result = self._projects_locations_list(opt, dry_run, &mut err).await;
},
_ => {
err.issues.push(CLIError::MissingMethodError("projects".to_string()));
@@ -1190,41 +1186,26 @@ impl<'n> Engine<'n> {
}
// Please note that this call will fail if any part of the opt can't be handled
fn new(opt: ArgMatches<'n>) -> Result<Engine<'n>, InvalidOptionsError> {
async fn new(opt: ArgMatches<'n>) -> Result<Engine<'n>, InvalidOptionsError> {
let (config_dir, secret) = {
let config_dir = match cmn::assure_config_dir_exists(opt.value_of("folder").unwrap_or("~/.google-service-cli")) {
let config_dir = match client::assure_config_dir_exists(opt.value_of("folder").unwrap_or("~/.google-service-cli")) {
Err(e) => return Err(InvalidOptionsError::single(e, 3)),
Ok(p) => p,
};
match cmn::application_secret_from_directory(&config_dir, "networkmanagement1-secret.json",
match client::application_secret_from_directory(&config_dir, "networkmanagement1-secret.json",
"{\"installed\":{\"auth_uri\":\"https://accounts.google.com/o/oauth2/auth\",\"client_secret\":\"hCsslbCUyfehWMmbkG8vTYxG\",\"token_uri\":\"https://accounts.google.com/o/oauth2/token\",\"client_email\":\"\",\"redirect_uris\":[\"urn:ietf:wg:oauth:2.0:oob\",\"oob\"],\"client_x509_cert_url\":\"\",\"client_id\":\"620010449518-9ngf7o4dhs0dka470npqvor6dc5lqb9b.apps.googleusercontent.com\",\"auth_provider_x509_cert_url\":\"https://www.googleapis.com/oauth2/v1/certs\"}}") {
Ok(secret) => (config_dir, secret),
Err(e) => return Err(InvalidOptionsError::single(e, 4))
}
};
let auth = Authenticator::new( &secret, DefaultAuthenticatorDelegate,
if opt.is_present("debug-auth") {
hyper::Client::with_connector(mock::TeeConnector {
connector: hyper::net::HttpsConnector::new(hyper_rustls::TlsClient::new())
})
} else {
hyper::Client::with_connector(hyper::net::HttpsConnector::new(hyper_rustls::TlsClient::new()))
},
JsonTokenStorage {
program_name: "networkmanagement1",
db_dir: config_dir.clone(),
}, Some(FlowType::InstalledRedirect(54324)));
let auth = yup_oauth2::InstalledFlowAuthenticator::builder(
secret,
yup_oauth2::InstalledFlowReturnMethod::HTTPRedirect,
).persist_tokens_to_disk(format!("{}/networkmanagement1", config_dir)).build().await.unwrap();
let client =
if opt.is_present("debug") {
hyper::Client::with_connector(mock::TeeConnector {
connector: hyper::net::HttpsConnector::new(hyper_rustls::TlsClient::new())
})
} else {
hyper::Client::with_connector(hyper::net::HttpsConnector::new(hyper_rustls::TlsClient::new()))
};
let client = hyper::Client::builder().build(hyper_rustls::HttpsConnector::with_native_roots());
let engine = Engine {
opt: opt,
hub: api::NetworkManagement::new(client, auth),
@@ -1240,22 +1221,23 @@ impl<'n> Engine<'n> {
]
};
match engine._doit(true) {
match engine._doit(true).await {
Err(Some(err)) => Err(err),
Err(None) => Ok(engine),
Ok(_) => unreachable!(),
}
}
fn doit(&self) -> Result<(), DoitError> {
match self._doit(false) {
async fn doit(&self) -> Result<(), DoitError> {
match self._doit(false).await {
Ok(res) => res,
Err(_) => unreachable!(),
}
}
}
fn main() {
#[tokio::main]
async fn main() {
let mut exit_status = 0i32;
let arg_data = [
("projects", "methods: 'locations-get', 'locations-global-connectivity-tests-create', 'locations-global-connectivity-tests-delete', 'locations-global-connectivity-tests-get', 'locations-global-connectivity-tests-get-iam-policy', 'locations-global-connectivity-tests-list', 'locations-global-connectivity-tests-patch', 'locations-global-connectivity-tests-rerun', 'locations-global-connectivity-tests-set-iam-policy', 'locations-global-connectivity-tests-test-iam-permissions', 'locations-global-operations-cancel', 'locations-global-operations-delete', 'locations-global-operations-get', 'locations-global-operations-list' and 'locations-list'", vec![
@@ -1282,25 +1264,12 @@ fn main() {
Some(false)),
]),
("locations-global-connectivity-tests-create",
Some(r##"Creates a new Connectivity Test.
After you create a test, the reachability analysis is performed as part
of the long running operation, which completes when the analysis completes.
If the endpoint specifications in `ConnectivityTest` are invalid
(for example, containing non-existent resources in the network, or you
don't have read permissions to the network configurations of listed
projects), then the reachability result returns a value of `UNKNOWN`.
If the endpoint specifications in `ConnectivityTest` are
incomplete, the reachability result returns a value of
<code>AMBIGUOUS</code>. For more information,
see the Connectivity Test documentation."##),
Some(r##"Creates a new Connectivity Test. After you create a test, the reachability analysis is performed as part of the long running operation, which completes when the analysis completes. If the endpoint specifications in `ConnectivityTest` are invalid (for example, containing non-existent resources in the network, or you don't have read permissions to the network configurations of listed projects), then the reachability result returns a value of `UNKNOWN`. If the endpoint specifications in `ConnectivityTest` are incomplete, the reachability result returns a value of AMBIGUOUS. For more information, see the Connectivity Test documentation."##),
"Details at http://byron.github.io/google-apis-rs/google_networkmanagement1_cli/projects_locations-global-connectivity-tests-create",
vec![
(Some(r##"parent"##),
None,
Some(r##"Required. The parent resource of the Connectivity Test to create:
`projects/{project_id}/locations/global`"##),
Some(r##"Required. The parent resource of the Connectivity Test to create: `projects/{project_id}/locations/global`"##),
Some(true),
Some(false)),
@@ -1328,8 +1297,7 @@ fn main() {
vec![
(Some(r##"name"##),
None,
Some(r##"Required. Connectivity Test resource name using the form:
`projects/{project_id}/locations/global/connectivityTests/{test_id}`"##),
Some(r##"Required. Connectivity Test resource name using the form: `projects/{project_id}/locations/global/connectivityTests/{test_id}`"##),
Some(true),
Some(false)),
@@ -1351,8 +1319,7 @@ fn main() {
vec![
(Some(r##"name"##),
None,
Some(r##"Required. `ConnectivityTest` resource name using the form:
`projects/{project_id}/locations/global/connectivityTests/{test_id}`"##),
Some(r##"Required. `ConnectivityTest` resource name using the form: `projects/{project_id}/locations/global/connectivityTests/{test_id}`"##),
Some(true),
Some(false)),
@@ -1369,15 +1336,12 @@ fn main() {
Some(false)),
]),
("locations-global-connectivity-tests-get-iam-policy",
Some(r##"Gets the access control policy for a resource.
Returns an empty policy if the resource exists and does not have a policy
set."##),
Some(r##"Gets the access control policy for a resource. Returns an empty policy if the resource exists and does not have a policy set."##),
"Details at http://byron.github.io/google-apis-rs/google_networkmanagement1_cli/projects_locations-global-connectivity-tests-get-iam-policy",
vec![
(Some(r##"resource"##),
None,
Some(r##"REQUIRED: The resource for which the policy is being requested.
See the operation documentation for the appropriate value for this field."##),
Some(r##"REQUIRED: The resource for which the policy is being requested. See the operation documentation for the appropriate value for this field."##),
Some(true),
Some(false)),
@@ -1399,8 +1363,7 @@ fn main() {
vec![
(Some(r##"parent"##),
None,
Some(r##"Required. The parent resource of the Connectivity Tests:
`projects/{project_id}/locations/global`"##),
Some(r##"Required. The parent resource of the Connectivity Tests: `projects/{project_id}/locations/global`"##),
Some(true),
Some(false)),
@@ -1417,26 +1380,12 @@ fn main() {
Some(false)),
]),
("locations-global-connectivity-tests-patch",
Some(r##"Updates the configuration of an existing `ConnectivityTest`.
After you update a test, the reachability analysis is performed as part
of the long running operation, which completes when the analysis completes.
The Reachability state in the test resource is updated with the new result.
If the endpoint specifications in `ConnectivityTest` are invalid
(for example, they contain non-existent resources in the network, or the
user does not have read permissions to the network configurations of
listed projects), then the reachability result returns a value of
<code>UNKNOWN</code>.
If the endpoint specifications in `ConnectivityTest` are incomplete, the
reachability result returns a value of `AMBIGUOUS`. See the documentation
in `ConnectivityTest` for for more details."##),
Some(r##"Updates the configuration of an existing `ConnectivityTest`. After you update a test, the reachability analysis is performed as part of the long running operation, which completes when the analysis completes. The Reachability state in the test resource is updated with the new result. If the endpoint specifications in `ConnectivityTest` are invalid (for example, they contain non-existent resources in the network, or the user does not have read permissions to the network configurations of listed projects), then the reachability result returns a value of UNKNOWN. If the endpoint specifications in `ConnectivityTest` are incomplete, the reachability result returns a value of `AMBIGUOUS`. See the documentation in `ConnectivityTest` for for more details."##),
"Details at http://byron.github.io/google-apis-rs/google_networkmanagement1_cli/projects_locations-global-connectivity-tests-patch",
vec![
(Some(r##"name"##),
None,
Some(r##"Required. Unique name of the resource using the form:
`projects/{project_id}/locations/global/connectivityTests/{test_id}`"##),
Some(r##"Required. Unique name of the resource using the form: `projects/{project_id}/locations/global/connectivityTests/{test_id}`"##),
Some(true),
Some(false)),
@@ -1459,24 +1408,12 @@ fn main() {
Some(false)),
]),
("locations-global-connectivity-tests-rerun",
Some(r##"Rerun an existing `ConnectivityTest`.
After the user triggers the rerun, the reachability analysis is performed
as part of the long running operation, which completes when the analysis
completes.
Even though the test configuration remains the same, the reachability
result may change due to underlying network configuration changes.
If the endpoint specifications in `ConnectivityTest` become invalid (for
example, specified resources are deleted in the network, or you lost
read permissions to the network configurations of listed projects), then
the reachability result returns a value of `UNKNOWN`."##),
Some(r##"Rerun an existing `ConnectivityTest`. After the user triggers the rerun, the reachability analysis is performed as part of the long running operation, which completes when the analysis completes. Even though the test configuration remains the same, the reachability result may change due to underlying network configuration changes. If the endpoint specifications in `ConnectivityTest` become invalid (for example, specified resources are deleted in the network, or you lost read permissions to the network configurations of listed projects), then the reachability result returns a value of `UNKNOWN`."##),
"Details at http://byron.github.io/google-apis-rs/google_networkmanagement1_cli/projects_locations-global-connectivity-tests-rerun",
vec![
(Some(r##"name"##),
None,
Some(r##"Required. Connectivity Test resource name using the form:
`projects/{project_id}/locations/global/connectivityTests/{test_id}`"##),
Some(r##"Required. Connectivity Test resource name using the form: `projects/{project_id}/locations/global/connectivityTests/{test_id}`"##),
Some(true),
Some(false)),
@@ -1499,16 +1436,12 @@ fn main() {
Some(false)),
]),
("locations-global-connectivity-tests-set-iam-policy",
Some(r##"Sets the access control policy on the specified resource. Replaces any
existing policy.
Can return `NOT_FOUND`, `INVALID_ARGUMENT`, and `PERMISSION_DENIED` errors."##),
Some(r##"Sets the access control policy on the specified resource. Replaces any existing policy. Can return `NOT_FOUND`, `INVALID_ARGUMENT`, and `PERMISSION_DENIED` errors."##),
"Details at http://byron.github.io/google-apis-rs/google_networkmanagement1_cli/projects_locations-global-connectivity-tests-set-iam-policy",
vec![
(Some(r##"resource"##),
None,
Some(r##"REQUIRED: The resource for which the policy is being specified.
See the operation documentation for the appropriate value for this field."##),
Some(r##"REQUIRED: The resource for which the policy is being specified. See the operation documentation for the appropriate value for this field."##),
Some(true),
Some(false)),
@@ -1531,19 +1464,12 @@ fn main() {
Some(false)),
]),
("locations-global-connectivity-tests-test-iam-permissions",
Some(r##"Returns permissions that a caller has on the specified resource.
If the resource does not exist, this will return an empty set of
permissions, not a `NOT_FOUND` error.
Note: This operation is designed to be used for building permission-aware
UIs and command-line tools, not for authorization checking. This operation
may "fail open" without warning."##),
Some(r##"Returns permissions that a caller has on the specified resource. If the resource does not exist, this will return an empty set of permissions, not a `NOT_FOUND` error. Note: This operation is designed to be used for building permission-aware UIs and command-line tools, not for authorization checking. This operation may "fail open" without warning."##),
"Details at http://byron.github.io/google-apis-rs/google_networkmanagement1_cli/projects_locations-global-connectivity-tests-test-iam-permissions",
vec![
(Some(r##"resource"##),
None,
Some(r##"REQUIRED: The resource for which the policy detail is being requested.
See the operation documentation for the appropriate value for this field."##),
Some(r##"REQUIRED: The resource for which the policy detail is being requested. See the operation documentation for the appropriate value for this field."##),
Some(true),
Some(false)),
@@ -1566,16 +1492,7 @@ fn main() {
Some(false)),
]),
("locations-global-operations-cancel",
Some(r##"Starts asynchronous cancellation on a long-running operation. The server
makes a best effort to cancel the operation, but success is not
guaranteed. If the server doesn't support this method, it returns
`google.rpc.Code.UNIMPLEMENTED`. Clients can use
Operations.GetOperation or
other methods to check whether the cancellation succeeded or whether the
operation completed despite cancellation. On successful cancellation,
the operation is not deleted; instead, it becomes an operation with
an Operation.error value with a google.rpc.Status.code of 1,
corresponding to `Code.CANCELLED`."##),
Some(r##"Starts asynchronous cancellation on a long-running operation. The server makes a best effort to cancel the operation, but success is not guaranteed. If the server doesn't support this method, it returns `google.rpc.Code.UNIMPLEMENTED`. Clients can use Operations.GetOperation or other methods to check whether the cancellation succeeded or whether the operation completed despite cancellation. On successful cancellation, the operation is not deleted; instead, it becomes an operation with an Operation.error value with a google.rpc.Status.code of 1, corresponding to `Code.CANCELLED`."##),
"Details at http://byron.github.io/google-apis-rs/google_networkmanagement1_cli/projects_locations-global-operations-cancel",
vec![
(Some(r##"name"##),
@@ -1603,10 +1520,7 @@ fn main() {
Some(false)),
]),
("locations-global-operations-delete",
Some(r##"Deletes a long-running operation. This method indicates that the client is
no longer interested in the operation result. It does not cancel the
operation. If the server doesn't support this method, it returns
`google.rpc.Code.UNIMPLEMENTED`."##),
Some(r##"Deletes a long-running operation. This method indicates that the client is no longer interested in the operation result. It does not cancel the operation. If the server doesn't support this method, it returns `google.rpc.Code.UNIMPLEMENTED`."##),
"Details at http://byron.github.io/google-apis-rs/google_networkmanagement1_cli/projects_locations-global-operations-delete",
vec![
(Some(r##"name"##),
@@ -1628,9 +1542,7 @@ fn main() {
Some(false)),
]),
("locations-global-operations-get",
Some(r##"Gets the latest state of a long-running operation. Clients can use this
method to poll the operation result at intervals as recommended by the API
service."##),
Some(r##"Gets the latest state of a long-running operation. Clients can use this method to poll the operation result at intervals as recommended by the API service."##),
"Details at http://byron.github.io/google-apis-rs/google_networkmanagement1_cli/projects_locations-global-operations-get",
vec![
(Some(r##"name"##),
@@ -1652,16 +1564,7 @@ fn main() {
Some(false)),
]),
("locations-global-operations-list",
Some(r##"Lists operations that match the specified filter in the request. If the
server doesn't support this method, it returns `UNIMPLEMENTED`.
NOTE: the `name` binding allows API services to override the binding
to use different resource name schemes, such as `users/*/operations`. To
override the binding, API services can add a binding such as
`"/v1/{name=users/*}/operations"` to their service configuration.
For backwards compatibility, the default name includes the operations
collection id, however overriding users must ensure the name binding
is the parent resource, without the operations collection id."##),
Some(r##"Lists operations that match the specified filter in the request. If the server doesn't support this method, it returns `UNIMPLEMENTED`. NOTE: the `name` binding allows API services to override the binding to use different resource name schemes, such as `users/*/operations`. To override the binding, API services can add a binding such as `"/v1/{name=users/*}/operations"` to their service configuration. For backwards compatibility, the default name includes the operations collection id, however overriding users must ensure the name binding is the parent resource, without the operations collection id."##),
"Details at http://byron.github.io/google-apis-rs/google_networkmanagement1_cli/projects_locations-global-operations-list",
vec![
(Some(r##"name"##),
@@ -1710,7 +1613,7 @@ fn main() {
let mut app = App::new("networkmanagement1")
.author("Sebastian Thiel <byronimo@gmail.com>")
.version("1.0.14+20200520")
.version("2.0.0+20210325")
.about("The Network Management API provides a collection of network performance monitoring and diagnostic capabilities.")
.after_help("All documentation details can be found at http://byron.github.io/google-apis-rs/google_networkmanagement1_cli")
.arg(Arg::with_name("url")
@@ -1725,12 +1628,7 @@ fn main() {
.takes_value(true))
.arg(Arg::with_name("debug")
.long("debug")
.help("Output all server communication to standard error. `tx` and `rx` are placed into the same stream.")
.multiple(false)
.takes_value(false))
.arg(Arg::with_name("debug-auth")
.long("debug-auth")
.help("Output all communication related to authentication to standard error. `tx` and `rx` are placed into the same stream.")
.help("Debug print all errors")
.multiple(false)
.takes_value(false));
@@ -1778,13 +1676,13 @@ fn main() {
let matches = app.get_matches();
let debug = matches.is_present("debug");
match Engine::new(matches) {
match Engine::new(matches).await {
Err(err) => {
exit_status = err.exit_code;
writeln!(io::stderr(), "{}", err).ok();
},
Ok(engine) => {
if let Err(doit_err) = engine.doit() {
if let Err(doit_err) = engine.doit().await {
exit_status = 1;
match doit_err {
DoitError::IoError(path, err) => {
@@ -1803,4 +1701,4 @@ fn main() {
}
std::process::exit(exit_status);
}
}