Files
google-apis-rs/gen/firebasehosting1_beta1-cli/src/main.rs
2023-08-23 08:25:17 +02:00

5724 lines
318 KiB
Rust

// DO NOT EDIT !
// This file was generated automatically from 'src/generator/templates/cli/main.rs.mako'
// DO NOT EDIT !
#![allow(unused_variables, unused_imports, dead_code, unused_mut)]
#[macro_use]
extern crate clap;
use std::env;
use std::io::{self, Write};
use clap::{App, SubCommand, Arg};
use google_firebasehosting1_beta1::{api, Error, oauth2, client::chrono, FieldMask};
use google_clis_common as 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::error::Error as StdError;
use std::str::FromStr;
use serde_json as json;
use clap::ArgMatches;
use http::Uri;
use hyper::client::connect;
use tokio::io::{AsyncRead, AsyncWrite};
use tower_service;
enum DoitError {
IoError(String, io::Error),
ApiError(Error),
}
struct Engine<'n, S> {
opt: ArgMatches<'n>,
hub: api::FirebaseHosting<S>,
gp: Vec<&'static str>,
gpm: Vec<(&'static str, &'static str)>,
}
impl<'n, S> Engine<'n, S>
where
S: tower_service::Service<Uri> + Clone + Send + Sync + 'static,
S::Response: hyper::client::connect::Connection + AsyncRead + AsyncWrite + Send + Unpin + 'static,
S::Future: Send + Unpin + 'static,
S::Error: Into<Box<dyn StdError + Send + Sync>>,
{
async fn _projects_operations_get(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
-> Result<(), DoitError> {
let mut call = self.hub.projects().operations_get(opt.value_of("name").unwrap_or(""));
for parg in opt.values_of("v").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let (key, value) = parse_kv_arg(&*parg, err, false);
match key {
_ => {
let mut found = false;
for param in &self.gp {
if key == *param {
found = true;
call = call.param(self.gpm.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset"));
break;
}
}
if !found {
err.issues.push(CLIError::UnknownParameter(key.to_string(),
{let mut v = Vec::new();
v.extend(self.gp.iter().map(|v|*v));
v } ));
}
}
}
}
let protocol = CallType::Standard;
if dry_run {
Ok(())
} else {
assert!(err.issues.len() == 0);
for scope in self.opt.values_of("url").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
call = call.add_scope(scope);
}
let mut ostream = match writer_from_opts(opt.value_of("out")) {
Ok(mut f) => f,
Err(io_err) => return Err(DoitError::IoError(opt.value_of("out").unwrap_or("-").to_string(), io_err)),
};
match match protocol {
CallType::Standard => call.doit().await,
_ => unreachable!()
} {
Err(api_err) => Err(DoitError::ApiError(api_err)),
Ok((mut response, output_schema)) => {
let mut value = json::value::to_value(&output_schema).expect("serde to work");
remove_json_null_values(&mut value);
json::to_writer_pretty(&mut ostream, &value).unwrap();
ostream.flush().unwrap();
Ok(())
}
}
}
}
async fn _projects_sites_channels_create(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
-> Result<(), DoitError> {
let mut field_cursor = FieldCursor::default();
let mut object = json::value::Value::Object(Default::default());
for kvarg in opt.values_of("kv").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let last_errc = err.issues.len();
let (key, value) = parse_kv_arg(&*kvarg, err, false);
let mut temp_cursor = field_cursor.clone();
if let Err(field_err) = temp_cursor.set(&*key) {
err.issues.push(field_err);
}
if value.is_none() {
field_cursor = temp_cursor.clone();
if err.issues.len() > last_errc {
err.issues.remove(last_errc);
}
continue;
}
let type_info: Option<(&'static str, JsonTypeInfo)> =
match &temp_cursor.to_string()[..] {
"create-time" => Some(("createTime", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"expire-time" => Some(("expireTime", 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 })),
"release.message" => Some(("release.message", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.name" => Some(("release.name", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.release-time" => Some(("release.releaseTime", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.release-user.email" => Some(("release.releaseUser.email", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.release-user.image-url" => Some(("release.releaseUser.imageUrl", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.type" => Some(("release.type", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.version.config.app-association" => Some(("release.version.config.appAssociation", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.version.config.clean-urls" => Some(("release.version.config.cleanUrls", JsonTypeInfo { jtype: JsonType::Boolean, ctype: ComplexType::Pod })),
"release.version.config.i18n.root" => Some(("release.version.config.i18n.root", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.version.config.trailing-slash-behavior" => Some(("release.version.config.trailingSlashBehavior", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.version.create-time" => Some(("release.version.createTime", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.version.create-user.email" => Some(("release.version.createUser.email", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.version.create-user.image-url" => Some(("release.version.createUser.imageUrl", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.version.delete-time" => Some(("release.version.deleteTime", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.version.delete-user.email" => Some(("release.version.deleteUser.email", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.version.delete-user.image-url" => Some(("release.version.deleteUser.imageUrl", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.version.file-count" => Some(("release.version.fileCount", JsonTypeInfo { jtype: JsonType::Int, ctype: ComplexType::Pod })),
"release.version.finalize-time" => Some(("release.version.finalizeTime", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.version.finalize-user.email" => Some(("release.version.finalizeUser.email", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.version.finalize-user.image-url" => Some(("release.version.finalizeUser.imageUrl", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.version.labels" => Some(("release.version.labels", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Map })),
"release.version.name" => Some(("release.version.name", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.version.status" => Some(("release.version.status", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.version.version-bytes" => Some(("release.version.versionBytes", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"retained-release-count" => Some(("retainedReleaseCount", JsonTypeInfo { jtype: JsonType::Int, ctype: ComplexType::Pod })),
"ttl" => Some(("ttl", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"update-time" => Some(("updateTime", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"url" => Some(("url", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
_ => {
let suggestion = FieldCursor::did_you_mean(key, &vec!["app-association", "clean-urls", "config", "create-time", "create-user", "delete-time", "delete-user", "email", "expire-time", "file-count", "finalize-time", "finalize-user", "i18n", "image-url", "labels", "message", "name", "release", "release-time", "release-user", "retained-release-count", "root", "status", "trailing-slash-behavior", "ttl", "type", "update-time", "url", "version", "version-bytes"]);
err.issues.push(CLIError::Field(FieldError::Unknown(temp_cursor.to_string(), suggestion, value.map(|v| v.to_string()))));
None
}
};
if let Some((field_cursor_str, type_info)) = type_info {
FieldCursor::from(field_cursor_str).set_json_value(&mut object, value.unwrap(), type_info, err, &temp_cursor);
}
}
let mut request: api::Channel = json::value::from_value(object).unwrap();
let mut call = self.hub.projects().sites_channels_create(request, opt.value_of("parent").unwrap_or(""));
for parg in opt.values_of("v").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let (key, value) = parse_kv_arg(&*parg, err, false);
match key {
"channel-id" => {
call = call.channel_id(value.unwrap_or(""));
},
_ => {
let mut found = false;
for param in &self.gp {
if key == *param {
found = true;
call = call.param(self.gpm.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset"));
break;
}
}
if !found {
err.issues.push(CLIError::UnknownParameter(key.to_string(),
{let mut v = Vec::new();
v.extend(self.gp.iter().map(|v|*v));
v.extend(["channel-id"].iter().map(|v|*v));
v } ));
}
}
}
}
let protocol = CallType::Standard;
if dry_run {
Ok(())
} else {
assert!(err.issues.len() == 0);
for scope in self.opt.values_of("url").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
call = call.add_scope(scope);
}
let mut ostream = match writer_from_opts(opt.value_of("out")) {
Ok(mut f) => f,
Err(io_err) => return Err(DoitError::IoError(opt.value_of("out").unwrap_or("-").to_string(), io_err)),
};
match match protocol {
CallType::Standard => call.doit().await,
_ => unreachable!()
} {
Err(api_err) => Err(DoitError::ApiError(api_err)),
Ok((mut response, output_schema)) => {
let mut value = json::value::to_value(&output_schema).expect("serde to work");
remove_json_null_values(&mut value);
json::to_writer_pretty(&mut ostream, &value).unwrap();
ostream.flush().unwrap();
Ok(())
}
}
}
}
async fn _projects_sites_channels_delete(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
-> Result<(), DoitError> {
let mut call = self.hub.projects().sites_channels_delete(opt.value_of("name").unwrap_or(""));
for parg in opt.values_of("v").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let (key, value) = parse_kv_arg(&*parg, err, false);
match key {
_ => {
let mut found = false;
for param in &self.gp {
if key == *param {
found = true;
call = call.param(self.gpm.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset"));
break;
}
}
if !found {
err.issues.push(CLIError::UnknownParameter(key.to_string(),
{let mut v = Vec::new();
v.extend(self.gp.iter().map(|v|*v));
v } ));
}
}
}
}
let protocol = CallType::Standard;
if dry_run {
Ok(())
} else {
assert!(err.issues.len() == 0);
for scope in self.opt.values_of("url").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
call = call.add_scope(scope);
}
let mut ostream = match writer_from_opts(opt.value_of("out")) {
Ok(mut f) => f,
Err(io_err) => return Err(DoitError::IoError(opt.value_of("out").unwrap_or("-").to_string(), io_err)),
};
match match protocol {
CallType::Standard => call.doit().await,
_ => unreachable!()
} {
Err(api_err) => Err(DoitError::ApiError(api_err)),
Ok((mut response, output_schema)) => {
let mut value = json::value::to_value(&output_schema).expect("serde to work");
remove_json_null_values(&mut value);
json::to_writer_pretty(&mut ostream, &value).unwrap();
ostream.flush().unwrap();
Ok(())
}
}
}
}
async fn _projects_sites_channels_get(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
-> Result<(), DoitError> {
let mut call = self.hub.projects().sites_channels_get(opt.value_of("name").unwrap_or(""));
for parg in opt.values_of("v").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let (key, value) = parse_kv_arg(&*parg, err, false);
match key {
_ => {
let mut found = false;
for param in &self.gp {
if key == *param {
found = true;
call = call.param(self.gpm.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset"));
break;
}
}
if !found {
err.issues.push(CLIError::UnknownParameter(key.to_string(),
{let mut v = Vec::new();
v.extend(self.gp.iter().map(|v|*v));
v } ));
}
}
}
}
let protocol = CallType::Standard;
if dry_run {
Ok(())
} else {
assert!(err.issues.len() == 0);
for scope in self.opt.values_of("url").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
call = call.add_scope(scope);
}
let mut ostream = match writer_from_opts(opt.value_of("out")) {
Ok(mut f) => f,
Err(io_err) => return Err(DoitError::IoError(opt.value_of("out").unwrap_or("-").to_string(), io_err)),
};
match match protocol {
CallType::Standard => call.doit().await,
_ => unreachable!()
} {
Err(api_err) => Err(DoitError::ApiError(api_err)),
Ok((mut response, output_schema)) => {
let mut value = json::value::to_value(&output_schema).expect("serde to work");
remove_json_null_values(&mut value);
json::to_writer_pretty(&mut ostream, &value).unwrap();
ostream.flush().unwrap();
Ok(())
}
}
}
}
async fn _projects_sites_channels_list(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
-> Result<(), DoitError> {
let mut call = self.hub.projects().sites_channels_list(opt.value_of("parent").unwrap_or(""));
for parg in opt.values_of("v").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let (key, value) = parse_kv_arg(&*parg, err, false);
match key {
"page-token" => {
call = call.page_token(value.unwrap_or(""));
},
"page-size" => {
call = call.page_size( value.map(|v| arg_from_str(v, err, "page-size", "int32")).unwrap_or(-0));
},
_ => {
let mut found = false;
for param in &self.gp {
if key == *param {
found = true;
call = call.param(self.gpm.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset"));
break;
}
}
if !found {
err.issues.push(CLIError::UnknownParameter(key.to_string(),
{let mut v = Vec::new();
v.extend(self.gp.iter().map(|v|*v));
v.extend(["page-size", "page-token"].iter().map(|v|*v));
v } ));
}
}
}
}
let protocol = CallType::Standard;
if dry_run {
Ok(())
} else {
assert!(err.issues.len() == 0);
for scope in self.opt.values_of("url").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
call = call.add_scope(scope);
}
let mut ostream = match writer_from_opts(opt.value_of("out")) {
Ok(mut f) => f,
Err(io_err) => return Err(DoitError::IoError(opt.value_of("out").unwrap_or("-").to_string(), io_err)),
};
match match protocol {
CallType::Standard => call.doit().await,
_ => unreachable!()
} {
Err(api_err) => Err(DoitError::ApiError(api_err)),
Ok((mut response, output_schema)) => {
let mut value = json::value::to_value(&output_schema).expect("serde to work");
remove_json_null_values(&mut value);
json::to_writer_pretty(&mut ostream, &value).unwrap();
ostream.flush().unwrap();
Ok(())
}
}
}
}
async fn _projects_sites_channels_patch(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
-> Result<(), DoitError> {
let mut field_cursor = FieldCursor::default();
let mut object = json::value::Value::Object(Default::default());
for kvarg in opt.values_of("kv").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let last_errc = err.issues.len();
let (key, value) = parse_kv_arg(&*kvarg, err, false);
let mut temp_cursor = field_cursor.clone();
if let Err(field_err) = temp_cursor.set(&*key) {
err.issues.push(field_err);
}
if value.is_none() {
field_cursor = temp_cursor.clone();
if err.issues.len() > last_errc {
err.issues.remove(last_errc);
}
continue;
}
let type_info: Option<(&'static str, JsonTypeInfo)> =
match &temp_cursor.to_string()[..] {
"create-time" => Some(("createTime", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"expire-time" => Some(("expireTime", 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 })),
"release.message" => Some(("release.message", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.name" => Some(("release.name", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.release-time" => Some(("release.releaseTime", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.release-user.email" => Some(("release.releaseUser.email", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.release-user.image-url" => Some(("release.releaseUser.imageUrl", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.type" => Some(("release.type", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.version.config.app-association" => Some(("release.version.config.appAssociation", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.version.config.clean-urls" => Some(("release.version.config.cleanUrls", JsonTypeInfo { jtype: JsonType::Boolean, ctype: ComplexType::Pod })),
"release.version.config.i18n.root" => Some(("release.version.config.i18n.root", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.version.config.trailing-slash-behavior" => Some(("release.version.config.trailingSlashBehavior", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.version.create-time" => Some(("release.version.createTime", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.version.create-user.email" => Some(("release.version.createUser.email", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.version.create-user.image-url" => Some(("release.version.createUser.imageUrl", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.version.delete-time" => Some(("release.version.deleteTime", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.version.delete-user.email" => Some(("release.version.deleteUser.email", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.version.delete-user.image-url" => Some(("release.version.deleteUser.imageUrl", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.version.file-count" => Some(("release.version.fileCount", JsonTypeInfo { jtype: JsonType::Int, ctype: ComplexType::Pod })),
"release.version.finalize-time" => Some(("release.version.finalizeTime", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.version.finalize-user.email" => Some(("release.version.finalizeUser.email", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.version.finalize-user.image-url" => Some(("release.version.finalizeUser.imageUrl", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.version.labels" => Some(("release.version.labels", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Map })),
"release.version.name" => Some(("release.version.name", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.version.status" => Some(("release.version.status", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.version.version-bytes" => Some(("release.version.versionBytes", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"retained-release-count" => Some(("retainedReleaseCount", JsonTypeInfo { jtype: JsonType::Int, ctype: ComplexType::Pod })),
"ttl" => Some(("ttl", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"update-time" => Some(("updateTime", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"url" => Some(("url", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
_ => {
let suggestion = FieldCursor::did_you_mean(key, &vec!["app-association", "clean-urls", "config", "create-time", "create-user", "delete-time", "delete-user", "email", "expire-time", "file-count", "finalize-time", "finalize-user", "i18n", "image-url", "labels", "message", "name", "release", "release-time", "release-user", "retained-release-count", "root", "status", "trailing-slash-behavior", "ttl", "type", "update-time", "url", "version", "version-bytes"]);
err.issues.push(CLIError::Field(FieldError::Unknown(temp_cursor.to_string(), suggestion, value.map(|v| v.to_string()))));
None
}
};
if let Some((field_cursor_str, type_info)) = type_info {
FieldCursor::from(field_cursor_str).set_json_value(&mut object, value.unwrap(), type_info, err, &temp_cursor);
}
}
let mut request: api::Channel = json::value::from_value(object).unwrap();
let mut call = self.hub.projects().sites_channels_patch(request, opt.value_of("name").unwrap_or(""));
for parg in opt.values_of("v").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let (key, value) = parse_kv_arg(&*parg, err, false);
match key {
"update-mask" => {
call = call.update_mask( value.map(|v| arg_from_str(v, err, "update-mask", "google-fieldmask")).unwrap_or(FieldMask::default()));
},
_ => {
let mut found = false;
for param in &self.gp {
if key == *param {
found = true;
call = call.param(self.gpm.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset"));
break;
}
}
if !found {
err.issues.push(CLIError::UnknownParameter(key.to_string(),
{let mut v = Vec::new();
v.extend(self.gp.iter().map(|v|*v));
v.extend(["update-mask"].iter().map(|v|*v));
v } ));
}
}
}
}
let protocol = CallType::Standard;
if dry_run {
Ok(())
} else {
assert!(err.issues.len() == 0);
for scope in self.opt.values_of("url").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
call = call.add_scope(scope);
}
let mut ostream = match writer_from_opts(opt.value_of("out")) {
Ok(mut f) => f,
Err(io_err) => return Err(DoitError::IoError(opt.value_of("out").unwrap_or("-").to_string(), io_err)),
};
match match protocol {
CallType::Standard => call.doit().await,
_ => unreachable!()
} {
Err(api_err) => Err(DoitError::ApiError(api_err)),
Ok((mut response, output_schema)) => {
let mut value = json::value::to_value(&output_schema).expect("serde to work");
remove_json_null_values(&mut value);
json::to_writer_pretty(&mut ostream, &value).unwrap();
ostream.flush().unwrap();
Ok(())
}
}
}
}
async fn _projects_sites_channels_releases_create(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
-> Result<(), DoitError> {
let mut field_cursor = FieldCursor::default();
let mut object = json::value::Value::Object(Default::default());
for kvarg in opt.values_of("kv").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let last_errc = err.issues.len();
let (key, value) = parse_kv_arg(&*kvarg, err, false);
let mut temp_cursor = field_cursor.clone();
if let Err(field_err) = temp_cursor.set(&*key) {
err.issues.push(field_err);
}
if value.is_none() {
field_cursor = temp_cursor.clone();
if err.issues.len() > last_errc {
err.issues.remove(last_errc);
}
continue;
}
let type_info: Option<(&'static str, JsonTypeInfo)> =
match &temp_cursor.to_string()[..] {
"message" => Some(("message", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"name" => Some(("name", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release-time" => Some(("releaseTime", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release-user.email" => Some(("releaseUser.email", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release-user.image-url" => Some(("releaseUser.imageUrl", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"type" => Some(("type", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"version.config.app-association" => Some(("version.config.appAssociation", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"version.config.clean-urls" => Some(("version.config.cleanUrls", JsonTypeInfo { jtype: JsonType::Boolean, ctype: ComplexType::Pod })),
"version.config.i18n.root" => Some(("version.config.i18n.root", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"version.config.trailing-slash-behavior" => Some(("version.config.trailingSlashBehavior", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"version.create-time" => Some(("version.createTime", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"version.create-user.email" => Some(("version.createUser.email", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"version.create-user.image-url" => Some(("version.createUser.imageUrl", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"version.delete-time" => Some(("version.deleteTime", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"version.delete-user.email" => Some(("version.deleteUser.email", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"version.delete-user.image-url" => Some(("version.deleteUser.imageUrl", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"version.file-count" => Some(("version.fileCount", JsonTypeInfo { jtype: JsonType::Int, ctype: ComplexType::Pod })),
"version.finalize-time" => Some(("version.finalizeTime", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"version.finalize-user.email" => Some(("version.finalizeUser.email", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"version.finalize-user.image-url" => Some(("version.finalizeUser.imageUrl", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"version.labels" => Some(("version.labels", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Map })),
"version.name" => Some(("version.name", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"version.status" => Some(("version.status", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"version.version-bytes" => Some(("version.versionBytes", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
_ => {
let suggestion = FieldCursor::did_you_mean(key, &vec!["app-association", "clean-urls", "config", "create-time", "create-user", "delete-time", "delete-user", "email", "file-count", "finalize-time", "finalize-user", "i18n", "image-url", "labels", "message", "name", "release-time", "release-user", "root", "status", "trailing-slash-behavior", "type", "version", "version-bytes"]);
err.issues.push(CLIError::Field(FieldError::Unknown(temp_cursor.to_string(), suggestion, value.map(|v| v.to_string()))));
None
}
};
if let Some((field_cursor_str, type_info)) = type_info {
FieldCursor::from(field_cursor_str).set_json_value(&mut object, value.unwrap(), type_info, err, &temp_cursor);
}
}
let mut request: api::Release = json::value::from_value(object).unwrap();
let mut call = self.hub.projects().sites_channels_releases_create(request, opt.value_of("parent").unwrap_or(""));
for parg in opt.values_of("v").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let (key, value) = parse_kv_arg(&*parg, err, false);
match key {
"version-name" => {
call = call.version_name(value.unwrap_or(""));
},
_ => {
let mut found = false;
for param in &self.gp {
if key == *param {
found = true;
call = call.param(self.gpm.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset"));
break;
}
}
if !found {
err.issues.push(CLIError::UnknownParameter(key.to_string(),
{let mut v = Vec::new();
v.extend(self.gp.iter().map(|v|*v));
v.extend(["version-name"].iter().map(|v|*v));
v } ));
}
}
}
}
let protocol = CallType::Standard;
if dry_run {
Ok(())
} else {
assert!(err.issues.len() == 0);
for scope in self.opt.values_of("url").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
call = call.add_scope(scope);
}
let mut ostream = match writer_from_opts(opt.value_of("out")) {
Ok(mut f) => f,
Err(io_err) => return Err(DoitError::IoError(opt.value_of("out").unwrap_or("-").to_string(), io_err)),
};
match match protocol {
CallType::Standard => call.doit().await,
_ => unreachable!()
} {
Err(api_err) => Err(DoitError::ApiError(api_err)),
Ok((mut response, output_schema)) => {
let mut value = json::value::to_value(&output_schema).expect("serde to work");
remove_json_null_values(&mut value);
json::to_writer_pretty(&mut ostream, &value).unwrap();
ostream.flush().unwrap();
Ok(())
}
}
}
}
async fn _projects_sites_channels_releases_list(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
-> Result<(), DoitError> {
let mut call = self.hub.projects().sites_channels_releases_list(opt.value_of("parent").unwrap_or(""));
for parg in opt.values_of("v").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let (key, value) = parse_kv_arg(&*parg, err, false);
match key {
"page-token" => {
call = call.page_token(value.unwrap_or(""));
},
"page-size" => {
call = call.page_size( value.map(|v| arg_from_str(v, err, "page-size", "int32")).unwrap_or(-0));
},
_ => {
let mut found = false;
for param in &self.gp {
if key == *param {
found = true;
call = call.param(self.gpm.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset"));
break;
}
}
if !found {
err.issues.push(CLIError::UnknownParameter(key.to_string(),
{let mut v = Vec::new();
v.extend(self.gp.iter().map(|v|*v));
v.extend(["page-size", "page-token"].iter().map(|v|*v));
v } ));
}
}
}
}
let protocol = CallType::Standard;
if dry_run {
Ok(())
} else {
assert!(err.issues.len() == 0);
for scope in self.opt.values_of("url").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
call = call.add_scope(scope);
}
let mut ostream = match writer_from_opts(opt.value_of("out")) {
Ok(mut f) => f,
Err(io_err) => return Err(DoitError::IoError(opt.value_of("out").unwrap_or("-").to_string(), io_err)),
};
match match protocol {
CallType::Standard => call.doit().await,
_ => unreachable!()
} {
Err(api_err) => Err(DoitError::ApiError(api_err)),
Ok((mut response, output_schema)) => {
let mut value = json::value::to_value(&output_schema).expect("serde to work");
remove_json_null_values(&mut value);
json::to_writer_pretty(&mut ostream, &value).unwrap();
ostream.flush().unwrap();
Ok(())
}
}
}
}
async fn _projects_sites_create(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
-> Result<(), DoitError> {
let mut field_cursor = FieldCursor::default();
let mut object = json::value::Value::Object(Default::default());
for kvarg in opt.values_of("kv").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let last_errc = err.issues.len();
let (key, value) = parse_kv_arg(&*kvarg, err, false);
let mut temp_cursor = field_cursor.clone();
if let Err(field_err) = temp_cursor.set(&*key) {
err.issues.push(field_err);
}
if value.is_none() {
field_cursor = temp_cursor.clone();
if err.issues.len() > last_errc {
err.issues.remove(last_errc);
}
continue;
}
let type_info: Option<(&'static str, JsonTypeInfo)> =
match &temp_cursor.to_string()[..] {
"app-id" => Some(("appId", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"default-url" => Some(("defaultUrl", 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 })),
"type" => Some(("type", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
_ => {
let suggestion = FieldCursor::did_you_mean(key, &vec!["app-id", "default-url", "labels", "name", "type"]);
err.issues.push(CLIError::Field(FieldError::Unknown(temp_cursor.to_string(), suggestion, value.map(|v| v.to_string()))));
None
}
};
if let Some((field_cursor_str, type_info)) = type_info {
FieldCursor::from(field_cursor_str).set_json_value(&mut object, value.unwrap(), type_info, err, &temp_cursor);
}
}
let mut request: api::Site = json::value::from_value(object).unwrap();
let mut call = self.hub.projects().sites_create(request, opt.value_of("parent").unwrap_or(""));
for parg in opt.values_of("v").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let (key, value) = parse_kv_arg(&*parg, err, false);
match key {
"site-id" => {
call = call.site_id(value.unwrap_or(""));
},
_ => {
let mut found = false;
for param in &self.gp {
if key == *param {
found = true;
call = call.param(self.gpm.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset"));
break;
}
}
if !found {
err.issues.push(CLIError::UnknownParameter(key.to_string(),
{let mut v = Vec::new();
v.extend(self.gp.iter().map(|v|*v));
v.extend(["site-id"].iter().map(|v|*v));
v } ));
}
}
}
}
let protocol = CallType::Standard;
if dry_run {
Ok(())
} else {
assert!(err.issues.len() == 0);
for scope in self.opt.values_of("url").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
call = call.add_scope(scope);
}
let mut ostream = match writer_from_opts(opt.value_of("out")) {
Ok(mut f) => f,
Err(io_err) => return Err(DoitError::IoError(opt.value_of("out").unwrap_or("-").to_string(), io_err)),
};
match match protocol {
CallType::Standard => call.doit().await,
_ => unreachable!()
} {
Err(api_err) => Err(DoitError::ApiError(api_err)),
Ok((mut response, output_schema)) => {
let mut value = json::value::to_value(&output_schema).expect("serde to work");
remove_json_null_values(&mut value);
json::to_writer_pretty(&mut ostream, &value).unwrap();
ostream.flush().unwrap();
Ok(())
}
}
}
}
async fn _projects_sites_delete(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
-> Result<(), DoitError> {
let mut call = self.hub.projects().sites_delete(opt.value_of("name").unwrap_or(""));
for parg in opt.values_of("v").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let (key, value) = parse_kv_arg(&*parg, err, false);
match key {
_ => {
let mut found = false;
for param in &self.gp {
if key == *param {
found = true;
call = call.param(self.gpm.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset"));
break;
}
}
if !found {
err.issues.push(CLIError::UnknownParameter(key.to_string(),
{let mut v = Vec::new();
v.extend(self.gp.iter().map(|v|*v));
v } ));
}
}
}
}
let protocol = CallType::Standard;
if dry_run {
Ok(())
} else {
assert!(err.issues.len() == 0);
for scope in self.opt.values_of("url").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
call = call.add_scope(scope);
}
let mut ostream = match writer_from_opts(opt.value_of("out")) {
Ok(mut f) => f,
Err(io_err) => return Err(DoitError::IoError(opt.value_of("out").unwrap_or("-").to_string(), io_err)),
};
match match protocol {
CallType::Standard => call.doit().await,
_ => unreachable!()
} {
Err(api_err) => Err(DoitError::ApiError(api_err)),
Ok((mut response, output_schema)) => {
let mut value = json::value::to_value(&output_schema).expect("serde to work");
remove_json_null_values(&mut value);
json::to_writer_pretty(&mut ostream, &value).unwrap();
ostream.flush().unwrap();
Ok(())
}
}
}
}
async fn _projects_sites_domains_create(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
-> Result<(), DoitError> {
let mut field_cursor = FieldCursor::default();
let mut object = json::value::Value::Object(Default::default());
for kvarg in opt.values_of("kv").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let last_errc = err.issues.len();
let (key, value) = parse_kv_arg(&*kvarg, err, false);
let mut temp_cursor = field_cursor.clone();
if let Err(field_err) = temp_cursor.set(&*key) {
err.issues.push(field_err);
}
if value.is_none() {
field_cursor = temp_cursor.clone();
if err.issues.len() > last_errc {
err.issues.remove(last_errc);
}
continue;
}
let type_info: Option<(&'static str, JsonTypeInfo)> =
match &temp_cursor.to_string()[..] {
"domain-name" => Some(("domainName", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"domain-redirect.domain-name" => Some(("domainRedirect.domainName", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"domain-redirect.type" => Some(("domainRedirect.type", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"provisioning.cert-challenge-discovered-txt" => Some(("provisioning.certChallengeDiscoveredTxt", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Vec })),
"provisioning.cert-challenge-dns.domain-name" => Some(("provisioning.certChallengeDns.domainName", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"provisioning.cert-challenge-dns.token" => Some(("provisioning.certChallengeDns.token", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"provisioning.cert-challenge-http.path" => Some(("provisioning.certChallengeHttp.path", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"provisioning.cert-challenge-http.token" => Some(("provisioning.certChallengeHttp.token", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"provisioning.cert-status" => Some(("provisioning.certStatus", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"provisioning.discovered-ips" => Some(("provisioning.discoveredIps", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Vec })),
"provisioning.dns-fetch-time" => Some(("provisioning.dnsFetchTime", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"provisioning.dns-status" => Some(("provisioning.dnsStatus", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"provisioning.expected-ips" => Some(("provisioning.expectedIps", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Vec })),
"site" => Some(("site", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"status" => Some(("status", 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!["cert-challenge-discovered-txt", "cert-challenge-dns", "cert-challenge-http", "cert-status", "discovered-ips", "dns-fetch-time", "dns-status", "domain-name", "domain-redirect", "expected-ips", "path", "provisioning", "site", "status", "token", "type", "update-time"]);
err.issues.push(CLIError::Field(FieldError::Unknown(temp_cursor.to_string(), suggestion, value.map(|v| v.to_string()))));
None
}
};
if let Some((field_cursor_str, type_info)) = type_info {
FieldCursor::from(field_cursor_str).set_json_value(&mut object, value.unwrap(), type_info, err, &temp_cursor);
}
}
let mut request: api::Domain = json::value::from_value(object).unwrap();
let mut call = self.hub.projects().sites_domains_create(request, opt.value_of("parent").unwrap_or(""));
for parg in opt.values_of("v").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let (key, value) = parse_kv_arg(&*parg, err, false);
match key {
_ => {
let mut found = false;
for param in &self.gp {
if key == *param {
found = true;
call = call.param(self.gpm.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset"));
break;
}
}
if !found {
err.issues.push(CLIError::UnknownParameter(key.to_string(),
{let mut v = Vec::new();
v.extend(self.gp.iter().map(|v|*v));
v } ));
}
}
}
}
let protocol = CallType::Standard;
if dry_run {
Ok(())
} else {
assert!(err.issues.len() == 0);
for scope in self.opt.values_of("url").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
call = call.add_scope(scope);
}
let mut ostream = match writer_from_opts(opt.value_of("out")) {
Ok(mut f) => f,
Err(io_err) => return Err(DoitError::IoError(opt.value_of("out").unwrap_or("-").to_string(), io_err)),
};
match match protocol {
CallType::Standard => call.doit().await,
_ => unreachable!()
} {
Err(api_err) => Err(DoitError::ApiError(api_err)),
Ok((mut response, output_schema)) => {
let mut value = json::value::to_value(&output_schema).expect("serde to work");
remove_json_null_values(&mut value);
json::to_writer_pretty(&mut ostream, &value).unwrap();
ostream.flush().unwrap();
Ok(())
}
}
}
}
async fn _projects_sites_domains_delete(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
-> Result<(), DoitError> {
let mut call = self.hub.projects().sites_domains_delete(opt.value_of("name").unwrap_or(""));
for parg in opt.values_of("v").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let (key, value) = parse_kv_arg(&*parg, err, false);
match key {
_ => {
let mut found = false;
for param in &self.gp {
if key == *param {
found = true;
call = call.param(self.gpm.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset"));
break;
}
}
if !found {
err.issues.push(CLIError::UnknownParameter(key.to_string(),
{let mut v = Vec::new();
v.extend(self.gp.iter().map(|v|*v));
v } ));
}
}
}
}
let protocol = CallType::Standard;
if dry_run {
Ok(())
} else {
assert!(err.issues.len() == 0);
for scope in self.opt.values_of("url").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
call = call.add_scope(scope);
}
let mut ostream = match writer_from_opts(opt.value_of("out")) {
Ok(mut f) => f,
Err(io_err) => return Err(DoitError::IoError(opt.value_of("out").unwrap_or("-").to_string(), io_err)),
};
match match protocol {
CallType::Standard => call.doit().await,
_ => unreachable!()
} {
Err(api_err) => Err(DoitError::ApiError(api_err)),
Ok((mut response, output_schema)) => {
let mut value = json::value::to_value(&output_schema).expect("serde to work");
remove_json_null_values(&mut value);
json::to_writer_pretty(&mut ostream, &value).unwrap();
ostream.flush().unwrap();
Ok(())
}
}
}
}
async fn _projects_sites_domains_get(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
-> Result<(), DoitError> {
let mut call = self.hub.projects().sites_domains_get(opt.value_of("name").unwrap_or(""));
for parg in opt.values_of("v").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let (key, value) = parse_kv_arg(&*parg, err, false);
match key {
_ => {
let mut found = false;
for param in &self.gp {
if key == *param {
found = true;
call = call.param(self.gpm.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset"));
break;
}
}
if !found {
err.issues.push(CLIError::UnknownParameter(key.to_string(),
{let mut v = Vec::new();
v.extend(self.gp.iter().map(|v|*v));
v } ));
}
}
}
}
let protocol = CallType::Standard;
if dry_run {
Ok(())
} else {
assert!(err.issues.len() == 0);
for scope in self.opt.values_of("url").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
call = call.add_scope(scope);
}
let mut ostream = match writer_from_opts(opt.value_of("out")) {
Ok(mut f) => f,
Err(io_err) => return Err(DoitError::IoError(opt.value_of("out").unwrap_or("-").to_string(), io_err)),
};
match match protocol {
CallType::Standard => call.doit().await,
_ => unreachable!()
} {
Err(api_err) => Err(DoitError::ApiError(api_err)),
Ok((mut response, output_schema)) => {
let mut value = json::value::to_value(&output_schema).expect("serde to work");
remove_json_null_values(&mut value);
json::to_writer_pretty(&mut ostream, &value).unwrap();
ostream.flush().unwrap();
Ok(())
}
}
}
}
async fn _projects_sites_domains_list(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
-> Result<(), DoitError> {
let mut call = self.hub.projects().sites_domains_list(opt.value_of("parent").unwrap_or(""));
for parg in opt.values_of("v").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let (key, value) = parse_kv_arg(&*parg, err, false);
match key {
"page-token" => {
call = call.page_token(value.unwrap_or(""));
},
"page-size" => {
call = call.page_size( value.map(|v| arg_from_str(v, err, "page-size", "int32")).unwrap_or(-0));
},
_ => {
let mut found = false;
for param in &self.gp {
if key == *param {
found = true;
call = call.param(self.gpm.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset"));
break;
}
}
if !found {
err.issues.push(CLIError::UnknownParameter(key.to_string(),
{let mut v = Vec::new();
v.extend(self.gp.iter().map(|v|*v));
v.extend(["page-size", "page-token"].iter().map(|v|*v));
v } ));
}
}
}
}
let protocol = CallType::Standard;
if dry_run {
Ok(())
} else {
assert!(err.issues.len() == 0);
for scope in self.opt.values_of("url").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
call = call.add_scope(scope);
}
let mut ostream = match writer_from_opts(opt.value_of("out")) {
Ok(mut f) => f,
Err(io_err) => return Err(DoitError::IoError(opt.value_of("out").unwrap_or("-").to_string(), io_err)),
};
match match protocol {
CallType::Standard => call.doit().await,
_ => unreachable!()
} {
Err(api_err) => Err(DoitError::ApiError(api_err)),
Ok((mut response, output_schema)) => {
let mut value = json::value::to_value(&output_schema).expect("serde to work");
remove_json_null_values(&mut value);
json::to_writer_pretty(&mut ostream, &value).unwrap();
ostream.flush().unwrap();
Ok(())
}
}
}
}
async fn _projects_sites_domains_update(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
-> Result<(), DoitError> {
let mut field_cursor = FieldCursor::default();
let mut object = json::value::Value::Object(Default::default());
for kvarg in opt.values_of("kv").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let last_errc = err.issues.len();
let (key, value) = parse_kv_arg(&*kvarg, err, false);
let mut temp_cursor = field_cursor.clone();
if let Err(field_err) = temp_cursor.set(&*key) {
err.issues.push(field_err);
}
if value.is_none() {
field_cursor = temp_cursor.clone();
if err.issues.len() > last_errc {
err.issues.remove(last_errc);
}
continue;
}
let type_info: Option<(&'static str, JsonTypeInfo)> =
match &temp_cursor.to_string()[..] {
"domain-name" => Some(("domainName", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"domain-redirect.domain-name" => Some(("domainRedirect.domainName", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"domain-redirect.type" => Some(("domainRedirect.type", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"provisioning.cert-challenge-discovered-txt" => Some(("provisioning.certChallengeDiscoveredTxt", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Vec })),
"provisioning.cert-challenge-dns.domain-name" => Some(("provisioning.certChallengeDns.domainName", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"provisioning.cert-challenge-dns.token" => Some(("provisioning.certChallengeDns.token", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"provisioning.cert-challenge-http.path" => Some(("provisioning.certChallengeHttp.path", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"provisioning.cert-challenge-http.token" => Some(("provisioning.certChallengeHttp.token", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"provisioning.cert-status" => Some(("provisioning.certStatus", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"provisioning.discovered-ips" => Some(("provisioning.discoveredIps", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Vec })),
"provisioning.dns-fetch-time" => Some(("provisioning.dnsFetchTime", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"provisioning.dns-status" => Some(("provisioning.dnsStatus", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"provisioning.expected-ips" => Some(("provisioning.expectedIps", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Vec })),
"site" => Some(("site", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"status" => Some(("status", 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!["cert-challenge-discovered-txt", "cert-challenge-dns", "cert-challenge-http", "cert-status", "discovered-ips", "dns-fetch-time", "dns-status", "domain-name", "domain-redirect", "expected-ips", "path", "provisioning", "site", "status", "token", "type", "update-time"]);
err.issues.push(CLIError::Field(FieldError::Unknown(temp_cursor.to_string(), suggestion, value.map(|v| v.to_string()))));
None
}
};
if let Some((field_cursor_str, type_info)) = type_info {
FieldCursor::from(field_cursor_str).set_json_value(&mut object, value.unwrap(), type_info, err, &temp_cursor);
}
}
let mut request: api::Domain = json::value::from_value(object).unwrap();
let mut call = self.hub.projects().sites_domains_update(request, opt.value_of("name").unwrap_or(""));
for parg in opt.values_of("v").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let (key, value) = parse_kv_arg(&*parg, err, false);
match key {
_ => {
let mut found = false;
for param in &self.gp {
if key == *param {
found = true;
call = call.param(self.gpm.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset"));
break;
}
}
if !found {
err.issues.push(CLIError::UnknownParameter(key.to_string(),
{let mut v = Vec::new();
v.extend(self.gp.iter().map(|v|*v));
v } ));
}
}
}
}
let protocol = CallType::Standard;
if dry_run {
Ok(())
} else {
assert!(err.issues.len() == 0);
for scope in self.opt.values_of("url").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
call = call.add_scope(scope);
}
let mut ostream = match writer_from_opts(opt.value_of("out")) {
Ok(mut f) => f,
Err(io_err) => return Err(DoitError::IoError(opt.value_of("out").unwrap_or("-").to_string(), io_err)),
};
match match protocol {
CallType::Standard => call.doit().await,
_ => unreachable!()
} {
Err(api_err) => Err(DoitError::ApiError(api_err)),
Ok((mut response, output_schema)) => {
let mut value = json::value::to_value(&output_schema).expect("serde to work");
remove_json_null_values(&mut value);
json::to_writer_pretty(&mut ostream, &value).unwrap();
ostream.flush().unwrap();
Ok(())
}
}
}
}
async fn _projects_sites_get(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
-> Result<(), DoitError> {
let mut call = self.hub.projects().sites_get(opt.value_of("name").unwrap_or(""));
for parg in opt.values_of("v").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let (key, value) = parse_kv_arg(&*parg, err, false);
match key {
_ => {
let mut found = false;
for param in &self.gp {
if key == *param {
found = true;
call = call.param(self.gpm.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset"));
break;
}
}
if !found {
err.issues.push(CLIError::UnknownParameter(key.to_string(),
{let mut v = Vec::new();
v.extend(self.gp.iter().map(|v|*v));
v } ));
}
}
}
}
let protocol = CallType::Standard;
if dry_run {
Ok(())
} else {
assert!(err.issues.len() == 0);
for scope in self.opt.values_of("url").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
call = call.add_scope(scope);
}
let mut ostream = match writer_from_opts(opt.value_of("out")) {
Ok(mut f) => f,
Err(io_err) => return Err(DoitError::IoError(opt.value_of("out").unwrap_or("-").to_string(), io_err)),
};
match match protocol {
CallType::Standard => call.doit().await,
_ => unreachable!()
} {
Err(api_err) => Err(DoitError::ApiError(api_err)),
Ok((mut response, output_schema)) => {
let mut value = json::value::to_value(&output_schema).expect("serde to work");
remove_json_null_values(&mut value);
json::to_writer_pretty(&mut ostream, &value).unwrap();
ostream.flush().unwrap();
Ok(())
}
}
}
}
async fn _projects_sites_get_config(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
-> Result<(), DoitError> {
let mut call = self.hub.projects().sites_get_config(opt.value_of("name").unwrap_or(""));
for parg in opt.values_of("v").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let (key, value) = parse_kv_arg(&*parg, err, false);
match key {
_ => {
let mut found = false;
for param in &self.gp {
if key == *param {
found = true;
call = call.param(self.gpm.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset"));
break;
}
}
if !found {
err.issues.push(CLIError::UnknownParameter(key.to_string(),
{let mut v = Vec::new();
v.extend(self.gp.iter().map(|v|*v));
v } ));
}
}
}
}
let protocol = CallType::Standard;
if dry_run {
Ok(())
} else {
assert!(err.issues.len() == 0);
for scope in self.opt.values_of("url").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
call = call.add_scope(scope);
}
let mut ostream = match writer_from_opts(opt.value_of("out")) {
Ok(mut f) => f,
Err(io_err) => return Err(DoitError::IoError(opt.value_of("out").unwrap_or("-").to_string(), io_err)),
};
match match protocol {
CallType::Standard => call.doit().await,
_ => unreachable!()
} {
Err(api_err) => Err(DoitError::ApiError(api_err)),
Ok((mut response, output_schema)) => {
let mut value = json::value::to_value(&output_schema).expect("serde to work");
remove_json_null_values(&mut value);
json::to_writer_pretty(&mut ostream, &value).unwrap();
ostream.flush().unwrap();
Ok(())
}
}
}
}
async fn _projects_sites_list(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
-> Result<(), DoitError> {
let mut call = self.hub.projects().sites_list(opt.value_of("parent").unwrap_or(""));
for parg in opt.values_of("v").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let (key, value) = parse_kv_arg(&*parg, err, false);
match key {
"page-token" => {
call = call.page_token(value.unwrap_or(""));
},
"page-size" => {
call = call.page_size( value.map(|v| arg_from_str(v, err, "page-size", "int32")).unwrap_or(-0));
},
_ => {
let mut found = false;
for param in &self.gp {
if key == *param {
found = true;
call = call.param(self.gpm.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset"));
break;
}
}
if !found {
err.issues.push(CLIError::UnknownParameter(key.to_string(),
{let mut v = Vec::new();
v.extend(self.gp.iter().map(|v|*v));
v.extend(["page-size", "page-token"].iter().map(|v|*v));
v } ));
}
}
}
}
let protocol = CallType::Standard;
if dry_run {
Ok(())
} else {
assert!(err.issues.len() == 0);
for scope in self.opt.values_of("url").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
call = call.add_scope(scope);
}
let mut ostream = match writer_from_opts(opt.value_of("out")) {
Ok(mut f) => f,
Err(io_err) => return Err(DoitError::IoError(opt.value_of("out").unwrap_or("-").to_string(), io_err)),
};
match match protocol {
CallType::Standard => call.doit().await,
_ => unreachable!()
} {
Err(api_err) => Err(DoitError::ApiError(api_err)),
Ok((mut response, output_schema)) => {
let mut value = json::value::to_value(&output_schema).expect("serde to work");
remove_json_null_values(&mut value);
json::to_writer_pretty(&mut ostream, &value).unwrap();
ostream.flush().unwrap();
Ok(())
}
}
}
}
async fn _projects_sites_patch(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
-> Result<(), DoitError> {
let mut field_cursor = FieldCursor::default();
let mut object = json::value::Value::Object(Default::default());
for kvarg in opt.values_of("kv").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let last_errc = err.issues.len();
let (key, value) = parse_kv_arg(&*kvarg, err, false);
let mut temp_cursor = field_cursor.clone();
if let Err(field_err) = temp_cursor.set(&*key) {
err.issues.push(field_err);
}
if value.is_none() {
field_cursor = temp_cursor.clone();
if err.issues.len() > last_errc {
err.issues.remove(last_errc);
}
continue;
}
let type_info: Option<(&'static str, JsonTypeInfo)> =
match &temp_cursor.to_string()[..] {
"app-id" => Some(("appId", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"default-url" => Some(("defaultUrl", 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 })),
"type" => Some(("type", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
_ => {
let suggestion = FieldCursor::did_you_mean(key, &vec!["app-id", "default-url", "labels", "name", "type"]);
err.issues.push(CLIError::Field(FieldError::Unknown(temp_cursor.to_string(), suggestion, value.map(|v| v.to_string()))));
None
}
};
if let Some((field_cursor_str, type_info)) = type_info {
FieldCursor::from(field_cursor_str).set_json_value(&mut object, value.unwrap(), type_info, err, &temp_cursor);
}
}
let mut request: api::Site = json::value::from_value(object).unwrap();
let mut call = self.hub.projects().sites_patch(request, opt.value_of("name").unwrap_or(""));
for parg in opt.values_of("v").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let (key, value) = parse_kv_arg(&*parg, err, false);
match key {
"update-mask" => {
call = call.update_mask( value.map(|v| arg_from_str(v, err, "update-mask", "google-fieldmask")).unwrap_or(FieldMask::default()));
},
_ => {
let mut found = false;
for param in &self.gp {
if key == *param {
found = true;
call = call.param(self.gpm.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset"));
break;
}
}
if !found {
err.issues.push(CLIError::UnknownParameter(key.to_string(),
{let mut v = Vec::new();
v.extend(self.gp.iter().map(|v|*v));
v.extend(["update-mask"].iter().map(|v|*v));
v } ));
}
}
}
}
let protocol = CallType::Standard;
if dry_run {
Ok(())
} else {
assert!(err.issues.len() == 0);
for scope in self.opt.values_of("url").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
call = call.add_scope(scope);
}
let mut ostream = match writer_from_opts(opt.value_of("out")) {
Ok(mut f) => f,
Err(io_err) => return Err(DoitError::IoError(opt.value_of("out").unwrap_or("-").to_string(), io_err)),
};
match match protocol {
CallType::Standard => call.doit().await,
_ => unreachable!()
} {
Err(api_err) => Err(DoitError::ApiError(api_err)),
Ok((mut response, output_schema)) => {
let mut value = json::value::to_value(&output_schema).expect("serde to work");
remove_json_null_values(&mut value);
json::to_writer_pretty(&mut ostream, &value).unwrap();
ostream.flush().unwrap();
Ok(())
}
}
}
}
async fn _projects_sites_releases_create(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
-> Result<(), DoitError> {
let mut field_cursor = FieldCursor::default();
let mut object = json::value::Value::Object(Default::default());
for kvarg in opt.values_of("kv").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let last_errc = err.issues.len();
let (key, value) = parse_kv_arg(&*kvarg, err, false);
let mut temp_cursor = field_cursor.clone();
if let Err(field_err) = temp_cursor.set(&*key) {
err.issues.push(field_err);
}
if value.is_none() {
field_cursor = temp_cursor.clone();
if err.issues.len() > last_errc {
err.issues.remove(last_errc);
}
continue;
}
let type_info: Option<(&'static str, JsonTypeInfo)> =
match &temp_cursor.to_string()[..] {
"message" => Some(("message", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"name" => Some(("name", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release-time" => Some(("releaseTime", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release-user.email" => Some(("releaseUser.email", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release-user.image-url" => Some(("releaseUser.imageUrl", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"type" => Some(("type", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"version.config.app-association" => Some(("version.config.appAssociation", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"version.config.clean-urls" => Some(("version.config.cleanUrls", JsonTypeInfo { jtype: JsonType::Boolean, ctype: ComplexType::Pod })),
"version.config.i18n.root" => Some(("version.config.i18n.root", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"version.config.trailing-slash-behavior" => Some(("version.config.trailingSlashBehavior", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"version.create-time" => Some(("version.createTime", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"version.create-user.email" => Some(("version.createUser.email", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"version.create-user.image-url" => Some(("version.createUser.imageUrl", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"version.delete-time" => Some(("version.deleteTime", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"version.delete-user.email" => Some(("version.deleteUser.email", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"version.delete-user.image-url" => Some(("version.deleteUser.imageUrl", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"version.file-count" => Some(("version.fileCount", JsonTypeInfo { jtype: JsonType::Int, ctype: ComplexType::Pod })),
"version.finalize-time" => Some(("version.finalizeTime", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"version.finalize-user.email" => Some(("version.finalizeUser.email", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"version.finalize-user.image-url" => Some(("version.finalizeUser.imageUrl", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"version.labels" => Some(("version.labels", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Map })),
"version.name" => Some(("version.name", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"version.status" => Some(("version.status", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"version.version-bytes" => Some(("version.versionBytes", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
_ => {
let suggestion = FieldCursor::did_you_mean(key, &vec!["app-association", "clean-urls", "config", "create-time", "create-user", "delete-time", "delete-user", "email", "file-count", "finalize-time", "finalize-user", "i18n", "image-url", "labels", "message", "name", "release-time", "release-user", "root", "status", "trailing-slash-behavior", "type", "version", "version-bytes"]);
err.issues.push(CLIError::Field(FieldError::Unknown(temp_cursor.to_string(), suggestion, value.map(|v| v.to_string()))));
None
}
};
if let Some((field_cursor_str, type_info)) = type_info {
FieldCursor::from(field_cursor_str).set_json_value(&mut object, value.unwrap(), type_info, err, &temp_cursor);
}
}
let mut request: api::Release = json::value::from_value(object).unwrap();
let mut call = self.hub.projects().sites_releases_create(request, opt.value_of("parent").unwrap_or(""));
for parg in opt.values_of("v").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let (key, value) = parse_kv_arg(&*parg, err, false);
match key {
"version-name" => {
call = call.version_name(value.unwrap_or(""));
},
_ => {
let mut found = false;
for param in &self.gp {
if key == *param {
found = true;
call = call.param(self.gpm.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset"));
break;
}
}
if !found {
err.issues.push(CLIError::UnknownParameter(key.to_string(),
{let mut v = Vec::new();
v.extend(self.gp.iter().map(|v|*v));
v.extend(["version-name"].iter().map(|v|*v));
v } ));
}
}
}
}
let protocol = CallType::Standard;
if dry_run {
Ok(())
} else {
assert!(err.issues.len() == 0);
for scope in self.opt.values_of("url").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
call = call.add_scope(scope);
}
let mut ostream = match writer_from_opts(opt.value_of("out")) {
Ok(mut f) => f,
Err(io_err) => return Err(DoitError::IoError(opt.value_of("out").unwrap_or("-").to_string(), io_err)),
};
match match protocol {
CallType::Standard => call.doit().await,
_ => unreachable!()
} {
Err(api_err) => Err(DoitError::ApiError(api_err)),
Ok((mut response, output_schema)) => {
let mut value = json::value::to_value(&output_schema).expect("serde to work");
remove_json_null_values(&mut value);
json::to_writer_pretty(&mut ostream, &value).unwrap();
ostream.flush().unwrap();
Ok(())
}
}
}
}
async fn _projects_sites_releases_list(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
-> Result<(), DoitError> {
let mut call = self.hub.projects().sites_releases_list(opt.value_of("parent").unwrap_or(""));
for parg in opt.values_of("v").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let (key, value) = parse_kv_arg(&*parg, err, false);
match key {
"page-token" => {
call = call.page_token(value.unwrap_or(""));
},
"page-size" => {
call = call.page_size( value.map(|v| arg_from_str(v, err, "page-size", "int32")).unwrap_or(-0));
},
_ => {
let mut found = false;
for param in &self.gp {
if key == *param {
found = true;
call = call.param(self.gpm.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset"));
break;
}
}
if !found {
err.issues.push(CLIError::UnknownParameter(key.to_string(),
{let mut v = Vec::new();
v.extend(self.gp.iter().map(|v|*v));
v.extend(["page-size", "page-token"].iter().map(|v|*v));
v } ));
}
}
}
}
let protocol = CallType::Standard;
if dry_run {
Ok(())
} else {
assert!(err.issues.len() == 0);
for scope in self.opt.values_of("url").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
call = call.add_scope(scope);
}
let mut ostream = match writer_from_opts(opt.value_of("out")) {
Ok(mut f) => f,
Err(io_err) => return Err(DoitError::IoError(opt.value_of("out").unwrap_or("-").to_string(), io_err)),
};
match match protocol {
CallType::Standard => call.doit().await,
_ => unreachable!()
} {
Err(api_err) => Err(DoitError::ApiError(api_err)),
Ok((mut response, output_schema)) => {
let mut value = json::value::to_value(&output_schema).expect("serde to work");
remove_json_null_values(&mut value);
json::to_writer_pretty(&mut ostream, &value).unwrap();
ostream.flush().unwrap();
Ok(())
}
}
}
}
async fn _projects_sites_update_config(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
-> Result<(), DoitError> {
let mut field_cursor = FieldCursor::default();
let mut object = json::value::Value::Object(Default::default());
for kvarg in opt.values_of("kv").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let last_errc = err.issues.len();
let (key, value) = parse_kv_arg(&*kvarg, err, false);
let mut temp_cursor = field_cursor.clone();
if let Err(field_err) = temp_cursor.set(&*key) {
err.issues.push(field_err);
}
if value.is_none() {
field_cursor = temp_cursor.clone();
if err.issues.len() > last_errc {
err.issues.remove(last_errc);
}
continue;
}
let type_info: Option<(&'static str, JsonTypeInfo)> =
match &temp_cursor.to_string()[..] {
"cloud-logging-enabled" => Some(("cloudLoggingEnabled", JsonTypeInfo { jtype: JsonType::Boolean, ctype: ComplexType::Pod })),
"max-versions" => Some(("maxVersions", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
_ => {
let suggestion = FieldCursor::did_you_mean(key, &vec!["cloud-logging-enabled", "max-versions"]);
err.issues.push(CLIError::Field(FieldError::Unknown(temp_cursor.to_string(), suggestion, value.map(|v| v.to_string()))));
None
}
};
if let Some((field_cursor_str, type_info)) = type_info {
FieldCursor::from(field_cursor_str).set_json_value(&mut object, value.unwrap(), type_info, err, &temp_cursor);
}
}
let mut request: api::SiteConfig = json::value::from_value(object).unwrap();
let mut call = self.hub.projects().sites_update_config(request, opt.value_of("name").unwrap_or(""));
for parg in opt.values_of("v").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let (key, value) = parse_kv_arg(&*parg, err, false);
match key {
"update-mask" => {
call = call.update_mask( value.map(|v| arg_from_str(v, err, "update-mask", "google-fieldmask")).unwrap_or(FieldMask::default()));
},
_ => {
let mut found = false;
for param in &self.gp {
if key == *param {
found = true;
call = call.param(self.gpm.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset"));
break;
}
}
if !found {
err.issues.push(CLIError::UnknownParameter(key.to_string(),
{let mut v = Vec::new();
v.extend(self.gp.iter().map(|v|*v));
v.extend(["update-mask"].iter().map(|v|*v));
v } ));
}
}
}
}
let protocol = CallType::Standard;
if dry_run {
Ok(())
} else {
assert!(err.issues.len() == 0);
for scope in self.opt.values_of("url").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
call = call.add_scope(scope);
}
let mut ostream = match writer_from_opts(opt.value_of("out")) {
Ok(mut f) => f,
Err(io_err) => return Err(DoitError::IoError(opt.value_of("out").unwrap_or("-").to_string(), io_err)),
};
match match protocol {
CallType::Standard => call.doit().await,
_ => unreachable!()
} {
Err(api_err) => Err(DoitError::ApiError(api_err)),
Ok((mut response, output_schema)) => {
let mut value = json::value::to_value(&output_schema).expect("serde to work");
remove_json_null_values(&mut value);
json::to_writer_pretty(&mut ostream, &value).unwrap();
ostream.flush().unwrap();
Ok(())
}
}
}
}
async fn _projects_sites_versions_clone(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
-> Result<(), DoitError> {
let mut field_cursor = FieldCursor::default();
let mut object = json::value::Value::Object(Default::default());
for kvarg in opt.values_of("kv").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let last_errc = err.issues.len();
let (key, value) = parse_kv_arg(&*kvarg, err, false);
let mut temp_cursor = field_cursor.clone();
if let Err(field_err) = temp_cursor.set(&*key) {
err.issues.push(field_err);
}
if value.is_none() {
field_cursor = temp_cursor.clone();
if err.issues.len() > last_errc {
err.issues.remove(last_errc);
}
continue;
}
let type_info: Option<(&'static str, JsonTypeInfo)> =
match &temp_cursor.to_string()[..] {
"exclude.regexes" => Some(("exclude.regexes", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Vec })),
"finalize" => Some(("finalize", JsonTypeInfo { jtype: JsonType::Boolean, ctype: ComplexType::Pod })),
"include.regexes" => Some(("include.regexes", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Vec })),
"source-version" => Some(("sourceVersion", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
_ => {
let suggestion = FieldCursor::did_you_mean(key, &vec!["exclude", "finalize", "include", "regexes", "source-version"]);
err.issues.push(CLIError::Field(FieldError::Unknown(temp_cursor.to_string(), suggestion, value.map(|v| v.to_string()))));
None
}
};
if let Some((field_cursor_str, type_info)) = type_info {
FieldCursor::from(field_cursor_str).set_json_value(&mut object, value.unwrap(), type_info, err, &temp_cursor);
}
}
let mut request: api::CloneVersionRequest = json::value::from_value(object).unwrap();
let mut call = self.hub.projects().sites_versions_clone(request, opt.value_of("parent").unwrap_or(""));
for parg in opt.values_of("v").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let (key, value) = parse_kv_arg(&*parg, err, false);
match key {
_ => {
let mut found = false;
for param in &self.gp {
if key == *param {
found = true;
call = call.param(self.gpm.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset"));
break;
}
}
if !found {
err.issues.push(CLIError::UnknownParameter(key.to_string(),
{let mut v = Vec::new();
v.extend(self.gp.iter().map(|v|*v));
v } ));
}
}
}
}
let protocol = CallType::Standard;
if dry_run {
Ok(())
} else {
assert!(err.issues.len() == 0);
for scope in self.opt.values_of("url").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
call = call.add_scope(scope);
}
let mut ostream = match writer_from_opts(opt.value_of("out")) {
Ok(mut f) => f,
Err(io_err) => return Err(DoitError::IoError(opt.value_of("out").unwrap_or("-").to_string(), io_err)),
};
match match protocol {
CallType::Standard => call.doit().await,
_ => unreachable!()
} {
Err(api_err) => Err(DoitError::ApiError(api_err)),
Ok((mut response, output_schema)) => {
let mut value = json::value::to_value(&output_schema).expect("serde to work");
remove_json_null_values(&mut value);
json::to_writer_pretty(&mut ostream, &value).unwrap();
ostream.flush().unwrap();
Ok(())
}
}
}
}
async fn _projects_sites_versions_create(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
-> Result<(), DoitError> {
let mut field_cursor = FieldCursor::default();
let mut object = json::value::Value::Object(Default::default());
for kvarg in opt.values_of("kv").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let last_errc = err.issues.len();
let (key, value) = parse_kv_arg(&*kvarg, err, false);
let mut temp_cursor = field_cursor.clone();
if let Err(field_err) = temp_cursor.set(&*key) {
err.issues.push(field_err);
}
if value.is_none() {
field_cursor = temp_cursor.clone();
if err.issues.len() > last_errc {
err.issues.remove(last_errc);
}
continue;
}
let type_info: Option<(&'static str, JsonTypeInfo)> =
match &temp_cursor.to_string()[..] {
"config.app-association" => Some(("config.appAssociation", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"config.clean-urls" => Some(("config.cleanUrls", JsonTypeInfo { jtype: JsonType::Boolean, ctype: ComplexType::Pod })),
"config.i18n.root" => Some(("config.i18n.root", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"config.trailing-slash-behavior" => Some(("config.trailingSlashBehavior", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"create-time" => Some(("createTime", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"create-user.email" => Some(("createUser.email", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"create-user.image-url" => Some(("createUser.imageUrl", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"delete-time" => Some(("deleteTime", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"delete-user.email" => Some(("deleteUser.email", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"delete-user.image-url" => Some(("deleteUser.imageUrl", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"file-count" => Some(("fileCount", JsonTypeInfo { jtype: JsonType::Int, ctype: ComplexType::Pod })),
"finalize-time" => Some(("finalizeTime", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"finalize-user.email" => Some(("finalizeUser.email", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"finalize-user.image-url" => Some(("finalizeUser.imageUrl", 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 })),
"status" => Some(("status", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"version-bytes" => Some(("versionBytes", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
_ => {
let suggestion = FieldCursor::did_you_mean(key, &vec!["app-association", "clean-urls", "config", "create-time", "create-user", "delete-time", "delete-user", "email", "file-count", "finalize-time", "finalize-user", "i18n", "image-url", "labels", "name", "root", "status", "trailing-slash-behavior", "version-bytes"]);
err.issues.push(CLIError::Field(FieldError::Unknown(temp_cursor.to_string(), suggestion, value.map(|v| v.to_string()))));
None
}
};
if let Some((field_cursor_str, type_info)) = type_info {
FieldCursor::from(field_cursor_str).set_json_value(&mut object, value.unwrap(), type_info, err, &temp_cursor);
}
}
let mut request: api::Version = json::value::from_value(object).unwrap();
let mut call = self.hub.projects().sites_versions_create(request, opt.value_of("parent").unwrap_or(""));
for parg in opt.values_of("v").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let (key, value) = parse_kv_arg(&*parg, err, false);
match key {
"version-id" => {
call = call.version_id(value.unwrap_or(""));
},
"size-bytes" => {
call = call.size_bytes( value.map(|v| arg_from_str(v, err, "size-bytes", "int64")).unwrap_or(-0));
},
_ => {
let mut found = false;
for param in &self.gp {
if key == *param {
found = true;
call = call.param(self.gpm.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset"));
break;
}
}
if !found {
err.issues.push(CLIError::UnknownParameter(key.to_string(),
{let mut v = Vec::new();
v.extend(self.gp.iter().map(|v|*v));
v.extend(["size-bytes", "version-id"].iter().map(|v|*v));
v } ));
}
}
}
}
let protocol = CallType::Standard;
if dry_run {
Ok(())
} else {
assert!(err.issues.len() == 0);
for scope in self.opt.values_of("url").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
call = call.add_scope(scope);
}
let mut ostream = match writer_from_opts(opt.value_of("out")) {
Ok(mut f) => f,
Err(io_err) => return Err(DoitError::IoError(opt.value_of("out").unwrap_or("-").to_string(), io_err)),
};
match match protocol {
CallType::Standard => call.doit().await,
_ => unreachable!()
} {
Err(api_err) => Err(DoitError::ApiError(api_err)),
Ok((mut response, output_schema)) => {
let mut value = json::value::to_value(&output_schema).expect("serde to work");
remove_json_null_values(&mut value);
json::to_writer_pretty(&mut ostream, &value).unwrap();
ostream.flush().unwrap();
Ok(())
}
}
}
}
async fn _projects_sites_versions_delete(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
-> Result<(), DoitError> {
let mut call = self.hub.projects().sites_versions_delete(opt.value_of("name").unwrap_or(""));
for parg in opt.values_of("v").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let (key, value) = parse_kv_arg(&*parg, err, false);
match key {
_ => {
let mut found = false;
for param in &self.gp {
if key == *param {
found = true;
call = call.param(self.gpm.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset"));
break;
}
}
if !found {
err.issues.push(CLIError::UnknownParameter(key.to_string(),
{let mut v = Vec::new();
v.extend(self.gp.iter().map(|v|*v));
v } ));
}
}
}
}
let protocol = CallType::Standard;
if dry_run {
Ok(())
} else {
assert!(err.issues.len() == 0);
for scope in self.opt.values_of("url").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
call = call.add_scope(scope);
}
let mut ostream = match writer_from_opts(opt.value_of("out")) {
Ok(mut f) => f,
Err(io_err) => return Err(DoitError::IoError(opt.value_of("out").unwrap_or("-").to_string(), io_err)),
};
match match protocol {
CallType::Standard => call.doit().await,
_ => unreachable!()
} {
Err(api_err) => Err(DoitError::ApiError(api_err)),
Ok((mut response, output_schema)) => {
let mut value = json::value::to_value(&output_schema).expect("serde to work");
remove_json_null_values(&mut value);
json::to_writer_pretty(&mut ostream, &value).unwrap();
ostream.flush().unwrap();
Ok(())
}
}
}
}
async fn _projects_sites_versions_files_list(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
-> Result<(), DoitError> {
let mut call = self.hub.projects().sites_versions_files_list(opt.value_of("parent").unwrap_or(""));
for parg in opt.values_of("v").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let (key, value) = parse_kv_arg(&*parg, err, false);
match key {
"status" => {
call = call.status(value.unwrap_or(""));
},
"page-token" => {
call = call.page_token(value.unwrap_or(""));
},
"page-size" => {
call = call.page_size( value.map(|v| arg_from_str(v, err, "page-size", "int32")).unwrap_or(-0));
},
_ => {
let mut found = false;
for param in &self.gp {
if key == *param {
found = true;
call = call.param(self.gpm.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset"));
break;
}
}
if !found {
err.issues.push(CLIError::UnknownParameter(key.to_string(),
{let mut v = Vec::new();
v.extend(self.gp.iter().map(|v|*v));
v.extend(["page-size", "page-token", "status"].iter().map(|v|*v));
v } ));
}
}
}
}
let protocol = CallType::Standard;
if dry_run {
Ok(())
} else {
assert!(err.issues.len() == 0);
for scope in self.opt.values_of("url").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
call = call.add_scope(scope);
}
let mut ostream = match writer_from_opts(opt.value_of("out")) {
Ok(mut f) => f,
Err(io_err) => return Err(DoitError::IoError(opt.value_of("out").unwrap_or("-").to_string(), io_err)),
};
match match protocol {
CallType::Standard => call.doit().await,
_ => unreachable!()
} {
Err(api_err) => Err(DoitError::ApiError(api_err)),
Ok((mut response, output_schema)) => {
let mut value = json::value::to_value(&output_schema).expect("serde to work");
remove_json_null_values(&mut value);
json::to_writer_pretty(&mut ostream, &value).unwrap();
ostream.flush().unwrap();
Ok(())
}
}
}
}
async fn _projects_sites_versions_list(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
-> Result<(), DoitError> {
let mut call = self.hub.projects().sites_versions_list(opt.value_of("parent").unwrap_or(""));
for parg in opt.values_of("v").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let (key, value) = parse_kv_arg(&*parg, err, false);
match key {
"page-token" => {
call = call.page_token(value.unwrap_or(""));
},
"page-size" => {
call = call.page_size( value.map(|v| arg_from_str(v, err, "page-size", "int32")).unwrap_or(-0));
},
"filter" => {
call = call.filter(value.unwrap_or(""));
},
_ => {
let mut found = false;
for param in &self.gp {
if key == *param {
found = true;
call = call.param(self.gpm.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset"));
break;
}
}
if !found {
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-size", "page-token"].iter().map(|v|*v));
v } ));
}
}
}
}
let protocol = CallType::Standard;
if dry_run {
Ok(())
} else {
assert!(err.issues.len() == 0);
for scope in self.opt.values_of("url").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
call = call.add_scope(scope);
}
let mut ostream = match writer_from_opts(opt.value_of("out")) {
Ok(mut f) => f,
Err(io_err) => return Err(DoitError::IoError(opt.value_of("out").unwrap_or("-").to_string(), io_err)),
};
match match protocol {
CallType::Standard => call.doit().await,
_ => unreachable!()
} {
Err(api_err) => Err(DoitError::ApiError(api_err)),
Ok((mut response, output_schema)) => {
let mut value = json::value::to_value(&output_schema).expect("serde to work");
remove_json_null_values(&mut value);
json::to_writer_pretty(&mut ostream, &value).unwrap();
ostream.flush().unwrap();
Ok(())
}
}
}
}
async fn _projects_sites_versions_patch(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
-> Result<(), DoitError> {
let mut field_cursor = FieldCursor::default();
let mut object = json::value::Value::Object(Default::default());
for kvarg in opt.values_of("kv").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let last_errc = err.issues.len();
let (key, value) = parse_kv_arg(&*kvarg, err, false);
let mut temp_cursor = field_cursor.clone();
if let Err(field_err) = temp_cursor.set(&*key) {
err.issues.push(field_err);
}
if value.is_none() {
field_cursor = temp_cursor.clone();
if err.issues.len() > last_errc {
err.issues.remove(last_errc);
}
continue;
}
let type_info: Option<(&'static str, JsonTypeInfo)> =
match &temp_cursor.to_string()[..] {
"config.app-association" => Some(("config.appAssociation", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"config.clean-urls" => Some(("config.cleanUrls", JsonTypeInfo { jtype: JsonType::Boolean, ctype: ComplexType::Pod })),
"config.i18n.root" => Some(("config.i18n.root", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"config.trailing-slash-behavior" => Some(("config.trailingSlashBehavior", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"create-time" => Some(("createTime", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"create-user.email" => Some(("createUser.email", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"create-user.image-url" => Some(("createUser.imageUrl", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"delete-time" => Some(("deleteTime", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"delete-user.email" => Some(("deleteUser.email", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"delete-user.image-url" => Some(("deleteUser.imageUrl", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"file-count" => Some(("fileCount", JsonTypeInfo { jtype: JsonType::Int, ctype: ComplexType::Pod })),
"finalize-time" => Some(("finalizeTime", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"finalize-user.email" => Some(("finalizeUser.email", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"finalize-user.image-url" => Some(("finalizeUser.imageUrl", 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 })),
"status" => Some(("status", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"version-bytes" => Some(("versionBytes", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
_ => {
let suggestion = FieldCursor::did_you_mean(key, &vec!["app-association", "clean-urls", "config", "create-time", "create-user", "delete-time", "delete-user", "email", "file-count", "finalize-time", "finalize-user", "i18n", "image-url", "labels", "name", "root", "status", "trailing-slash-behavior", "version-bytes"]);
err.issues.push(CLIError::Field(FieldError::Unknown(temp_cursor.to_string(), suggestion, value.map(|v| v.to_string()))));
None
}
};
if let Some((field_cursor_str, type_info)) = type_info {
FieldCursor::from(field_cursor_str).set_json_value(&mut object, value.unwrap(), type_info, err, &temp_cursor);
}
}
let mut request: api::Version = json::value::from_value(object).unwrap();
let mut call = self.hub.projects().sites_versions_patch(request, opt.value_of("name").unwrap_or(""));
for parg in opt.values_of("v").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let (key, value) = parse_kv_arg(&*parg, err, false);
match key {
"update-mask" => {
call = call.update_mask( value.map(|v| arg_from_str(v, err, "update-mask", "google-fieldmask")).unwrap_or(FieldMask::default()));
},
_ => {
let mut found = false;
for param in &self.gp {
if key == *param {
found = true;
call = call.param(self.gpm.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset"));
break;
}
}
if !found {
err.issues.push(CLIError::UnknownParameter(key.to_string(),
{let mut v = Vec::new();
v.extend(self.gp.iter().map(|v|*v));
v.extend(["update-mask"].iter().map(|v|*v));
v } ));
}
}
}
}
let protocol = CallType::Standard;
if dry_run {
Ok(())
} else {
assert!(err.issues.len() == 0);
for scope in self.opt.values_of("url").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
call = call.add_scope(scope);
}
let mut ostream = match writer_from_opts(opt.value_of("out")) {
Ok(mut f) => f,
Err(io_err) => return Err(DoitError::IoError(opt.value_of("out").unwrap_or("-").to_string(), io_err)),
};
match match protocol {
CallType::Standard => call.doit().await,
_ => unreachable!()
} {
Err(api_err) => Err(DoitError::ApiError(api_err)),
Ok((mut response, output_schema)) => {
let mut value = json::value::to_value(&output_schema).expect("serde to work");
remove_json_null_values(&mut value);
json::to_writer_pretty(&mut ostream, &value).unwrap();
ostream.flush().unwrap();
Ok(())
}
}
}
}
async fn _projects_sites_versions_populate_files(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
-> Result<(), DoitError> {
let mut field_cursor = FieldCursor::default();
let mut object = json::value::Value::Object(Default::default());
for kvarg in opt.values_of("kv").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let last_errc = err.issues.len();
let (key, value) = parse_kv_arg(&*kvarg, err, false);
let mut temp_cursor = field_cursor.clone();
if let Err(field_err) = temp_cursor.set(&*key) {
err.issues.push(field_err);
}
if value.is_none() {
field_cursor = temp_cursor.clone();
if err.issues.len() > last_errc {
err.issues.remove(last_errc);
}
continue;
}
let type_info: Option<(&'static str, JsonTypeInfo)> =
match &temp_cursor.to_string()[..] {
"files" => Some(("files", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Map })),
_ => {
let suggestion = FieldCursor::did_you_mean(key, &vec!["files"]);
err.issues.push(CLIError::Field(FieldError::Unknown(temp_cursor.to_string(), suggestion, value.map(|v| v.to_string()))));
None
}
};
if let Some((field_cursor_str, type_info)) = type_info {
FieldCursor::from(field_cursor_str).set_json_value(&mut object, value.unwrap(), type_info, err, &temp_cursor);
}
}
let mut request: api::PopulateVersionFilesRequest = json::value::from_value(object).unwrap();
let mut call = self.hub.projects().sites_versions_populate_files(request, opt.value_of("parent").unwrap_or(""));
for parg in opt.values_of("v").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let (key, value) = parse_kv_arg(&*parg, err, false);
match key {
_ => {
let mut found = false;
for param in &self.gp {
if key == *param {
found = true;
call = call.param(self.gpm.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset"));
break;
}
}
if !found {
err.issues.push(CLIError::UnknownParameter(key.to_string(),
{let mut v = Vec::new();
v.extend(self.gp.iter().map(|v|*v));
v } ));
}
}
}
}
let protocol = CallType::Standard;
if dry_run {
Ok(())
} else {
assert!(err.issues.len() == 0);
for scope in self.opt.values_of("url").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
call = call.add_scope(scope);
}
let mut ostream = match writer_from_opts(opt.value_of("out")) {
Ok(mut f) => f,
Err(io_err) => return Err(DoitError::IoError(opt.value_of("out").unwrap_or("-").to_string(), io_err)),
};
match match protocol {
CallType::Standard => call.doit().await,
_ => unreachable!()
} {
Err(api_err) => Err(DoitError::ApiError(api_err)),
Ok((mut response, output_schema)) => {
let mut value = json::value::to_value(&output_schema).expect("serde to work");
remove_json_null_values(&mut value);
json::to_writer_pretty(&mut ostream, &value).unwrap();
ostream.flush().unwrap();
Ok(())
}
}
}
}
async fn _sites_channels_create(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
-> Result<(), DoitError> {
let mut field_cursor = FieldCursor::default();
let mut object = json::value::Value::Object(Default::default());
for kvarg in opt.values_of("kv").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let last_errc = err.issues.len();
let (key, value) = parse_kv_arg(&*kvarg, err, false);
let mut temp_cursor = field_cursor.clone();
if let Err(field_err) = temp_cursor.set(&*key) {
err.issues.push(field_err);
}
if value.is_none() {
field_cursor = temp_cursor.clone();
if err.issues.len() > last_errc {
err.issues.remove(last_errc);
}
continue;
}
let type_info: Option<(&'static str, JsonTypeInfo)> =
match &temp_cursor.to_string()[..] {
"create-time" => Some(("createTime", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"expire-time" => Some(("expireTime", 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 })),
"release.message" => Some(("release.message", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.name" => Some(("release.name", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.release-time" => Some(("release.releaseTime", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.release-user.email" => Some(("release.releaseUser.email", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.release-user.image-url" => Some(("release.releaseUser.imageUrl", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.type" => Some(("release.type", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.version.config.app-association" => Some(("release.version.config.appAssociation", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.version.config.clean-urls" => Some(("release.version.config.cleanUrls", JsonTypeInfo { jtype: JsonType::Boolean, ctype: ComplexType::Pod })),
"release.version.config.i18n.root" => Some(("release.version.config.i18n.root", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.version.config.trailing-slash-behavior" => Some(("release.version.config.trailingSlashBehavior", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.version.create-time" => Some(("release.version.createTime", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.version.create-user.email" => Some(("release.version.createUser.email", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.version.create-user.image-url" => Some(("release.version.createUser.imageUrl", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.version.delete-time" => Some(("release.version.deleteTime", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.version.delete-user.email" => Some(("release.version.deleteUser.email", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.version.delete-user.image-url" => Some(("release.version.deleteUser.imageUrl", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.version.file-count" => Some(("release.version.fileCount", JsonTypeInfo { jtype: JsonType::Int, ctype: ComplexType::Pod })),
"release.version.finalize-time" => Some(("release.version.finalizeTime", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.version.finalize-user.email" => Some(("release.version.finalizeUser.email", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.version.finalize-user.image-url" => Some(("release.version.finalizeUser.imageUrl", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.version.labels" => Some(("release.version.labels", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Map })),
"release.version.name" => Some(("release.version.name", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.version.status" => Some(("release.version.status", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.version.version-bytes" => Some(("release.version.versionBytes", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"retained-release-count" => Some(("retainedReleaseCount", JsonTypeInfo { jtype: JsonType::Int, ctype: ComplexType::Pod })),
"ttl" => Some(("ttl", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"update-time" => Some(("updateTime", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"url" => Some(("url", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
_ => {
let suggestion = FieldCursor::did_you_mean(key, &vec!["app-association", "clean-urls", "config", "create-time", "create-user", "delete-time", "delete-user", "email", "expire-time", "file-count", "finalize-time", "finalize-user", "i18n", "image-url", "labels", "message", "name", "release", "release-time", "release-user", "retained-release-count", "root", "status", "trailing-slash-behavior", "ttl", "type", "update-time", "url", "version", "version-bytes"]);
err.issues.push(CLIError::Field(FieldError::Unknown(temp_cursor.to_string(), suggestion, value.map(|v| v.to_string()))));
None
}
};
if let Some((field_cursor_str, type_info)) = type_info {
FieldCursor::from(field_cursor_str).set_json_value(&mut object, value.unwrap(), type_info, err, &temp_cursor);
}
}
let mut request: api::Channel = json::value::from_value(object).unwrap();
let mut call = self.hub.sites().channels_create(request, opt.value_of("parent").unwrap_or(""));
for parg in opt.values_of("v").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let (key, value) = parse_kv_arg(&*parg, err, false);
match key {
"channel-id" => {
call = call.channel_id(value.unwrap_or(""));
},
_ => {
let mut found = false;
for param in &self.gp {
if key == *param {
found = true;
call = call.param(self.gpm.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset"));
break;
}
}
if !found {
err.issues.push(CLIError::UnknownParameter(key.to_string(),
{let mut v = Vec::new();
v.extend(self.gp.iter().map(|v|*v));
v.extend(["channel-id"].iter().map(|v|*v));
v } ));
}
}
}
}
let protocol = CallType::Standard;
if dry_run {
Ok(())
} else {
assert!(err.issues.len() == 0);
for scope in self.opt.values_of("url").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
call = call.add_scope(scope);
}
let mut ostream = match writer_from_opts(opt.value_of("out")) {
Ok(mut f) => f,
Err(io_err) => return Err(DoitError::IoError(opt.value_of("out").unwrap_or("-").to_string(), io_err)),
};
match match protocol {
CallType::Standard => call.doit().await,
_ => unreachable!()
} {
Err(api_err) => Err(DoitError::ApiError(api_err)),
Ok((mut response, output_schema)) => {
let mut value = json::value::to_value(&output_schema).expect("serde to work");
remove_json_null_values(&mut value);
json::to_writer_pretty(&mut ostream, &value).unwrap();
ostream.flush().unwrap();
Ok(())
}
}
}
}
async fn _sites_channels_delete(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
-> Result<(), DoitError> {
let mut call = self.hub.sites().channels_delete(opt.value_of("name").unwrap_or(""));
for parg in opt.values_of("v").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let (key, value) = parse_kv_arg(&*parg, err, false);
match key {
_ => {
let mut found = false;
for param in &self.gp {
if key == *param {
found = true;
call = call.param(self.gpm.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset"));
break;
}
}
if !found {
err.issues.push(CLIError::UnknownParameter(key.to_string(),
{let mut v = Vec::new();
v.extend(self.gp.iter().map(|v|*v));
v } ));
}
}
}
}
let protocol = CallType::Standard;
if dry_run {
Ok(())
} else {
assert!(err.issues.len() == 0);
for scope in self.opt.values_of("url").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
call = call.add_scope(scope);
}
let mut ostream = match writer_from_opts(opt.value_of("out")) {
Ok(mut f) => f,
Err(io_err) => return Err(DoitError::IoError(opt.value_of("out").unwrap_or("-").to_string(), io_err)),
};
match match protocol {
CallType::Standard => call.doit().await,
_ => unreachable!()
} {
Err(api_err) => Err(DoitError::ApiError(api_err)),
Ok((mut response, output_schema)) => {
let mut value = json::value::to_value(&output_schema).expect("serde to work");
remove_json_null_values(&mut value);
json::to_writer_pretty(&mut ostream, &value).unwrap();
ostream.flush().unwrap();
Ok(())
}
}
}
}
async fn _sites_channels_get(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
-> Result<(), DoitError> {
let mut call = self.hub.sites().channels_get(opt.value_of("name").unwrap_or(""));
for parg in opt.values_of("v").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let (key, value) = parse_kv_arg(&*parg, err, false);
match key {
_ => {
let mut found = false;
for param in &self.gp {
if key == *param {
found = true;
call = call.param(self.gpm.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset"));
break;
}
}
if !found {
err.issues.push(CLIError::UnknownParameter(key.to_string(),
{let mut v = Vec::new();
v.extend(self.gp.iter().map(|v|*v));
v } ));
}
}
}
}
let protocol = CallType::Standard;
if dry_run {
Ok(())
} else {
assert!(err.issues.len() == 0);
for scope in self.opt.values_of("url").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
call = call.add_scope(scope);
}
let mut ostream = match writer_from_opts(opt.value_of("out")) {
Ok(mut f) => f,
Err(io_err) => return Err(DoitError::IoError(opt.value_of("out").unwrap_or("-").to_string(), io_err)),
};
match match protocol {
CallType::Standard => call.doit().await,
_ => unreachable!()
} {
Err(api_err) => Err(DoitError::ApiError(api_err)),
Ok((mut response, output_schema)) => {
let mut value = json::value::to_value(&output_schema).expect("serde to work");
remove_json_null_values(&mut value);
json::to_writer_pretty(&mut ostream, &value).unwrap();
ostream.flush().unwrap();
Ok(())
}
}
}
}
async fn _sites_channels_list(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
-> Result<(), DoitError> {
let mut call = self.hub.sites().channels_list(opt.value_of("parent").unwrap_or(""));
for parg in opt.values_of("v").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let (key, value) = parse_kv_arg(&*parg, err, false);
match key {
"page-token" => {
call = call.page_token(value.unwrap_or(""));
},
"page-size" => {
call = call.page_size( value.map(|v| arg_from_str(v, err, "page-size", "int32")).unwrap_or(-0));
},
_ => {
let mut found = false;
for param in &self.gp {
if key == *param {
found = true;
call = call.param(self.gpm.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset"));
break;
}
}
if !found {
err.issues.push(CLIError::UnknownParameter(key.to_string(),
{let mut v = Vec::new();
v.extend(self.gp.iter().map(|v|*v));
v.extend(["page-size", "page-token"].iter().map(|v|*v));
v } ));
}
}
}
}
let protocol = CallType::Standard;
if dry_run {
Ok(())
} else {
assert!(err.issues.len() == 0);
for scope in self.opt.values_of("url").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
call = call.add_scope(scope);
}
let mut ostream = match writer_from_opts(opt.value_of("out")) {
Ok(mut f) => f,
Err(io_err) => return Err(DoitError::IoError(opt.value_of("out").unwrap_or("-").to_string(), io_err)),
};
match match protocol {
CallType::Standard => call.doit().await,
_ => unreachable!()
} {
Err(api_err) => Err(DoitError::ApiError(api_err)),
Ok((mut response, output_schema)) => {
let mut value = json::value::to_value(&output_schema).expect("serde to work");
remove_json_null_values(&mut value);
json::to_writer_pretty(&mut ostream, &value).unwrap();
ostream.flush().unwrap();
Ok(())
}
}
}
}
async fn _sites_channels_patch(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
-> Result<(), DoitError> {
let mut field_cursor = FieldCursor::default();
let mut object = json::value::Value::Object(Default::default());
for kvarg in opt.values_of("kv").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let last_errc = err.issues.len();
let (key, value) = parse_kv_arg(&*kvarg, err, false);
let mut temp_cursor = field_cursor.clone();
if let Err(field_err) = temp_cursor.set(&*key) {
err.issues.push(field_err);
}
if value.is_none() {
field_cursor = temp_cursor.clone();
if err.issues.len() > last_errc {
err.issues.remove(last_errc);
}
continue;
}
let type_info: Option<(&'static str, JsonTypeInfo)> =
match &temp_cursor.to_string()[..] {
"create-time" => Some(("createTime", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"expire-time" => Some(("expireTime", 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 })),
"release.message" => Some(("release.message", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.name" => Some(("release.name", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.release-time" => Some(("release.releaseTime", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.release-user.email" => Some(("release.releaseUser.email", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.release-user.image-url" => Some(("release.releaseUser.imageUrl", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.type" => Some(("release.type", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.version.config.app-association" => Some(("release.version.config.appAssociation", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.version.config.clean-urls" => Some(("release.version.config.cleanUrls", JsonTypeInfo { jtype: JsonType::Boolean, ctype: ComplexType::Pod })),
"release.version.config.i18n.root" => Some(("release.version.config.i18n.root", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.version.config.trailing-slash-behavior" => Some(("release.version.config.trailingSlashBehavior", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.version.create-time" => Some(("release.version.createTime", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.version.create-user.email" => Some(("release.version.createUser.email", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.version.create-user.image-url" => Some(("release.version.createUser.imageUrl", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.version.delete-time" => Some(("release.version.deleteTime", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.version.delete-user.email" => Some(("release.version.deleteUser.email", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.version.delete-user.image-url" => Some(("release.version.deleteUser.imageUrl", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.version.file-count" => Some(("release.version.fileCount", JsonTypeInfo { jtype: JsonType::Int, ctype: ComplexType::Pod })),
"release.version.finalize-time" => Some(("release.version.finalizeTime", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.version.finalize-user.email" => Some(("release.version.finalizeUser.email", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.version.finalize-user.image-url" => Some(("release.version.finalizeUser.imageUrl", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.version.labels" => Some(("release.version.labels", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Map })),
"release.version.name" => Some(("release.version.name", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.version.status" => Some(("release.version.status", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release.version.version-bytes" => Some(("release.version.versionBytes", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"retained-release-count" => Some(("retainedReleaseCount", JsonTypeInfo { jtype: JsonType::Int, ctype: ComplexType::Pod })),
"ttl" => Some(("ttl", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"update-time" => Some(("updateTime", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"url" => Some(("url", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
_ => {
let suggestion = FieldCursor::did_you_mean(key, &vec!["app-association", "clean-urls", "config", "create-time", "create-user", "delete-time", "delete-user", "email", "expire-time", "file-count", "finalize-time", "finalize-user", "i18n", "image-url", "labels", "message", "name", "release", "release-time", "release-user", "retained-release-count", "root", "status", "trailing-slash-behavior", "ttl", "type", "update-time", "url", "version", "version-bytes"]);
err.issues.push(CLIError::Field(FieldError::Unknown(temp_cursor.to_string(), suggestion, value.map(|v| v.to_string()))));
None
}
};
if let Some((field_cursor_str, type_info)) = type_info {
FieldCursor::from(field_cursor_str).set_json_value(&mut object, value.unwrap(), type_info, err, &temp_cursor);
}
}
let mut request: api::Channel = json::value::from_value(object).unwrap();
let mut call = self.hub.sites().channels_patch(request, opt.value_of("name").unwrap_or(""));
for parg in opt.values_of("v").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let (key, value) = parse_kv_arg(&*parg, err, false);
match key {
"update-mask" => {
call = call.update_mask( value.map(|v| arg_from_str(v, err, "update-mask", "google-fieldmask")).unwrap_or(FieldMask::default()));
},
_ => {
let mut found = false;
for param in &self.gp {
if key == *param {
found = true;
call = call.param(self.gpm.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset"));
break;
}
}
if !found {
err.issues.push(CLIError::UnknownParameter(key.to_string(),
{let mut v = Vec::new();
v.extend(self.gp.iter().map(|v|*v));
v.extend(["update-mask"].iter().map(|v|*v));
v } ));
}
}
}
}
let protocol = CallType::Standard;
if dry_run {
Ok(())
} else {
assert!(err.issues.len() == 0);
for scope in self.opt.values_of("url").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
call = call.add_scope(scope);
}
let mut ostream = match writer_from_opts(opt.value_of("out")) {
Ok(mut f) => f,
Err(io_err) => return Err(DoitError::IoError(opt.value_of("out").unwrap_or("-").to_string(), io_err)),
};
match match protocol {
CallType::Standard => call.doit().await,
_ => unreachable!()
} {
Err(api_err) => Err(DoitError::ApiError(api_err)),
Ok((mut response, output_schema)) => {
let mut value = json::value::to_value(&output_schema).expect("serde to work");
remove_json_null_values(&mut value);
json::to_writer_pretty(&mut ostream, &value).unwrap();
ostream.flush().unwrap();
Ok(())
}
}
}
}
async fn _sites_channels_releases_create(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
-> Result<(), DoitError> {
let mut field_cursor = FieldCursor::default();
let mut object = json::value::Value::Object(Default::default());
for kvarg in opt.values_of("kv").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let last_errc = err.issues.len();
let (key, value) = parse_kv_arg(&*kvarg, err, false);
let mut temp_cursor = field_cursor.clone();
if let Err(field_err) = temp_cursor.set(&*key) {
err.issues.push(field_err);
}
if value.is_none() {
field_cursor = temp_cursor.clone();
if err.issues.len() > last_errc {
err.issues.remove(last_errc);
}
continue;
}
let type_info: Option<(&'static str, JsonTypeInfo)> =
match &temp_cursor.to_string()[..] {
"message" => Some(("message", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"name" => Some(("name", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release-time" => Some(("releaseTime", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release-user.email" => Some(("releaseUser.email", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release-user.image-url" => Some(("releaseUser.imageUrl", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"type" => Some(("type", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"version.config.app-association" => Some(("version.config.appAssociation", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"version.config.clean-urls" => Some(("version.config.cleanUrls", JsonTypeInfo { jtype: JsonType::Boolean, ctype: ComplexType::Pod })),
"version.config.i18n.root" => Some(("version.config.i18n.root", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"version.config.trailing-slash-behavior" => Some(("version.config.trailingSlashBehavior", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"version.create-time" => Some(("version.createTime", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"version.create-user.email" => Some(("version.createUser.email", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"version.create-user.image-url" => Some(("version.createUser.imageUrl", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"version.delete-time" => Some(("version.deleteTime", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"version.delete-user.email" => Some(("version.deleteUser.email", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"version.delete-user.image-url" => Some(("version.deleteUser.imageUrl", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"version.file-count" => Some(("version.fileCount", JsonTypeInfo { jtype: JsonType::Int, ctype: ComplexType::Pod })),
"version.finalize-time" => Some(("version.finalizeTime", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"version.finalize-user.email" => Some(("version.finalizeUser.email", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"version.finalize-user.image-url" => Some(("version.finalizeUser.imageUrl", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"version.labels" => Some(("version.labels", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Map })),
"version.name" => Some(("version.name", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"version.status" => Some(("version.status", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"version.version-bytes" => Some(("version.versionBytes", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
_ => {
let suggestion = FieldCursor::did_you_mean(key, &vec!["app-association", "clean-urls", "config", "create-time", "create-user", "delete-time", "delete-user", "email", "file-count", "finalize-time", "finalize-user", "i18n", "image-url", "labels", "message", "name", "release-time", "release-user", "root", "status", "trailing-slash-behavior", "type", "version", "version-bytes"]);
err.issues.push(CLIError::Field(FieldError::Unknown(temp_cursor.to_string(), suggestion, value.map(|v| v.to_string()))));
None
}
};
if let Some((field_cursor_str, type_info)) = type_info {
FieldCursor::from(field_cursor_str).set_json_value(&mut object, value.unwrap(), type_info, err, &temp_cursor);
}
}
let mut request: api::Release = json::value::from_value(object).unwrap();
let mut call = self.hub.sites().channels_releases_create(request, opt.value_of("parent").unwrap_or(""));
for parg in opt.values_of("v").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let (key, value) = parse_kv_arg(&*parg, err, false);
match key {
"version-name" => {
call = call.version_name(value.unwrap_or(""));
},
_ => {
let mut found = false;
for param in &self.gp {
if key == *param {
found = true;
call = call.param(self.gpm.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset"));
break;
}
}
if !found {
err.issues.push(CLIError::UnknownParameter(key.to_string(),
{let mut v = Vec::new();
v.extend(self.gp.iter().map(|v|*v));
v.extend(["version-name"].iter().map(|v|*v));
v } ));
}
}
}
}
let protocol = CallType::Standard;
if dry_run {
Ok(())
} else {
assert!(err.issues.len() == 0);
for scope in self.opt.values_of("url").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
call = call.add_scope(scope);
}
let mut ostream = match writer_from_opts(opt.value_of("out")) {
Ok(mut f) => f,
Err(io_err) => return Err(DoitError::IoError(opt.value_of("out").unwrap_or("-").to_string(), io_err)),
};
match match protocol {
CallType::Standard => call.doit().await,
_ => unreachable!()
} {
Err(api_err) => Err(DoitError::ApiError(api_err)),
Ok((mut response, output_schema)) => {
let mut value = json::value::to_value(&output_schema).expect("serde to work");
remove_json_null_values(&mut value);
json::to_writer_pretty(&mut ostream, &value).unwrap();
ostream.flush().unwrap();
Ok(())
}
}
}
}
async fn _sites_channels_releases_list(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
-> Result<(), DoitError> {
let mut call = self.hub.sites().channels_releases_list(opt.value_of("parent").unwrap_or(""));
for parg in opt.values_of("v").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let (key, value) = parse_kv_arg(&*parg, err, false);
match key {
"page-token" => {
call = call.page_token(value.unwrap_or(""));
},
"page-size" => {
call = call.page_size( value.map(|v| arg_from_str(v, err, "page-size", "int32")).unwrap_or(-0));
},
_ => {
let mut found = false;
for param in &self.gp {
if key == *param {
found = true;
call = call.param(self.gpm.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset"));
break;
}
}
if !found {
err.issues.push(CLIError::UnknownParameter(key.to_string(),
{let mut v = Vec::new();
v.extend(self.gp.iter().map(|v|*v));
v.extend(["page-size", "page-token"].iter().map(|v|*v));
v } ));
}
}
}
}
let protocol = CallType::Standard;
if dry_run {
Ok(())
} else {
assert!(err.issues.len() == 0);
for scope in self.opt.values_of("url").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
call = call.add_scope(scope);
}
let mut ostream = match writer_from_opts(opt.value_of("out")) {
Ok(mut f) => f,
Err(io_err) => return Err(DoitError::IoError(opt.value_of("out").unwrap_or("-").to_string(), io_err)),
};
match match protocol {
CallType::Standard => call.doit().await,
_ => unreachable!()
} {
Err(api_err) => Err(DoitError::ApiError(api_err)),
Ok((mut response, output_schema)) => {
let mut value = json::value::to_value(&output_schema).expect("serde to work");
remove_json_null_values(&mut value);
json::to_writer_pretty(&mut ostream, &value).unwrap();
ostream.flush().unwrap();
Ok(())
}
}
}
}
async fn _sites_domains_create(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
-> Result<(), DoitError> {
let mut field_cursor = FieldCursor::default();
let mut object = json::value::Value::Object(Default::default());
for kvarg in opt.values_of("kv").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let last_errc = err.issues.len();
let (key, value) = parse_kv_arg(&*kvarg, err, false);
let mut temp_cursor = field_cursor.clone();
if let Err(field_err) = temp_cursor.set(&*key) {
err.issues.push(field_err);
}
if value.is_none() {
field_cursor = temp_cursor.clone();
if err.issues.len() > last_errc {
err.issues.remove(last_errc);
}
continue;
}
let type_info: Option<(&'static str, JsonTypeInfo)> =
match &temp_cursor.to_string()[..] {
"domain-name" => Some(("domainName", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"domain-redirect.domain-name" => Some(("domainRedirect.domainName", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"domain-redirect.type" => Some(("domainRedirect.type", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"provisioning.cert-challenge-discovered-txt" => Some(("provisioning.certChallengeDiscoveredTxt", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Vec })),
"provisioning.cert-challenge-dns.domain-name" => Some(("provisioning.certChallengeDns.domainName", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"provisioning.cert-challenge-dns.token" => Some(("provisioning.certChallengeDns.token", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"provisioning.cert-challenge-http.path" => Some(("provisioning.certChallengeHttp.path", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"provisioning.cert-challenge-http.token" => Some(("provisioning.certChallengeHttp.token", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"provisioning.cert-status" => Some(("provisioning.certStatus", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"provisioning.discovered-ips" => Some(("provisioning.discoveredIps", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Vec })),
"provisioning.dns-fetch-time" => Some(("provisioning.dnsFetchTime", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"provisioning.dns-status" => Some(("provisioning.dnsStatus", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"provisioning.expected-ips" => Some(("provisioning.expectedIps", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Vec })),
"site" => Some(("site", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"status" => Some(("status", 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!["cert-challenge-discovered-txt", "cert-challenge-dns", "cert-challenge-http", "cert-status", "discovered-ips", "dns-fetch-time", "dns-status", "domain-name", "domain-redirect", "expected-ips", "path", "provisioning", "site", "status", "token", "type", "update-time"]);
err.issues.push(CLIError::Field(FieldError::Unknown(temp_cursor.to_string(), suggestion, value.map(|v| v.to_string()))));
None
}
};
if let Some((field_cursor_str, type_info)) = type_info {
FieldCursor::from(field_cursor_str).set_json_value(&mut object, value.unwrap(), type_info, err, &temp_cursor);
}
}
let mut request: api::Domain = json::value::from_value(object).unwrap();
let mut call = self.hub.sites().domains_create(request, opt.value_of("parent").unwrap_or(""));
for parg in opt.values_of("v").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let (key, value) = parse_kv_arg(&*parg, err, false);
match key {
_ => {
let mut found = false;
for param in &self.gp {
if key == *param {
found = true;
call = call.param(self.gpm.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset"));
break;
}
}
if !found {
err.issues.push(CLIError::UnknownParameter(key.to_string(),
{let mut v = Vec::new();
v.extend(self.gp.iter().map(|v|*v));
v } ));
}
}
}
}
let protocol = CallType::Standard;
if dry_run {
Ok(())
} else {
assert!(err.issues.len() == 0);
for scope in self.opt.values_of("url").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
call = call.add_scope(scope);
}
let mut ostream = match writer_from_opts(opt.value_of("out")) {
Ok(mut f) => f,
Err(io_err) => return Err(DoitError::IoError(opt.value_of("out").unwrap_or("-").to_string(), io_err)),
};
match match protocol {
CallType::Standard => call.doit().await,
_ => unreachable!()
} {
Err(api_err) => Err(DoitError::ApiError(api_err)),
Ok((mut response, output_schema)) => {
let mut value = json::value::to_value(&output_schema).expect("serde to work");
remove_json_null_values(&mut value);
json::to_writer_pretty(&mut ostream, &value).unwrap();
ostream.flush().unwrap();
Ok(())
}
}
}
}
async fn _sites_domains_delete(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
-> Result<(), DoitError> {
let mut call = self.hub.sites().domains_delete(opt.value_of("name").unwrap_or(""));
for parg in opt.values_of("v").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let (key, value) = parse_kv_arg(&*parg, err, false);
match key {
_ => {
let mut found = false;
for param in &self.gp {
if key == *param {
found = true;
call = call.param(self.gpm.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset"));
break;
}
}
if !found {
err.issues.push(CLIError::UnknownParameter(key.to_string(),
{let mut v = Vec::new();
v.extend(self.gp.iter().map(|v|*v));
v } ));
}
}
}
}
let protocol = CallType::Standard;
if dry_run {
Ok(())
} else {
assert!(err.issues.len() == 0);
for scope in self.opt.values_of("url").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
call = call.add_scope(scope);
}
let mut ostream = match writer_from_opts(opt.value_of("out")) {
Ok(mut f) => f,
Err(io_err) => return Err(DoitError::IoError(opt.value_of("out").unwrap_or("-").to_string(), io_err)),
};
match match protocol {
CallType::Standard => call.doit().await,
_ => unreachable!()
} {
Err(api_err) => Err(DoitError::ApiError(api_err)),
Ok((mut response, output_schema)) => {
let mut value = json::value::to_value(&output_schema).expect("serde to work");
remove_json_null_values(&mut value);
json::to_writer_pretty(&mut ostream, &value).unwrap();
ostream.flush().unwrap();
Ok(())
}
}
}
}
async fn _sites_domains_get(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
-> Result<(), DoitError> {
let mut call = self.hub.sites().domains_get(opt.value_of("name").unwrap_or(""));
for parg in opt.values_of("v").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let (key, value) = parse_kv_arg(&*parg, err, false);
match key {
_ => {
let mut found = false;
for param in &self.gp {
if key == *param {
found = true;
call = call.param(self.gpm.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset"));
break;
}
}
if !found {
err.issues.push(CLIError::UnknownParameter(key.to_string(),
{let mut v = Vec::new();
v.extend(self.gp.iter().map(|v|*v));
v } ));
}
}
}
}
let protocol = CallType::Standard;
if dry_run {
Ok(())
} else {
assert!(err.issues.len() == 0);
for scope in self.opt.values_of("url").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
call = call.add_scope(scope);
}
let mut ostream = match writer_from_opts(opt.value_of("out")) {
Ok(mut f) => f,
Err(io_err) => return Err(DoitError::IoError(opt.value_of("out").unwrap_or("-").to_string(), io_err)),
};
match match protocol {
CallType::Standard => call.doit().await,
_ => unreachable!()
} {
Err(api_err) => Err(DoitError::ApiError(api_err)),
Ok((mut response, output_schema)) => {
let mut value = json::value::to_value(&output_schema).expect("serde to work");
remove_json_null_values(&mut value);
json::to_writer_pretty(&mut ostream, &value).unwrap();
ostream.flush().unwrap();
Ok(())
}
}
}
}
async fn _sites_domains_list(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
-> Result<(), DoitError> {
let mut call = self.hub.sites().domains_list(opt.value_of("parent").unwrap_or(""));
for parg in opt.values_of("v").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let (key, value) = parse_kv_arg(&*parg, err, false);
match key {
"page-token" => {
call = call.page_token(value.unwrap_or(""));
},
"page-size" => {
call = call.page_size( value.map(|v| arg_from_str(v, err, "page-size", "int32")).unwrap_or(-0));
},
_ => {
let mut found = false;
for param in &self.gp {
if key == *param {
found = true;
call = call.param(self.gpm.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset"));
break;
}
}
if !found {
err.issues.push(CLIError::UnknownParameter(key.to_string(),
{let mut v = Vec::new();
v.extend(self.gp.iter().map(|v|*v));
v.extend(["page-size", "page-token"].iter().map(|v|*v));
v } ));
}
}
}
}
let protocol = CallType::Standard;
if dry_run {
Ok(())
} else {
assert!(err.issues.len() == 0);
for scope in self.opt.values_of("url").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
call = call.add_scope(scope);
}
let mut ostream = match writer_from_opts(opt.value_of("out")) {
Ok(mut f) => f,
Err(io_err) => return Err(DoitError::IoError(opt.value_of("out").unwrap_or("-").to_string(), io_err)),
};
match match protocol {
CallType::Standard => call.doit().await,
_ => unreachable!()
} {
Err(api_err) => Err(DoitError::ApiError(api_err)),
Ok((mut response, output_schema)) => {
let mut value = json::value::to_value(&output_schema).expect("serde to work");
remove_json_null_values(&mut value);
json::to_writer_pretty(&mut ostream, &value).unwrap();
ostream.flush().unwrap();
Ok(())
}
}
}
}
async fn _sites_domains_update(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
-> Result<(), DoitError> {
let mut field_cursor = FieldCursor::default();
let mut object = json::value::Value::Object(Default::default());
for kvarg in opt.values_of("kv").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let last_errc = err.issues.len();
let (key, value) = parse_kv_arg(&*kvarg, err, false);
let mut temp_cursor = field_cursor.clone();
if let Err(field_err) = temp_cursor.set(&*key) {
err.issues.push(field_err);
}
if value.is_none() {
field_cursor = temp_cursor.clone();
if err.issues.len() > last_errc {
err.issues.remove(last_errc);
}
continue;
}
let type_info: Option<(&'static str, JsonTypeInfo)> =
match &temp_cursor.to_string()[..] {
"domain-name" => Some(("domainName", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"domain-redirect.domain-name" => Some(("domainRedirect.domainName", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"domain-redirect.type" => Some(("domainRedirect.type", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"provisioning.cert-challenge-discovered-txt" => Some(("provisioning.certChallengeDiscoveredTxt", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Vec })),
"provisioning.cert-challenge-dns.domain-name" => Some(("provisioning.certChallengeDns.domainName", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"provisioning.cert-challenge-dns.token" => Some(("provisioning.certChallengeDns.token", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"provisioning.cert-challenge-http.path" => Some(("provisioning.certChallengeHttp.path", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"provisioning.cert-challenge-http.token" => Some(("provisioning.certChallengeHttp.token", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"provisioning.cert-status" => Some(("provisioning.certStatus", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"provisioning.discovered-ips" => Some(("provisioning.discoveredIps", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Vec })),
"provisioning.dns-fetch-time" => Some(("provisioning.dnsFetchTime", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"provisioning.dns-status" => Some(("provisioning.dnsStatus", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"provisioning.expected-ips" => Some(("provisioning.expectedIps", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Vec })),
"site" => Some(("site", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"status" => Some(("status", 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!["cert-challenge-discovered-txt", "cert-challenge-dns", "cert-challenge-http", "cert-status", "discovered-ips", "dns-fetch-time", "dns-status", "domain-name", "domain-redirect", "expected-ips", "path", "provisioning", "site", "status", "token", "type", "update-time"]);
err.issues.push(CLIError::Field(FieldError::Unknown(temp_cursor.to_string(), suggestion, value.map(|v| v.to_string()))));
None
}
};
if let Some((field_cursor_str, type_info)) = type_info {
FieldCursor::from(field_cursor_str).set_json_value(&mut object, value.unwrap(), type_info, err, &temp_cursor);
}
}
let mut request: api::Domain = json::value::from_value(object).unwrap();
let mut call = self.hub.sites().domains_update(request, opt.value_of("name").unwrap_or(""));
for parg in opt.values_of("v").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let (key, value) = parse_kv_arg(&*parg, err, false);
match key {
_ => {
let mut found = false;
for param in &self.gp {
if key == *param {
found = true;
call = call.param(self.gpm.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset"));
break;
}
}
if !found {
err.issues.push(CLIError::UnknownParameter(key.to_string(),
{let mut v = Vec::new();
v.extend(self.gp.iter().map(|v|*v));
v } ));
}
}
}
}
let protocol = CallType::Standard;
if dry_run {
Ok(())
} else {
assert!(err.issues.len() == 0);
for scope in self.opt.values_of("url").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
call = call.add_scope(scope);
}
let mut ostream = match writer_from_opts(opt.value_of("out")) {
Ok(mut f) => f,
Err(io_err) => return Err(DoitError::IoError(opt.value_of("out").unwrap_or("-").to_string(), io_err)),
};
match match protocol {
CallType::Standard => call.doit().await,
_ => unreachable!()
} {
Err(api_err) => Err(DoitError::ApiError(api_err)),
Ok((mut response, output_schema)) => {
let mut value = json::value::to_value(&output_schema).expect("serde to work");
remove_json_null_values(&mut value);
json::to_writer_pretty(&mut ostream, &value).unwrap();
ostream.flush().unwrap();
Ok(())
}
}
}
}
async fn _sites_get_config(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
-> Result<(), DoitError> {
let mut call = self.hub.sites().get_config(opt.value_of("name").unwrap_or(""));
for parg in opt.values_of("v").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let (key, value) = parse_kv_arg(&*parg, err, false);
match key {
_ => {
let mut found = false;
for param in &self.gp {
if key == *param {
found = true;
call = call.param(self.gpm.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset"));
break;
}
}
if !found {
err.issues.push(CLIError::UnknownParameter(key.to_string(),
{let mut v = Vec::new();
v.extend(self.gp.iter().map(|v|*v));
v } ));
}
}
}
}
let protocol = CallType::Standard;
if dry_run {
Ok(())
} else {
assert!(err.issues.len() == 0);
for scope in self.opt.values_of("url").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
call = call.add_scope(scope);
}
let mut ostream = match writer_from_opts(opt.value_of("out")) {
Ok(mut f) => f,
Err(io_err) => return Err(DoitError::IoError(opt.value_of("out").unwrap_or("-").to_string(), io_err)),
};
match match protocol {
CallType::Standard => call.doit().await,
_ => unreachable!()
} {
Err(api_err) => Err(DoitError::ApiError(api_err)),
Ok((mut response, output_schema)) => {
let mut value = json::value::to_value(&output_schema).expect("serde to work");
remove_json_null_values(&mut value);
json::to_writer_pretty(&mut ostream, &value).unwrap();
ostream.flush().unwrap();
Ok(())
}
}
}
}
async fn _sites_releases_create(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
-> Result<(), DoitError> {
let mut field_cursor = FieldCursor::default();
let mut object = json::value::Value::Object(Default::default());
for kvarg in opt.values_of("kv").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let last_errc = err.issues.len();
let (key, value) = parse_kv_arg(&*kvarg, err, false);
let mut temp_cursor = field_cursor.clone();
if let Err(field_err) = temp_cursor.set(&*key) {
err.issues.push(field_err);
}
if value.is_none() {
field_cursor = temp_cursor.clone();
if err.issues.len() > last_errc {
err.issues.remove(last_errc);
}
continue;
}
let type_info: Option<(&'static str, JsonTypeInfo)> =
match &temp_cursor.to_string()[..] {
"message" => Some(("message", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"name" => Some(("name", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release-time" => Some(("releaseTime", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release-user.email" => Some(("releaseUser.email", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"release-user.image-url" => Some(("releaseUser.imageUrl", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"type" => Some(("type", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"version.config.app-association" => Some(("version.config.appAssociation", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"version.config.clean-urls" => Some(("version.config.cleanUrls", JsonTypeInfo { jtype: JsonType::Boolean, ctype: ComplexType::Pod })),
"version.config.i18n.root" => Some(("version.config.i18n.root", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"version.config.trailing-slash-behavior" => Some(("version.config.trailingSlashBehavior", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"version.create-time" => Some(("version.createTime", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"version.create-user.email" => Some(("version.createUser.email", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"version.create-user.image-url" => Some(("version.createUser.imageUrl", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"version.delete-time" => Some(("version.deleteTime", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"version.delete-user.email" => Some(("version.deleteUser.email", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"version.delete-user.image-url" => Some(("version.deleteUser.imageUrl", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"version.file-count" => Some(("version.fileCount", JsonTypeInfo { jtype: JsonType::Int, ctype: ComplexType::Pod })),
"version.finalize-time" => Some(("version.finalizeTime", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"version.finalize-user.email" => Some(("version.finalizeUser.email", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"version.finalize-user.image-url" => Some(("version.finalizeUser.imageUrl", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"version.labels" => Some(("version.labels", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Map })),
"version.name" => Some(("version.name", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"version.status" => Some(("version.status", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"version.version-bytes" => Some(("version.versionBytes", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
_ => {
let suggestion = FieldCursor::did_you_mean(key, &vec!["app-association", "clean-urls", "config", "create-time", "create-user", "delete-time", "delete-user", "email", "file-count", "finalize-time", "finalize-user", "i18n", "image-url", "labels", "message", "name", "release-time", "release-user", "root", "status", "trailing-slash-behavior", "type", "version", "version-bytes"]);
err.issues.push(CLIError::Field(FieldError::Unknown(temp_cursor.to_string(), suggestion, value.map(|v| v.to_string()))));
None
}
};
if let Some((field_cursor_str, type_info)) = type_info {
FieldCursor::from(field_cursor_str).set_json_value(&mut object, value.unwrap(), type_info, err, &temp_cursor);
}
}
let mut request: api::Release = json::value::from_value(object).unwrap();
let mut call = self.hub.sites().releases_create(request, opt.value_of("parent").unwrap_or(""));
for parg in opt.values_of("v").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let (key, value) = parse_kv_arg(&*parg, err, false);
match key {
"version-name" => {
call = call.version_name(value.unwrap_or(""));
},
_ => {
let mut found = false;
for param in &self.gp {
if key == *param {
found = true;
call = call.param(self.gpm.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset"));
break;
}
}
if !found {
err.issues.push(CLIError::UnknownParameter(key.to_string(),
{let mut v = Vec::new();
v.extend(self.gp.iter().map(|v|*v));
v.extend(["version-name"].iter().map(|v|*v));
v } ));
}
}
}
}
let protocol = CallType::Standard;
if dry_run {
Ok(())
} else {
assert!(err.issues.len() == 0);
for scope in self.opt.values_of("url").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
call = call.add_scope(scope);
}
let mut ostream = match writer_from_opts(opt.value_of("out")) {
Ok(mut f) => f,
Err(io_err) => return Err(DoitError::IoError(opt.value_of("out").unwrap_or("-").to_string(), io_err)),
};
match match protocol {
CallType::Standard => call.doit().await,
_ => unreachable!()
} {
Err(api_err) => Err(DoitError::ApiError(api_err)),
Ok((mut response, output_schema)) => {
let mut value = json::value::to_value(&output_schema).expect("serde to work");
remove_json_null_values(&mut value);
json::to_writer_pretty(&mut ostream, &value).unwrap();
ostream.flush().unwrap();
Ok(())
}
}
}
}
async fn _sites_releases_list(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
-> Result<(), DoitError> {
let mut call = self.hub.sites().releases_list(opt.value_of("parent").unwrap_or(""));
for parg in opt.values_of("v").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let (key, value) = parse_kv_arg(&*parg, err, false);
match key {
"page-token" => {
call = call.page_token(value.unwrap_or(""));
},
"page-size" => {
call = call.page_size( value.map(|v| arg_from_str(v, err, "page-size", "int32")).unwrap_or(-0));
},
_ => {
let mut found = false;
for param in &self.gp {
if key == *param {
found = true;
call = call.param(self.gpm.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset"));
break;
}
}
if !found {
err.issues.push(CLIError::UnknownParameter(key.to_string(),
{let mut v = Vec::new();
v.extend(self.gp.iter().map(|v|*v));
v.extend(["page-size", "page-token"].iter().map(|v|*v));
v } ));
}
}
}
}
let protocol = CallType::Standard;
if dry_run {
Ok(())
} else {
assert!(err.issues.len() == 0);
for scope in self.opt.values_of("url").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
call = call.add_scope(scope);
}
let mut ostream = match writer_from_opts(opt.value_of("out")) {
Ok(mut f) => f,
Err(io_err) => return Err(DoitError::IoError(opt.value_of("out").unwrap_or("-").to_string(), io_err)),
};
match match protocol {
CallType::Standard => call.doit().await,
_ => unreachable!()
} {
Err(api_err) => Err(DoitError::ApiError(api_err)),
Ok((mut response, output_schema)) => {
let mut value = json::value::to_value(&output_schema).expect("serde to work");
remove_json_null_values(&mut value);
json::to_writer_pretty(&mut ostream, &value).unwrap();
ostream.flush().unwrap();
Ok(())
}
}
}
}
async fn _sites_update_config(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
-> Result<(), DoitError> {
let mut field_cursor = FieldCursor::default();
let mut object = json::value::Value::Object(Default::default());
for kvarg in opt.values_of("kv").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let last_errc = err.issues.len();
let (key, value) = parse_kv_arg(&*kvarg, err, false);
let mut temp_cursor = field_cursor.clone();
if let Err(field_err) = temp_cursor.set(&*key) {
err.issues.push(field_err);
}
if value.is_none() {
field_cursor = temp_cursor.clone();
if err.issues.len() > last_errc {
err.issues.remove(last_errc);
}
continue;
}
let type_info: Option<(&'static str, JsonTypeInfo)> =
match &temp_cursor.to_string()[..] {
"cloud-logging-enabled" => Some(("cloudLoggingEnabled", JsonTypeInfo { jtype: JsonType::Boolean, ctype: ComplexType::Pod })),
"max-versions" => Some(("maxVersions", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
_ => {
let suggestion = FieldCursor::did_you_mean(key, &vec!["cloud-logging-enabled", "max-versions"]);
err.issues.push(CLIError::Field(FieldError::Unknown(temp_cursor.to_string(), suggestion, value.map(|v| v.to_string()))));
None
}
};
if let Some((field_cursor_str, type_info)) = type_info {
FieldCursor::from(field_cursor_str).set_json_value(&mut object, value.unwrap(), type_info, err, &temp_cursor);
}
}
let mut request: api::SiteConfig = json::value::from_value(object).unwrap();
let mut call = self.hub.sites().update_config(request, opt.value_of("name").unwrap_or(""));
for parg in opt.values_of("v").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let (key, value) = parse_kv_arg(&*parg, err, false);
match key {
"update-mask" => {
call = call.update_mask( value.map(|v| arg_from_str(v, err, "update-mask", "google-fieldmask")).unwrap_or(FieldMask::default()));
},
_ => {
let mut found = false;
for param in &self.gp {
if key == *param {
found = true;
call = call.param(self.gpm.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset"));
break;
}
}
if !found {
err.issues.push(CLIError::UnknownParameter(key.to_string(),
{let mut v = Vec::new();
v.extend(self.gp.iter().map(|v|*v));
v.extend(["update-mask"].iter().map(|v|*v));
v } ));
}
}
}
}
let protocol = CallType::Standard;
if dry_run {
Ok(())
} else {
assert!(err.issues.len() == 0);
for scope in self.opt.values_of("url").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
call = call.add_scope(scope);
}
let mut ostream = match writer_from_opts(opt.value_of("out")) {
Ok(mut f) => f,
Err(io_err) => return Err(DoitError::IoError(opt.value_of("out").unwrap_or("-").to_string(), io_err)),
};
match match protocol {
CallType::Standard => call.doit().await,
_ => unreachable!()
} {
Err(api_err) => Err(DoitError::ApiError(api_err)),
Ok((mut response, output_schema)) => {
let mut value = json::value::to_value(&output_schema).expect("serde to work");
remove_json_null_values(&mut value);
json::to_writer_pretty(&mut ostream, &value).unwrap();
ostream.flush().unwrap();
Ok(())
}
}
}
}
async fn _sites_versions_clone(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
-> Result<(), DoitError> {
let mut field_cursor = FieldCursor::default();
let mut object = json::value::Value::Object(Default::default());
for kvarg in opt.values_of("kv").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let last_errc = err.issues.len();
let (key, value) = parse_kv_arg(&*kvarg, err, false);
let mut temp_cursor = field_cursor.clone();
if let Err(field_err) = temp_cursor.set(&*key) {
err.issues.push(field_err);
}
if value.is_none() {
field_cursor = temp_cursor.clone();
if err.issues.len() > last_errc {
err.issues.remove(last_errc);
}
continue;
}
let type_info: Option<(&'static str, JsonTypeInfo)> =
match &temp_cursor.to_string()[..] {
"exclude.regexes" => Some(("exclude.regexes", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Vec })),
"finalize" => Some(("finalize", JsonTypeInfo { jtype: JsonType::Boolean, ctype: ComplexType::Pod })),
"include.regexes" => Some(("include.regexes", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Vec })),
"source-version" => Some(("sourceVersion", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
_ => {
let suggestion = FieldCursor::did_you_mean(key, &vec!["exclude", "finalize", "include", "regexes", "source-version"]);
err.issues.push(CLIError::Field(FieldError::Unknown(temp_cursor.to_string(), suggestion, value.map(|v| v.to_string()))));
None
}
};
if let Some((field_cursor_str, type_info)) = type_info {
FieldCursor::from(field_cursor_str).set_json_value(&mut object, value.unwrap(), type_info, err, &temp_cursor);
}
}
let mut request: api::CloneVersionRequest = json::value::from_value(object).unwrap();
let mut call = self.hub.sites().versions_clone(request, opt.value_of("parent").unwrap_or(""));
for parg in opt.values_of("v").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let (key, value) = parse_kv_arg(&*parg, err, false);
match key {
_ => {
let mut found = false;
for param in &self.gp {
if key == *param {
found = true;
call = call.param(self.gpm.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset"));
break;
}
}
if !found {
err.issues.push(CLIError::UnknownParameter(key.to_string(),
{let mut v = Vec::new();
v.extend(self.gp.iter().map(|v|*v));
v } ));
}
}
}
}
let protocol = CallType::Standard;
if dry_run {
Ok(())
} else {
assert!(err.issues.len() == 0);
for scope in self.opt.values_of("url").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
call = call.add_scope(scope);
}
let mut ostream = match writer_from_opts(opt.value_of("out")) {
Ok(mut f) => f,
Err(io_err) => return Err(DoitError::IoError(opt.value_of("out").unwrap_or("-").to_string(), io_err)),
};
match match protocol {
CallType::Standard => call.doit().await,
_ => unreachable!()
} {
Err(api_err) => Err(DoitError::ApiError(api_err)),
Ok((mut response, output_schema)) => {
let mut value = json::value::to_value(&output_schema).expect("serde to work");
remove_json_null_values(&mut value);
json::to_writer_pretty(&mut ostream, &value).unwrap();
ostream.flush().unwrap();
Ok(())
}
}
}
}
async fn _sites_versions_create(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
-> Result<(), DoitError> {
let mut field_cursor = FieldCursor::default();
let mut object = json::value::Value::Object(Default::default());
for kvarg in opt.values_of("kv").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let last_errc = err.issues.len();
let (key, value) = parse_kv_arg(&*kvarg, err, false);
let mut temp_cursor = field_cursor.clone();
if let Err(field_err) = temp_cursor.set(&*key) {
err.issues.push(field_err);
}
if value.is_none() {
field_cursor = temp_cursor.clone();
if err.issues.len() > last_errc {
err.issues.remove(last_errc);
}
continue;
}
let type_info: Option<(&'static str, JsonTypeInfo)> =
match &temp_cursor.to_string()[..] {
"config.app-association" => Some(("config.appAssociation", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"config.clean-urls" => Some(("config.cleanUrls", JsonTypeInfo { jtype: JsonType::Boolean, ctype: ComplexType::Pod })),
"config.i18n.root" => Some(("config.i18n.root", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"config.trailing-slash-behavior" => Some(("config.trailingSlashBehavior", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"create-time" => Some(("createTime", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"create-user.email" => Some(("createUser.email", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"create-user.image-url" => Some(("createUser.imageUrl", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"delete-time" => Some(("deleteTime", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"delete-user.email" => Some(("deleteUser.email", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"delete-user.image-url" => Some(("deleteUser.imageUrl", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"file-count" => Some(("fileCount", JsonTypeInfo { jtype: JsonType::Int, ctype: ComplexType::Pod })),
"finalize-time" => Some(("finalizeTime", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"finalize-user.email" => Some(("finalizeUser.email", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"finalize-user.image-url" => Some(("finalizeUser.imageUrl", 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 })),
"status" => Some(("status", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"version-bytes" => Some(("versionBytes", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
_ => {
let suggestion = FieldCursor::did_you_mean(key, &vec!["app-association", "clean-urls", "config", "create-time", "create-user", "delete-time", "delete-user", "email", "file-count", "finalize-time", "finalize-user", "i18n", "image-url", "labels", "name", "root", "status", "trailing-slash-behavior", "version-bytes"]);
err.issues.push(CLIError::Field(FieldError::Unknown(temp_cursor.to_string(), suggestion, value.map(|v| v.to_string()))));
None
}
};
if let Some((field_cursor_str, type_info)) = type_info {
FieldCursor::from(field_cursor_str).set_json_value(&mut object, value.unwrap(), type_info, err, &temp_cursor);
}
}
let mut request: api::Version = json::value::from_value(object).unwrap();
let mut call = self.hub.sites().versions_create(request, opt.value_of("parent").unwrap_or(""));
for parg in opt.values_of("v").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let (key, value) = parse_kv_arg(&*parg, err, false);
match key {
"version-id" => {
call = call.version_id(value.unwrap_or(""));
},
"size-bytes" => {
call = call.size_bytes( value.map(|v| arg_from_str(v, err, "size-bytes", "int64")).unwrap_or(-0));
},
_ => {
let mut found = false;
for param in &self.gp {
if key == *param {
found = true;
call = call.param(self.gpm.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset"));
break;
}
}
if !found {
err.issues.push(CLIError::UnknownParameter(key.to_string(),
{let mut v = Vec::new();
v.extend(self.gp.iter().map(|v|*v));
v.extend(["size-bytes", "version-id"].iter().map(|v|*v));
v } ));
}
}
}
}
let protocol = CallType::Standard;
if dry_run {
Ok(())
} else {
assert!(err.issues.len() == 0);
for scope in self.opt.values_of("url").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
call = call.add_scope(scope);
}
let mut ostream = match writer_from_opts(opt.value_of("out")) {
Ok(mut f) => f,
Err(io_err) => return Err(DoitError::IoError(opt.value_of("out").unwrap_or("-").to_string(), io_err)),
};
match match protocol {
CallType::Standard => call.doit().await,
_ => unreachable!()
} {
Err(api_err) => Err(DoitError::ApiError(api_err)),
Ok((mut response, output_schema)) => {
let mut value = json::value::to_value(&output_schema).expect("serde to work");
remove_json_null_values(&mut value);
json::to_writer_pretty(&mut ostream, &value).unwrap();
ostream.flush().unwrap();
Ok(())
}
}
}
}
async fn _sites_versions_delete(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
-> Result<(), DoitError> {
let mut call = self.hub.sites().versions_delete(opt.value_of("name").unwrap_or(""));
for parg in opt.values_of("v").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let (key, value) = parse_kv_arg(&*parg, err, false);
match key {
_ => {
let mut found = false;
for param in &self.gp {
if key == *param {
found = true;
call = call.param(self.gpm.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset"));
break;
}
}
if !found {
err.issues.push(CLIError::UnknownParameter(key.to_string(),
{let mut v = Vec::new();
v.extend(self.gp.iter().map(|v|*v));
v } ));
}
}
}
}
let protocol = CallType::Standard;
if dry_run {
Ok(())
} else {
assert!(err.issues.len() == 0);
for scope in self.opt.values_of("url").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
call = call.add_scope(scope);
}
let mut ostream = match writer_from_opts(opt.value_of("out")) {
Ok(mut f) => f,
Err(io_err) => return Err(DoitError::IoError(opt.value_of("out").unwrap_or("-").to_string(), io_err)),
};
match match protocol {
CallType::Standard => call.doit().await,
_ => unreachable!()
} {
Err(api_err) => Err(DoitError::ApiError(api_err)),
Ok((mut response, output_schema)) => {
let mut value = json::value::to_value(&output_schema).expect("serde to work");
remove_json_null_values(&mut value);
json::to_writer_pretty(&mut ostream, &value).unwrap();
ostream.flush().unwrap();
Ok(())
}
}
}
}
async fn _sites_versions_files_list(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
-> Result<(), DoitError> {
let mut call = self.hub.sites().versions_files_list(opt.value_of("parent").unwrap_or(""));
for parg in opt.values_of("v").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let (key, value) = parse_kv_arg(&*parg, err, false);
match key {
"status" => {
call = call.status(value.unwrap_or(""));
},
"page-token" => {
call = call.page_token(value.unwrap_or(""));
},
"page-size" => {
call = call.page_size( value.map(|v| arg_from_str(v, err, "page-size", "int32")).unwrap_or(-0));
},
_ => {
let mut found = false;
for param in &self.gp {
if key == *param {
found = true;
call = call.param(self.gpm.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset"));
break;
}
}
if !found {
err.issues.push(CLIError::UnknownParameter(key.to_string(),
{let mut v = Vec::new();
v.extend(self.gp.iter().map(|v|*v));
v.extend(["page-size", "page-token", "status"].iter().map(|v|*v));
v } ));
}
}
}
}
let protocol = CallType::Standard;
if dry_run {
Ok(())
} else {
assert!(err.issues.len() == 0);
for scope in self.opt.values_of("url").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
call = call.add_scope(scope);
}
let mut ostream = match writer_from_opts(opt.value_of("out")) {
Ok(mut f) => f,
Err(io_err) => return Err(DoitError::IoError(opt.value_of("out").unwrap_or("-").to_string(), io_err)),
};
match match protocol {
CallType::Standard => call.doit().await,
_ => unreachable!()
} {
Err(api_err) => Err(DoitError::ApiError(api_err)),
Ok((mut response, output_schema)) => {
let mut value = json::value::to_value(&output_schema).expect("serde to work");
remove_json_null_values(&mut value);
json::to_writer_pretty(&mut ostream, &value).unwrap();
ostream.flush().unwrap();
Ok(())
}
}
}
}
async fn _sites_versions_list(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
-> Result<(), DoitError> {
let mut call = self.hub.sites().versions_list(opt.value_of("parent").unwrap_or(""));
for parg in opt.values_of("v").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let (key, value) = parse_kv_arg(&*parg, err, false);
match key {
"page-token" => {
call = call.page_token(value.unwrap_or(""));
},
"page-size" => {
call = call.page_size( value.map(|v| arg_from_str(v, err, "page-size", "int32")).unwrap_or(-0));
},
"filter" => {
call = call.filter(value.unwrap_or(""));
},
_ => {
let mut found = false;
for param in &self.gp {
if key == *param {
found = true;
call = call.param(self.gpm.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset"));
break;
}
}
if !found {
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-size", "page-token"].iter().map(|v|*v));
v } ));
}
}
}
}
let protocol = CallType::Standard;
if dry_run {
Ok(())
} else {
assert!(err.issues.len() == 0);
for scope in self.opt.values_of("url").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
call = call.add_scope(scope);
}
let mut ostream = match writer_from_opts(opt.value_of("out")) {
Ok(mut f) => f,
Err(io_err) => return Err(DoitError::IoError(opt.value_of("out").unwrap_or("-").to_string(), io_err)),
};
match match protocol {
CallType::Standard => call.doit().await,
_ => unreachable!()
} {
Err(api_err) => Err(DoitError::ApiError(api_err)),
Ok((mut response, output_schema)) => {
let mut value = json::value::to_value(&output_schema).expect("serde to work");
remove_json_null_values(&mut value);
json::to_writer_pretty(&mut ostream, &value).unwrap();
ostream.flush().unwrap();
Ok(())
}
}
}
}
async fn _sites_versions_patch(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
-> Result<(), DoitError> {
let mut field_cursor = FieldCursor::default();
let mut object = json::value::Value::Object(Default::default());
for kvarg in opt.values_of("kv").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let last_errc = err.issues.len();
let (key, value) = parse_kv_arg(&*kvarg, err, false);
let mut temp_cursor = field_cursor.clone();
if let Err(field_err) = temp_cursor.set(&*key) {
err.issues.push(field_err);
}
if value.is_none() {
field_cursor = temp_cursor.clone();
if err.issues.len() > last_errc {
err.issues.remove(last_errc);
}
continue;
}
let type_info: Option<(&'static str, JsonTypeInfo)> =
match &temp_cursor.to_string()[..] {
"config.app-association" => Some(("config.appAssociation", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"config.clean-urls" => Some(("config.cleanUrls", JsonTypeInfo { jtype: JsonType::Boolean, ctype: ComplexType::Pod })),
"config.i18n.root" => Some(("config.i18n.root", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"config.trailing-slash-behavior" => Some(("config.trailingSlashBehavior", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"create-time" => Some(("createTime", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"create-user.email" => Some(("createUser.email", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"create-user.image-url" => Some(("createUser.imageUrl", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"delete-time" => Some(("deleteTime", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"delete-user.email" => Some(("deleteUser.email", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"delete-user.image-url" => Some(("deleteUser.imageUrl", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"file-count" => Some(("fileCount", JsonTypeInfo { jtype: JsonType::Int, ctype: ComplexType::Pod })),
"finalize-time" => Some(("finalizeTime", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"finalize-user.email" => Some(("finalizeUser.email", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"finalize-user.image-url" => Some(("finalizeUser.imageUrl", 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 })),
"status" => Some(("status", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
"version-bytes" => Some(("versionBytes", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Pod })),
_ => {
let suggestion = FieldCursor::did_you_mean(key, &vec!["app-association", "clean-urls", "config", "create-time", "create-user", "delete-time", "delete-user", "email", "file-count", "finalize-time", "finalize-user", "i18n", "image-url", "labels", "name", "root", "status", "trailing-slash-behavior", "version-bytes"]);
err.issues.push(CLIError::Field(FieldError::Unknown(temp_cursor.to_string(), suggestion, value.map(|v| v.to_string()))));
None
}
};
if let Some((field_cursor_str, type_info)) = type_info {
FieldCursor::from(field_cursor_str).set_json_value(&mut object, value.unwrap(), type_info, err, &temp_cursor);
}
}
let mut request: api::Version = json::value::from_value(object).unwrap();
let mut call = self.hub.sites().versions_patch(request, opt.value_of("name").unwrap_or(""));
for parg in opt.values_of("v").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let (key, value) = parse_kv_arg(&*parg, err, false);
match key {
"update-mask" => {
call = call.update_mask( value.map(|v| arg_from_str(v, err, "update-mask", "google-fieldmask")).unwrap_or(FieldMask::default()));
},
_ => {
let mut found = false;
for param in &self.gp {
if key == *param {
found = true;
call = call.param(self.gpm.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset"));
break;
}
}
if !found {
err.issues.push(CLIError::UnknownParameter(key.to_string(),
{let mut v = Vec::new();
v.extend(self.gp.iter().map(|v|*v));
v.extend(["update-mask"].iter().map(|v|*v));
v } ));
}
}
}
}
let protocol = CallType::Standard;
if dry_run {
Ok(())
} else {
assert!(err.issues.len() == 0);
for scope in self.opt.values_of("url").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
call = call.add_scope(scope);
}
let mut ostream = match writer_from_opts(opt.value_of("out")) {
Ok(mut f) => f,
Err(io_err) => return Err(DoitError::IoError(opt.value_of("out").unwrap_or("-").to_string(), io_err)),
};
match match protocol {
CallType::Standard => call.doit().await,
_ => unreachable!()
} {
Err(api_err) => Err(DoitError::ApiError(api_err)),
Ok((mut response, output_schema)) => {
let mut value = json::value::to_value(&output_schema).expect("serde to work");
remove_json_null_values(&mut value);
json::to_writer_pretty(&mut ostream, &value).unwrap();
ostream.flush().unwrap();
Ok(())
}
}
}
}
async fn _sites_versions_populate_files(&self, opt: &ArgMatches<'n>, dry_run: bool, err: &mut InvalidOptionsError)
-> Result<(), DoitError> {
let mut field_cursor = FieldCursor::default();
let mut object = json::value::Value::Object(Default::default());
for kvarg in opt.values_of("kv").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let last_errc = err.issues.len();
let (key, value) = parse_kv_arg(&*kvarg, err, false);
let mut temp_cursor = field_cursor.clone();
if let Err(field_err) = temp_cursor.set(&*key) {
err.issues.push(field_err);
}
if value.is_none() {
field_cursor = temp_cursor.clone();
if err.issues.len() > last_errc {
err.issues.remove(last_errc);
}
continue;
}
let type_info: Option<(&'static str, JsonTypeInfo)> =
match &temp_cursor.to_string()[..] {
"files" => Some(("files", JsonTypeInfo { jtype: JsonType::String, ctype: ComplexType::Map })),
_ => {
let suggestion = FieldCursor::did_you_mean(key, &vec!["files"]);
err.issues.push(CLIError::Field(FieldError::Unknown(temp_cursor.to_string(), suggestion, value.map(|v| v.to_string()))));
None
}
};
if let Some((field_cursor_str, type_info)) = type_info {
FieldCursor::from(field_cursor_str).set_json_value(&mut object, value.unwrap(), type_info, err, &temp_cursor);
}
}
let mut request: api::PopulateVersionFilesRequest = json::value::from_value(object).unwrap();
let mut call = self.hub.sites().versions_populate_files(request, opt.value_of("parent").unwrap_or(""));
for parg in opt.values_of("v").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
let (key, value) = parse_kv_arg(&*parg, err, false);
match key {
_ => {
let mut found = false;
for param in &self.gp {
if key == *param {
found = true;
call = call.param(self.gpm.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset"));
break;
}
}
if !found {
err.issues.push(CLIError::UnknownParameter(key.to_string(),
{let mut v = Vec::new();
v.extend(self.gp.iter().map(|v|*v));
v } ));
}
}
}
}
let protocol = CallType::Standard;
if dry_run {
Ok(())
} else {
assert!(err.issues.len() == 0);
for scope in self.opt.values_of("url").map(|i|i.collect()).unwrap_or(Vec::new()).iter() {
call = call.add_scope(scope);
}
let mut ostream = match writer_from_opts(opt.value_of("out")) {
Ok(mut f) => f,
Err(io_err) => return Err(DoitError::IoError(opt.value_of("out").unwrap_or("-").to_string(), io_err)),
};
match match protocol {
CallType::Standard => call.doit().await,
_ => unreachable!()
} {
Err(api_err) => Err(DoitError::ApiError(api_err)),
Ok((mut response, output_schema)) => {
let mut value = json::value::to_value(&output_schema).expect("serde to work");
remove_json_null_values(&mut value);
json::to_writer_pretty(&mut ostream, &value).unwrap();
ostream.flush().unwrap();
Ok(())
}
}
}
}
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;
match self.opt.subcommand() {
("projects", Some(opt)) => {
match opt.subcommand() {
("operations-get", Some(opt)) => {
call_result = self._projects_operations_get(opt, dry_run, &mut err).await;
},
("sites-channels-create", Some(opt)) => {
call_result = self._projects_sites_channels_create(opt, dry_run, &mut err).await;
},
("sites-channels-delete", Some(opt)) => {
call_result = self._projects_sites_channels_delete(opt, dry_run, &mut err).await;
},
("sites-channels-get", Some(opt)) => {
call_result = self._projects_sites_channels_get(opt, dry_run, &mut err).await;
},
("sites-channels-list", Some(opt)) => {
call_result = self._projects_sites_channels_list(opt, dry_run, &mut err).await;
},
("sites-channels-patch", Some(opt)) => {
call_result = self._projects_sites_channels_patch(opt, dry_run, &mut err).await;
},
("sites-channels-releases-create", Some(opt)) => {
call_result = self._projects_sites_channels_releases_create(opt, dry_run, &mut err).await;
},
("sites-channels-releases-list", Some(opt)) => {
call_result = self._projects_sites_channels_releases_list(opt, dry_run, &mut err).await;
},
("sites-create", Some(opt)) => {
call_result = self._projects_sites_create(opt, dry_run, &mut err).await;
},
("sites-delete", Some(opt)) => {
call_result = self._projects_sites_delete(opt, dry_run, &mut err).await;
},
("sites-domains-create", Some(opt)) => {
call_result = self._projects_sites_domains_create(opt, dry_run, &mut err).await;
},
("sites-domains-delete", Some(opt)) => {
call_result = self._projects_sites_domains_delete(opt, dry_run, &mut err).await;
},
("sites-domains-get", Some(opt)) => {
call_result = self._projects_sites_domains_get(opt, dry_run, &mut err).await;
},
("sites-domains-list", Some(opt)) => {
call_result = self._projects_sites_domains_list(opt, dry_run, &mut err).await;
},
("sites-domains-update", Some(opt)) => {
call_result = self._projects_sites_domains_update(opt, dry_run, &mut err).await;
},
("sites-get", Some(opt)) => {
call_result = self._projects_sites_get(opt, dry_run, &mut err).await;
},
("sites-get-config", Some(opt)) => {
call_result = self._projects_sites_get_config(opt, dry_run, &mut err).await;
},
("sites-list", Some(opt)) => {
call_result = self._projects_sites_list(opt, dry_run, &mut err).await;
},
("sites-patch", Some(opt)) => {
call_result = self._projects_sites_patch(opt, dry_run, &mut err).await;
},
("sites-releases-create", Some(opt)) => {
call_result = self._projects_sites_releases_create(opt, dry_run, &mut err).await;
},
("sites-releases-list", Some(opt)) => {
call_result = self._projects_sites_releases_list(opt, dry_run, &mut err).await;
},
("sites-update-config", Some(opt)) => {
call_result = self._projects_sites_update_config(opt, dry_run, &mut err).await;
},
("sites-versions-clone", Some(opt)) => {
call_result = self._projects_sites_versions_clone(opt, dry_run, &mut err).await;
},
("sites-versions-create", Some(opt)) => {
call_result = self._projects_sites_versions_create(opt, dry_run, &mut err).await;
},
("sites-versions-delete", Some(opt)) => {
call_result = self._projects_sites_versions_delete(opt, dry_run, &mut err).await;
},
("sites-versions-files-list", Some(opt)) => {
call_result = self._projects_sites_versions_files_list(opt, dry_run, &mut err).await;
},
("sites-versions-list", Some(opt)) => {
call_result = self._projects_sites_versions_list(opt, dry_run, &mut err).await;
},
("sites-versions-patch", Some(opt)) => {
call_result = self._projects_sites_versions_patch(opt, dry_run, &mut err).await;
},
("sites-versions-populate-files", Some(opt)) => {
call_result = self._projects_sites_versions_populate_files(opt, dry_run, &mut err).await;
},
_ => {
err.issues.push(CLIError::MissingMethodError("projects".to_string()));
writeln!(io::stderr(), "{}\n", opt.usage()).ok();
}
}
},
("sites", Some(opt)) => {
match opt.subcommand() {
("channels-create", Some(opt)) => {
call_result = self._sites_channels_create(opt, dry_run, &mut err).await;
},
("channels-delete", Some(opt)) => {
call_result = self._sites_channels_delete(opt, dry_run, &mut err).await;
},
("channels-get", Some(opt)) => {
call_result = self._sites_channels_get(opt, dry_run, &mut err).await;
},
("channels-list", Some(opt)) => {
call_result = self._sites_channels_list(opt, dry_run, &mut err).await;
},
("channels-patch", Some(opt)) => {
call_result = self._sites_channels_patch(opt, dry_run, &mut err).await;
},
("channels-releases-create", Some(opt)) => {
call_result = self._sites_channels_releases_create(opt, dry_run, &mut err).await;
},
("channels-releases-list", Some(opt)) => {
call_result = self._sites_channels_releases_list(opt, dry_run, &mut err).await;
},
("domains-create", Some(opt)) => {
call_result = self._sites_domains_create(opt, dry_run, &mut err).await;
},
("domains-delete", Some(opt)) => {
call_result = self._sites_domains_delete(opt, dry_run, &mut err).await;
},
("domains-get", Some(opt)) => {
call_result = self._sites_domains_get(opt, dry_run, &mut err).await;
},
("domains-list", Some(opt)) => {
call_result = self._sites_domains_list(opt, dry_run, &mut err).await;
},
("domains-update", Some(opt)) => {
call_result = self._sites_domains_update(opt, dry_run, &mut err).await;
},
("get-config", Some(opt)) => {
call_result = self._sites_get_config(opt, dry_run, &mut err).await;
},
("releases-create", Some(opt)) => {
call_result = self._sites_releases_create(opt, dry_run, &mut err).await;
},
("releases-list", Some(opt)) => {
call_result = self._sites_releases_list(opt, dry_run, &mut err).await;
},
("update-config", Some(opt)) => {
call_result = self._sites_update_config(opt, dry_run, &mut err).await;
},
("versions-clone", Some(opt)) => {
call_result = self._sites_versions_clone(opt, dry_run, &mut err).await;
},
("versions-create", Some(opt)) => {
call_result = self._sites_versions_create(opt, dry_run, &mut err).await;
},
("versions-delete", Some(opt)) => {
call_result = self._sites_versions_delete(opt, dry_run, &mut err).await;
},
("versions-files-list", Some(opt)) => {
call_result = self._sites_versions_files_list(opt, dry_run, &mut err).await;
},
("versions-list", Some(opt)) => {
call_result = self._sites_versions_list(opt, dry_run, &mut err).await;
},
("versions-patch", Some(opt)) => {
call_result = self._sites_versions_patch(opt, dry_run, &mut err).await;
},
("versions-populate-files", Some(opt)) => {
call_result = self._sites_versions_populate_files(opt, dry_run, &mut err).await;
},
_ => {
err.issues.push(CLIError::MissingMethodError("sites".to_string()));
writeln!(io::stderr(), "{}\n", opt.usage()).ok();
}
}
},
_ => {
err.issues.push(CLIError::MissingCommandError);
writeln!(io::stderr(), "{}\n", self.opt.usage()).ok();
}
}
if dry_run {
if err.issues.len() > 0 {
err_opt = Some(err);
}
Err(err_opt)
} else {
Ok(call_result)
}
}
// Please note that this call will fail if any part of the opt can't be handled
async fn new(opt: ArgMatches<'n>, connector: S) -> Result<Engine<'n, S>, InvalidOptionsError> {
let (config_dir, secret) = {
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 client::application_secret_from_directory(&config_dir, "firebasehosting1-beta1-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 client = hyper::Client::builder().build(connector);
let auth = oauth2::InstalledFlowAuthenticator::with_client(
secret,
oauth2::InstalledFlowReturnMethod::HTTPRedirect,
client.clone(),
).persist_tokens_to_disk(format!("{}/firebasehosting1-beta1", config_dir)).build().await.unwrap();
let engine = Engine {
opt: opt,
hub: api::FirebaseHosting::new(client, auth),
gp: vec!["$-xgafv", "access-token", "alt", "callback", "fields", "key", "oauth-token", "pretty-print", "quota-user", "upload-type", "upload-protocol"],
gpm: vec![
("$-xgafv", "$.xgafv"),
("access-token", "access_token"),
("oauth-token", "oauth_token"),
("pretty-print", "prettyPrint"),
("quota-user", "quotaUser"),
("upload-type", "uploadType"),
("upload-protocol", "upload_protocol"),
]
};
match engine._doit(true).await {
Err(Some(err)) => Err(err),
Err(None) => Ok(engine),
Ok(_) => unreachable!(),
}
}
async fn doit(&self) -> Result<(), DoitError> {
match self._doit(false).await {
Ok(res) => res,
Err(_) => unreachable!(),
}
}
}
#[tokio::main]
async fn main() {
let mut exit_status = 0i32;
let arg_data = [
("projects", "methods: 'operations-get', 'sites-channels-create', 'sites-channels-delete', 'sites-channels-get', 'sites-channels-list', 'sites-channels-patch', 'sites-channels-releases-create', 'sites-channels-releases-list', 'sites-create', 'sites-delete', 'sites-domains-create', 'sites-domains-delete', 'sites-domains-get', 'sites-domains-list', 'sites-domains-update', 'sites-get', 'sites-get-config', 'sites-list', 'sites-patch', 'sites-releases-create', 'sites-releases-list', 'sites-update-config', 'sites-versions-clone', 'sites-versions-create', 'sites-versions-delete', 'sites-versions-files-list', 'sites-versions-list', 'sites-versions-patch' and 'sites-versions-populate-files'", vec![
("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."##),
"Details at http://byron.github.io/google-apis-rs/google_firebasehosting1_beta1_cli/projects_operations-get",
vec![
(Some(r##"name"##),
None,
Some(r##"The name of the operation resource."##),
Some(true),
Some(false)),
(Some(r##"v"##),
Some(r##"p"##),
Some(r##"Set various optional parameters, matching the key=value form"##),
Some(false),
Some(true)),
(Some(r##"out"##),
Some(r##"o"##),
Some(r##"Specify the file into which to write the program's output"##),
Some(false),
Some(false)),
]),
("sites-channels-create",
Some(r##"Creates a new channel in the specified site."##),
"Details at http://byron.github.io/google-apis-rs/google_firebasehosting1_beta1_cli/projects_sites-channels-create",
vec![
(Some(r##"parent"##),
None,
Some(r##"Required. The site in which to create this channel, in the format: sites/ SITE_ID"##),
Some(true),
Some(false)),
(Some(r##"kv"##),
Some(r##"r"##),
Some(r##"Set various fields of the request structure, matching the key=value form"##),
Some(true),
Some(true)),
(Some(r##"v"##),
Some(r##"p"##),
Some(r##"Set various optional parameters, matching the key=value form"##),
Some(false),
Some(true)),
(Some(r##"out"##),
Some(r##"o"##),
Some(r##"Specify the file into which to write the program's output"##),
Some(false),
Some(false)),
]),
("sites-channels-delete",
Some(r##"Deletes the specified channel of the specified site. The `live` channel cannot be deleted."##),
"Details at http://byron.github.io/google-apis-rs/google_firebasehosting1_beta1_cli/projects_sites-channels-delete",
vec![
(Some(r##"name"##),
None,
Some(r##"Required. The fully-qualified resource name for the channel, in the format: sites/SITE_ID/channels/CHANNEL_ID"##),
Some(true),
Some(false)),
(Some(r##"v"##),
Some(r##"p"##),
Some(r##"Set various optional parameters, matching the key=value form"##),
Some(false),
Some(true)),
(Some(r##"out"##),
Some(r##"o"##),
Some(r##"Specify the file into which to write the program's output"##),
Some(false),
Some(false)),
]),
("sites-channels-get",
Some(r##"Retrieves information for the specified channel of the specified site."##),
"Details at http://byron.github.io/google-apis-rs/google_firebasehosting1_beta1_cli/projects_sites-channels-get",
vec![
(Some(r##"name"##),
None,
Some(r##"Required. The fully-qualified resource name for the channel, in the format: sites/SITE_ID/channels/CHANNEL_ID"##),
Some(true),
Some(false)),
(Some(r##"v"##),
Some(r##"p"##),
Some(r##"Set various optional parameters, matching the key=value form"##),
Some(false),
Some(true)),
(Some(r##"out"##),
Some(r##"o"##),
Some(r##"Specify the file into which to write the program's output"##),
Some(false),
Some(false)),
]),
("sites-channels-list",
Some(r##"Lists the channels for the specified site. All sites have a default `live` channel."##),
"Details at http://byron.github.io/google-apis-rs/google_firebasehosting1_beta1_cli/projects_sites-channels-list",
vec![
(Some(r##"parent"##),
None,
Some(r##"Required. The site for which to list channels, in the format: sites/SITE_ID"##),
Some(true),
Some(false)),
(Some(r##"v"##),
Some(r##"p"##),
Some(r##"Set various optional parameters, matching the key=value form"##),
Some(false),
Some(true)),
(Some(r##"out"##),
Some(r##"o"##),
Some(r##"Specify the file into which to write the program's output"##),
Some(false),
Some(false)),
]),
("sites-channels-patch",
Some(r##"Updates information for the specified channel of the specified site. Implicitly creates the channel if it doesn't already exist."##),
"Details at http://byron.github.io/google-apis-rs/google_firebasehosting1_beta1_cli/projects_sites-channels-patch",
vec![
(Some(r##"name"##),
None,
Some(r##"The fully-qualified resource name for the channel, in the format: sites/ SITE_ID/channels/CHANNEL_ID"##),
Some(true),
Some(false)),
(Some(r##"kv"##),
Some(r##"r"##),
Some(r##"Set various fields of the request structure, matching the key=value form"##),
Some(true),
Some(true)),
(Some(r##"v"##),
Some(r##"p"##),
Some(r##"Set various optional parameters, matching the key=value form"##),
Some(false),
Some(true)),
(Some(r##"out"##),
Some(r##"o"##),
Some(r##"Specify the file into which to write the program's output"##),
Some(false),
Some(false)),
]),
("sites-channels-releases-create",
Some(r##"Creates a new release, which makes the content of the specified version actively display on the appropriate URL(s)."##),
"Details at http://byron.github.io/google-apis-rs/google_firebasehosting1_beta1_cli/projects_sites-channels-releases-create",
vec![
(Some(r##"parent"##),
None,
Some(r##"Required. The site or channel to which the release belongs, in either of the following formats: - sites/SITE_ID - sites/SITE_ID/channels/CHANNEL_ID"##),
Some(true),
Some(false)),
(Some(r##"kv"##),
Some(r##"r"##),
Some(r##"Set various fields of the request structure, matching the key=value form"##),
Some(true),
Some(true)),
(Some(r##"v"##),
Some(r##"p"##),
Some(r##"Set various optional parameters, matching the key=value form"##),
Some(false),
Some(true)),
(Some(r##"out"##),
Some(r##"o"##),
Some(r##"Specify the file into which to write the program's output"##),
Some(false),
Some(false)),
]),
("sites-channels-releases-list",
Some(r##"Lists the releases that have been created for the specified site or channel. When used to list releases for a site, this list includes releases for both the default `live` channel and any active preview channels for the specified site."##),
"Details at http://byron.github.io/google-apis-rs/google_firebasehosting1_beta1_cli/projects_sites-channels-releases-list",
vec![
(Some(r##"parent"##),
None,
Some(r##"Required. The site or channel for which to list releases, in either of the following formats: - sites/SITE_ID - sites/SITE_ID/channels/CHANNEL_ID "##),
Some(true),
Some(false)),
(Some(r##"v"##),
Some(r##"p"##),
Some(r##"Set various optional parameters, matching the key=value form"##),
Some(false),
Some(true)),
(Some(r##"out"##),
Some(r##"o"##),
Some(r##"Specify the file into which to write the program's output"##),
Some(false),
Some(false)),
]),
("sites-create",
Some(r##"Creates a new Hosting Site in the specified parent Firebase project. Note that Hosting sites can take several minutes to propagate through Firebase systems."##),
"Details at http://byron.github.io/google-apis-rs/google_firebasehosting1_beta1_cli/projects_sites-create",
vec![
(Some(r##"parent"##),
None,
Some(r##"Required. The Firebase project in which to create a Hosting site, in the format: projects/PROJECT_IDENTIFIER Refer to the `Site` [`name`](../projects#Site.FIELDS.name) field for details about PROJECT_IDENTIFIER values."##),
Some(true),
Some(false)),
(Some(r##"kv"##),
Some(r##"r"##),
Some(r##"Set various fields of the request structure, matching the key=value form"##),
Some(true),
Some(true)),
(Some(r##"v"##),
Some(r##"p"##),
Some(r##"Set various optional parameters, matching the key=value form"##),
Some(false),
Some(true)),
(Some(r##"out"##),
Some(r##"o"##),
Some(r##"Specify the file into which to write the program's output"##),
Some(false),
Some(false)),
]),
("sites-delete",
Some(r##"Deletes the specified Hosting Site from the specified parent Firebase project."##),
"Details at http://byron.github.io/google-apis-rs/google_firebasehosting1_beta1_cli/projects_sites-delete",
vec![
(Some(r##"name"##),
None,
Some(r##"Required. The fully-qualified resource name for the Hosting site, in the format: projects/PROJECT_IDENTIFIER/sites/SITE_ID Refer to the `Site` [`name`](../projects#Site.FIELDS.name) field for details about PROJECT_IDENTIFIER values."##),
Some(true),
Some(false)),
(Some(r##"v"##),
Some(r##"p"##),
Some(r##"Set various optional parameters, matching the key=value form"##),
Some(false),
Some(true)),
(Some(r##"out"##),
Some(r##"o"##),
Some(r##"Specify the file into which to write the program's output"##),
Some(false),
Some(false)),
]),
("sites-domains-create",
Some(r##"Creates a domain mapping on the specified site."##),
"Details at http://byron.github.io/google-apis-rs/google_firebasehosting1_beta1_cli/projects_sites-domains-create",
vec![
(Some(r##"parent"##),
None,
Some(r##"Required. The parent to create the domain association for, in the format: sites/site-name"##),
Some(true),
Some(false)),
(Some(r##"kv"##),
Some(r##"r"##),
Some(r##"Set various fields of the request structure, matching the key=value form"##),
Some(true),
Some(true)),
(Some(r##"v"##),
Some(r##"p"##),
Some(r##"Set various optional parameters, matching the key=value form"##),
Some(false),
Some(true)),
(Some(r##"out"##),
Some(r##"o"##),
Some(r##"Specify the file into which to write the program's output"##),
Some(false),
Some(false)),
]),
("sites-domains-delete",
Some(r##"Deletes the existing domain mapping on the specified site."##),
"Details at http://byron.github.io/google-apis-rs/google_firebasehosting1_beta1_cli/projects_sites-domains-delete",
vec![
(Some(r##"name"##),
None,
Some(r##"Required. The name of the domain association to delete."##),
Some(true),
Some(false)),
(Some(r##"v"##),
Some(r##"p"##),
Some(r##"Set various optional parameters, matching the key=value form"##),
Some(false),
Some(true)),
(Some(r##"out"##),
Some(r##"o"##),
Some(r##"Specify the file into which to write the program's output"##),
Some(false),
Some(false)),
]),
("sites-domains-get",
Some(r##"Gets a domain mapping on the specified site."##),
"Details at http://byron.github.io/google-apis-rs/google_firebasehosting1_beta1_cli/projects_sites-domains-get",
vec![
(Some(r##"name"##),
None,
Some(r##"Required. The name of the domain configuration to get."##),
Some(true),
Some(false)),
(Some(r##"v"##),
Some(r##"p"##),
Some(r##"Set various optional parameters, matching the key=value form"##),
Some(false),
Some(true)),
(Some(r##"out"##),
Some(r##"o"##),
Some(r##"Specify the file into which to write the program's output"##),
Some(false),
Some(false)),
]),
("sites-domains-list",
Some(r##"Lists the domains for the specified site."##),
"Details at http://byron.github.io/google-apis-rs/google_firebasehosting1_beta1_cli/projects_sites-domains-list",
vec![
(Some(r##"parent"##),
None,
Some(r##"Required. The parent for which to list domains, in the format: sites/ site-name"##),
Some(true),
Some(false)),
(Some(r##"v"##),
Some(r##"p"##),
Some(r##"Set various optional parameters, matching the key=value form"##),
Some(false),
Some(true)),
(Some(r##"out"##),
Some(r##"o"##),
Some(r##"Specify the file into which to write the program's output"##),
Some(false),
Some(false)),
]),
("sites-domains-update",
Some(r##"Updates the specified domain mapping, creating the mapping as if it does not exist."##),
"Details at http://byron.github.io/google-apis-rs/google_firebasehosting1_beta1_cli/projects_sites-domains-update",
vec![
(Some(r##"name"##),
None,
Some(r##"Required. The name of the domain association to update or create, if an association doesn't already exist."##),
Some(true),
Some(false)),
(Some(r##"kv"##),
Some(r##"r"##),
Some(r##"Set various fields of the request structure, matching the key=value form"##),
Some(true),
Some(true)),
(Some(r##"v"##),
Some(r##"p"##),
Some(r##"Set various optional parameters, matching the key=value form"##),
Some(false),
Some(true)),
(Some(r##"out"##),
Some(r##"o"##),
Some(r##"Specify the file into which to write the program's output"##),
Some(false),
Some(false)),
]),
("sites-get",
Some(r##"Gets the specified Hosting Site."##),
"Details at http://byron.github.io/google-apis-rs/google_firebasehosting1_beta1_cli/projects_sites-get",
vec![
(Some(r##"name"##),
None,
Some(r##"Required. The fully-qualified resource name for the Hosting site, in the format: projects/PROJECT_IDENTIFIER/sites/SITE_ID Refer to the `Site` [`name`](../projects#Site.FIELDS.name) field for details about PROJECT_IDENTIFIER values. Since a SITE_ID is a globally unique identifier, you can also use the unique sub-collection resource access pattern, in the format: projects/-/sites/SITE_ID"##),
Some(true),
Some(false)),
(Some(r##"v"##),
Some(r##"p"##),
Some(r##"Set various optional parameters, matching the key=value form"##),
Some(false),
Some(true)),
(Some(r##"out"##),
Some(r##"o"##),
Some(r##"Specify the file into which to write the program's output"##),
Some(false),
Some(false)),
]),
("sites-get-config",
Some(r##"Gets the Hosting metadata for a specific site."##),
"Details at http://byron.github.io/google-apis-rs/google_firebasehosting1_beta1_cli/projects_sites-get-config",
vec![
(Some(r##"name"##),
None,
Some(r##"Required. The site for which to get the SiteConfig, in the format: sites/ site-name/config"##),
Some(true),
Some(false)),
(Some(r##"v"##),
Some(r##"p"##),
Some(r##"Set various optional parameters, matching the key=value form"##),
Some(false),
Some(true)),
(Some(r##"out"##),
Some(r##"o"##),
Some(r##"Specify the file into which to write the program's output"##),
Some(false),
Some(false)),
]),
("sites-list",
Some(r##"Lists each Hosting Site associated with the specified parent Firebase project."##),
"Details at http://byron.github.io/google-apis-rs/google_firebasehosting1_beta1_cli/projects_sites-list",
vec![
(Some(r##"parent"##),
None,
Some(r##"Required. The Firebase project for which to list sites, in the format: projects/PROJECT_IDENTIFIER Refer to the `Site` [`name`](../projects#Site.FIELDS.name) field for details about PROJECT_IDENTIFIER values."##),
Some(true),
Some(false)),
(Some(r##"v"##),
Some(r##"p"##),
Some(r##"Set various optional parameters, matching the key=value form"##),
Some(false),
Some(true)),
(Some(r##"out"##),
Some(r##"o"##),
Some(r##"Specify the file into which to write the program's output"##),
Some(false),
Some(false)),
]),
("sites-patch",
Some(r##"Updates attributes of the specified Hosting Site."##),
"Details at http://byron.github.io/google-apis-rs/google_firebasehosting1_beta1_cli/projects_sites-patch",
vec![
(Some(r##"name"##),
None,
Some(r##"Output only. The fully-qualified resource name of the Hosting site, in the format: projects/PROJECT_IDENTIFIER/sites/SITE_ID PROJECT_IDENTIFIER: the Firebase project's [`ProjectNumber`](https://firebase.google.com/docs/reference/firebase-management/rest/v1beta1/projects#FirebaseProject.FIELDS.project_number) ***(recommended)*** or its [`ProjectId`](https://firebase.google.com/docs/reference/firebase-management/rest/v1beta1/projects#FirebaseProject.FIELDS.project_id). Learn more about using project identifiers in Google's [AIP 2510 standard](https://google.aip.dev/cloud/2510)."##),
Some(true),
Some(false)),
(Some(r##"kv"##),
Some(r##"r"##),
Some(r##"Set various fields of the request structure, matching the key=value form"##),
Some(true),
Some(true)),
(Some(r##"v"##),
Some(r##"p"##),
Some(r##"Set various optional parameters, matching the key=value form"##),
Some(false),
Some(true)),
(Some(r##"out"##),
Some(r##"o"##),
Some(r##"Specify the file into which to write the program's output"##),
Some(false),
Some(false)),
]),
("sites-releases-create",
Some(r##"Creates a new release, which makes the content of the specified version actively display on the appropriate URL(s)."##),
"Details at http://byron.github.io/google-apis-rs/google_firebasehosting1_beta1_cli/projects_sites-releases-create",
vec![
(Some(r##"parent"##),
None,
Some(r##"Required. The site or channel to which the release belongs, in either of the following formats: - sites/SITE_ID - sites/SITE_ID/channels/CHANNEL_ID"##),
Some(true),
Some(false)),
(Some(r##"kv"##),
Some(r##"r"##),
Some(r##"Set various fields of the request structure, matching the key=value form"##),
Some(true),
Some(true)),
(Some(r##"v"##),
Some(r##"p"##),
Some(r##"Set various optional parameters, matching the key=value form"##),
Some(false),
Some(true)),
(Some(r##"out"##),
Some(r##"o"##),
Some(r##"Specify the file into which to write the program's output"##),
Some(false),
Some(false)),
]),
("sites-releases-list",
Some(r##"Lists the releases that have been created for the specified site or channel. When used to list releases for a site, this list includes releases for both the default `live` channel and any active preview channels for the specified site."##),
"Details at http://byron.github.io/google-apis-rs/google_firebasehosting1_beta1_cli/projects_sites-releases-list",
vec![
(Some(r##"parent"##),
None,
Some(r##"Required. The site or channel for which to list releases, in either of the following formats: - sites/SITE_ID - sites/SITE_ID/channels/CHANNEL_ID "##),
Some(true),
Some(false)),
(Some(r##"v"##),
Some(r##"p"##),
Some(r##"Set various optional parameters, matching the key=value form"##),
Some(false),
Some(true)),
(Some(r##"out"##),
Some(r##"o"##),
Some(r##"Specify the file into which to write the program's output"##),
Some(false),
Some(false)),
]),
("sites-update-config",
Some(r##"Sets the Hosting metadata for a specific site."##),
"Details at http://byron.github.io/google-apis-rs/google_firebasehosting1_beta1_cli/projects_sites-update-config",
vec![
(Some(r##"name"##),
None,
Some(r##"Required. The site for which to update the SiteConfig, in the format: sites/ site-name/config"##),
Some(true),
Some(false)),
(Some(r##"kv"##),
Some(r##"r"##),
Some(r##"Set various fields of the request structure, matching the key=value form"##),
Some(true),
Some(true)),
(Some(r##"v"##),
Some(r##"p"##),
Some(r##"Set various optional parameters, matching the key=value form"##),
Some(false),
Some(true)),
(Some(r##"out"##),
Some(r##"o"##),
Some(r##"Specify the file into which to write the program's output"##),
Some(false),
Some(false)),
]),
("sites-versions-clone",
Some(r##"Creates a new version on the specified target site using the content of the specified version."##),
"Details at http://byron.github.io/google-apis-rs/google_firebasehosting1_beta1_cli/projects_sites-versions-clone",
vec![
(Some(r##"parent"##),
None,
Some(r##"Required. The target site for the cloned version, in the format: sites/ SITE_ID"##),
Some(true),
Some(false)),
(Some(r##"kv"##),
Some(r##"r"##),
Some(r##"Set various fields of the request structure, matching the key=value form"##),
Some(true),
Some(true)),
(Some(r##"v"##),
Some(r##"p"##),
Some(r##"Set various optional parameters, matching the key=value form"##),
Some(false),
Some(true)),
(Some(r##"out"##),
Some(r##"o"##),
Some(r##"Specify the file into which to write the program's output"##),
Some(false),
Some(false)),
]),
("sites-versions-create",
Some(r##"Creates a new version for the specified site."##),
"Details at http://byron.github.io/google-apis-rs/google_firebasehosting1_beta1_cli/projects_sites-versions-create",
vec![
(Some(r##"parent"##),
None,
Some(r##"Required. The site in which to create the version, in the format: sites/ SITE_ID"##),
Some(true),
Some(false)),
(Some(r##"kv"##),
Some(r##"r"##),
Some(r##"Set various fields of the request structure, matching the key=value form"##),
Some(true),
Some(true)),
(Some(r##"v"##),
Some(r##"p"##),
Some(r##"Set various optional parameters, matching the key=value form"##),
Some(false),
Some(true)),
(Some(r##"out"##),
Some(r##"o"##),
Some(r##"Specify the file into which to write the program's output"##),
Some(false),
Some(false)),
]),
("sites-versions-delete",
Some(r##"Deletes the specified version."##),
"Details at http://byron.github.io/google-apis-rs/google_firebasehosting1_beta1_cli/projects_sites-versions-delete",
vec![
(Some(r##"name"##),
None,
Some(r##"Required. The fully-qualified resource name for the version, in the format: sites/SITE_ID/versions/VERSION_ID"##),
Some(true),
Some(false)),
(Some(r##"v"##),
Some(r##"p"##),
Some(r##"Set various optional parameters, matching the key=value form"##),
Some(false),
Some(true)),
(Some(r##"out"##),
Some(r##"o"##),
Some(r##"Specify the file into which to write the program's output"##),
Some(false),
Some(false)),
]),
("sites-versions-files-list",
Some(r##"Lists the remaining files to be uploaded for the specified version."##),
"Details at http://byron.github.io/google-apis-rs/google_firebasehosting1_beta1_cli/projects_sites-versions-files-list",
vec![
(Some(r##"parent"##),
None,
Some(r##"Required. The version for which to list files, in the format: sites/SITE_ID /versions/VERSION_ID"##),
Some(true),
Some(false)),
(Some(r##"v"##),
Some(r##"p"##),
Some(r##"Set various optional parameters, matching the key=value form"##),
Some(false),
Some(true)),
(Some(r##"out"##),
Some(r##"o"##),
Some(r##"Specify the file into which to write the program's output"##),
Some(false),
Some(false)),
]),
("sites-versions-list",
Some(r##"Lists the versions that have been created for the specified site. This list includes versions for both the default `live` channel and any active preview channels for the specified site."##),
"Details at http://byron.github.io/google-apis-rs/google_firebasehosting1_beta1_cli/projects_sites-versions-list",
vec![
(Some(r##"parent"##),
None,
Some(r##"Required. The site or channel for which to list versions, in either of the following formats: - sites/SITE_ID - sites/SITE_ID/channels/CHANNEL_ID "##),
Some(true),
Some(false)),
(Some(r##"v"##),
Some(r##"p"##),
Some(r##"Set various optional parameters, matching the key=value form"##),
Some(false),
Some(true)),
(Some(r##"out"##),
Some(r##"o"##),
Some(r##"Specify the file into which to write the program's output"##),
Some(false),
Some(false)),
]),
("sites-versions-patch",
Some(r##" Updates the specified metadata for the specified version. This method will fail with `FAILED_PRECONDITION` in the event of an invalid state transition. The supported [state](../sites.versions#versionstatus) transitions for a version are from `CREATED` to `FINALIZED`. Use [`DeleteVersion`](delete) to set the status of a version to `DELETED`."##),
"Details at http://byron.github.io/google-apis-rs/google_firebasehosting1_beta1_cli/projects_sites-versions-patch",
vec![
(Some(r##"name"##),
None,
Some(r##"The fully-qualified resource name for the version, in the format: sites/ SITE_ID/versions/VERSION_ID This name is provided in the response body when you call [`CreateVersion`](sites.versions/create)."##),
Some(true),
Some(false)),
(Some(r##"kv"##),
Some(r##"r"##),
Some(r##"Set various fields of the request structure, matching the key=value form"##),
Some(true),
Some(true)),
(Some(r##"v"##),
Some(r##"p"##),
Some(r##"Set various optional parameters, matching the key=value form"##),
Some(false),
Some(true)),
(Some(r##"out"##),
Some(r##"o"##),
Some(r##"Specify the file into which to write the program's output"##),
Some(false),
Some(false)),
]),
("sites-versions-populate-files",
Some(r##" Adds content files to the specified version. Each file must be under 2 GB."##),
"Details at http://byron.github.io/google-apis-rs/google_firebasehosting1_beta1_cli/projects_sites-versions-populate-files",
vec![
(Some(r##"parent"##),
None,
Some(r##"Required. The version to which to add files, in the format: sites/SITE_ID /versions/VERSION_ID"##),
Some(true),
Some(false)),
(Some(r##"kv"##),
Some(r##"r"##),
Some(r##"Set various fields of the request structure, matching the key=value form"##),
Some(true),
Some(true)),
(Some(r##"v"##),
Some(r##"p"##),
Some(r##"Set various optional parameters, matching the key=value form"##),
Some(false),
Some(true)),
(Some(r##"out"##),
Some(r##"o"##),
Some(r##"Specify the file into which to write the program's output"##),
Some(false),
Some(false)),
]),
]),
("sites", "methods: 'channels-create', 'channels-delete', 'channels-get', 'channels-list', 'channels-patch', 'channels-releases-create', 'channels-releases-list', 'domains-create', 'domains-delete', 'domains-get', 'domains-list', 'domains-update', 'get-config', 'releases-create', 'releases-list', 'update-config', 'versions-clone', 'versions-create', 'versions-delete', 'versions-files-list', 'versions-list', 'versions-patch' and 'versions-populate-files'", vec![
("channels-create",
Some(r##"Creates a new channel in the specified site."##),
"Details at http://byron.github.io/google-apis-rs/google_firebasehosting1_beta1_cli/sites_channels-create",
vec![
(Some(r##"parent"##),
None,
Some(r##"Required. The site in which to create this channel, in the format: sites/ SITE_ID"##),
Some(true),
Some(false)),
(Some(r##"kv"##),
Some(r##"r"##),
Some(r##"Set various fields of the request structure, matching the key=value form"##),
Some(true),
Some(true)),
(Some(r##"v"##),
Some(r##"p"##),
Some(r##"Set various optional parameters, matching the key=value form"##),
Some(false),
Some(true)),
(Some(r##"out"##),
Some(r##"o"##),
Some(r##"Specify the file into which to write the program's output"##),
Some(false),
Some(false)),
]),
("channels-delete",
Some(r##"Deletes the specified channel of the specified site. The `live` channel cannot be deleted."##),
"Details at http://byron.github.io/google-apis-rs/google_firebasehosting1_beta1_cli/sites_channels-delete",
vec![
(Some(r##"name"##),
None,
Some(r##"Required. The fully-qualified resource name for the channel, in the format: sites/SITE_ID/channels/CHANNEL_ID"##),
Some(true),
Some(false)),
(Some(r##"v"##),
Some(r##"p"##),
Some(r##"Set various optional parameters, matching the key=value form"##),
Some(false),
Some(true)),
(Some(r##"out"##),
Some(r##"o"##),
Some(r##"Specify the file into which to write the program's output"##),
Some(false),
Some(false)),
]),
("channels-get",
Some(r##"Retrieves information for the specified channel of the specified site."##),
"Details at http://byron.github.io/google-apis-rs/google_firebasehosting1_beta1_cli/sites_channels-get",
vec![
(Some(r##"name"##),
None,
Some(r##"Required. The fully-qualified resource name for the channel, in the format: sites/SITE_ID/channels/CHANNEL_ID"##),
Some(true),
Some(false)),
(Some(r##"v"##),
Some(r##"p"##),
Some(r##"Set various optional parameters, matching the key=value form"##),
Some(false),
Some(true)),
(Some(r##"out"##),
Some(r##"o"##),
Some(r##"Specify the file into which to write the program's output"##),
Some(false),
Some(false)),
]),
("channels-list",
Some(r##"Lists the channels for the specified site. All sites have a default `live` channel."##),
"Details at http://byron.github.io/google-apis-rs/google_firebasehosting1_beta1_cli/sites_channels-list",
vec![
(Some(r##"parent"##),
None,
Some(r##"Required. The site for which to list channels, in the format: sites/SITE_ID"##),
Some(true),
Some(false)),
(Some(r##"v"##),
Some(r##"p"##),
Some(r##"Set various optional parameters, matching the key=value form"##),
Some(false),
Some(true)),
(Some(r##"out"##),
Some(r##"o"##),
Some(r##"Specify the file into which to write the program's output"##),
Some(false),
Some(false)),
]),
("channels-patch",
Some(r##"Updates information for the specified channel of the specified site. Implicitly creates the channel if it doesn't already exist."##),
"Details at http://byron.github.io/google-apis-rs/google_firebasehosting1_beta1_cli/sites_channels-patch",
vec![
(Some(r##"name"##),
None,
Some(r##"The fully-qualified resource name for the channel, in the format: sites/ SITE_ID/channels/CHANNEL_ID"##),
Some(true),
Some(false)),
(Some(r##"kv"##),
Some(r##"r"##),
Some(r##"Set various fields of the request structure, matching the key=value form"##),
Some(true),
Some(true)),
(Some(r##"v"##),
Some(r##"p"##),
Some(r##"Set various optional parameters, matching the key=value form"##),
Some(false),
Some(true)),
(Some(r##"out"##),
Some(r##"o"##),
Some(r##"Specify the file into which to write the program's output"##),
Some(false),
Some(false)),
]),
("channels-releases-create",
Some(r##"Creates a new release, which makes the content of the specified version actively display on the appropriate URL(s)."##),
"Details at http://byron.github.io/google-apis-rs/google_firebasehosting1_beta1_cli/sites_channels-releases-create",
vec![
(Some(r##"parent"##),
None,
Some(r##"Required. The site or channel to which the release belongs, in either of the following formats: - sites/SITE_ID - sites/SITE_ID/channels/CHANNEL_ID"##),
Some(true),
Some(false)),
(Some(r##"kv"##),
Some(r##"r"##),
Some(r##"Set various fields of the request structure, matching the key=value form"##),
Some(true),
Some(true)),
(Some(r##"v"##),
Some(r##"p"##),
Some(r##"Set various optional parameters, matching the key=value form"##),
Some(false),
Some(true)),
(Some(r##"out"##),
Some(r##"o"##),
Some(r##"Specify the file into which to write the program's output"##),
Some(false),
Some(false)),
]),
("channels-releases-list",
Some(r##"Lists the releases that have been created for the specified site or channel. When used to list releases for a site, this list includes releases for both the default `live` channel and any active preview channels for the specified site."##),
"Details at http://byron.github.io/google-apis-rs/google_firebasehosting1_beta1_cli/sites_channels-releases-list",
vec![
(Some(r##"parent"##),
None,
Some(r##"Required. The site or channel for which to list releases, in either of the following formats: - sites/SITE_ID - sites/SITE_ID/channels/CHANNEL_ID "##),
Some(true),
Some(false)),
(Some(r##"v"##),
Some(r##"p"##),
Some(r##"Set various optional parameters, matching the key=value form"##),
Some(false),
Some(true)),
(Some(r##"out"##),
Some(r##"o"##),
Some(r##"Specify the file into which to write the program's output"##),
Some(false),
Some(false)),
]),
("domains-create",
Some(r##"Creates a domain mapping on the specified site."##),
"Details at http://byron.github.io/google-apis-rs/google_firebasehosting1_beta1_cli/sites_domains-create",
vec![
(Some(r##"parent"##),
None,
Some(r##"Required. The parent to create the domain association for, in the format: sites/site-name"##),
Some(true),
Some(false)),
(Some(r##"kv"##),
Some(r##"r"##),
Some(r##"Set various fields of the request structure, matching the key=value form"##),
Some(true),
Some(true)),
(Some(r##"v"##),
Some(r##"p"##),
Some(r##"Set various optional parameters, matching the key=value form"##),
Some(false),
Some(true)),
(Some(r##"out"##),
Some(r##"o"##),
Some(r##"Specify the file into which to write the program's output"##),
Some(false),
Some(false)),
]),
("domains-delete",
Some(r##"Deletes the existing domain mapping on the specified site."##),
"Details at http://byron.github.io/google-apis-rs/google_firebasehosting1_beta1_cli/sites_domains-delete",
vec![
(Some(r##"name"##),
None,
Some(r##"Required. The name of the domain association to delete."##),
Some(true),
Some(false)),
(Some(r##"v"##),
Some(r##"p"##),
Some(r##"Set various optional parameters, matching the key=value form"##),
Some(false),
Some(true)),
(Some(r##"out"##),
Some(r##"o"##),
Some(r##"Specify the file into which to write the program's output"##),
Some(false),
Some(false)),
]),
("domains-get",
Some(r##"Gets a domain mapping on the specified site."##),
"Details at http://byron.github.io/google-apis-rs/google_firebasehosting1_beta1_cli/sites_domains-get",
vec![
(Some(r##"name"##),
None,
Some(r##"Required. The name of the domain configuration to get."##),
Some(true),
Some(false)),
(Some(r##"v"##),
Some(r##"p"##),
Some(r##"Set various optional parameters, matching the key=value form"##),
Some(false),
Some(true)),
(Some(r##"out"##),
Some(r##"o"##),
Some(r##"Specify the file into which to write the program's output"##),
Some(false),
Some(false)),
]),
("domains-list",
Some(r##"Lists the domains for the specified site."##),
"Details at http://byron.github.io/google-apis-rs/google_firebasehosting1_beta1_cli/sites_domains-list",
vec![
(Some(r##"parent"##),
None,
Some(r##"Required. The parent for which to list domains, in the format: sites/ site-name"##),
Some(true),
Some(false)),
(Some(r##"v"##),
Some(r##"p"##),
Some(r##"Set various optional parameters, matching the key=value form"##),
Some(false),
Some(true)),
(Some(r##"out"##),
Some(r##"o"##),
Some(r##"Specify the file into which to write the program's output"##),
Some(false),
Some(false)),
]),
("domains-update",
Some(r##"Updates the specified domain mapping, creating the mapping as if it does not exist."##),
"Details at http://byron.github.io/google-apis-rs/google_firebasehosting1_beta1_cli/sites_domains-update",
vec![
(Some(r##"name"##),
None,
Some(r##"Required. The name of the domain association to update or create, if an association doesn't already exist."##),
Some(true),
Some(false)),
(Some(r##"kv"##),
Some(r##"r"##),
Some(r##"Set various fields of the request structure, matching the key=value form"##),
Some(true),
Some(true)),
(Some(r##"v"##),
Some(r##"p"##),
Some(r##"Set various optional parameters, matching the key=value form"##),
Some(false),
Some(true)),
(Some(r##"out"##),
Some(r##"o"##),
Some(r##"Specify the file into which to write the program's output"##),
Some(false),
Some(false)),
]),
("get-config",
Some(r##"Gets the Hosting metadata for a specific site."##),
"Details at http://byron.github.io/google-apis-rs/google_firebasehosting1_beta1_cli/sites_get-config",
vec![
(Some(r##"name"##),
None,
Some(r##"Required. The site for which to get the SiteConfig, in the format: sites/ site-name/config"##),
Some(true),
Some(false)),
(Some(r##"v"##),
Some(r##"p"##),
Some(r##"Set various optional parameters, matching the key=value form"##),
Some(false),
Some(true)),
(Some(r##"out"##),
Some(r##"o"##),
Some(r##"Specify the file into which to write the program's output"##),
Some(false),
Some(false)),
]),
("releases-create",
Some(r##"Creates a new release, which makes the content of the specified version actively display on the appropriate URL(s)."##),
"Details at http://byron.github.io/google-apis-rs/google_firebasehosting1_beta1_cli/sites_releases-create",
vec![
(Some(r##"parent"##),
None,
Some(r##"Required. The site or channel to which the release belongs, in either of the following formats: - sites/SITE_ID - sites/SITE_ID/channels/CHANNEL_ID"##),
Some(true),
Some(false)),
(Some(r##"kv"##),
Some(r##"r"##),
Some(r##"Set various fields of the request structure, matching the key=value form"##),
Some(true),
Some(true)),
(Some(r##"v"##),
Some(r##"p"##),
Some(r##"Set various optional parameters, matching the key=value form"##),
Some(false),
Some(true)),
(Some(r##"out"##),
Some(r##"o"##),
Some(r##"Specify the file into which to write the program's output"##),
Some(false),
Some(false)),
]),
("releases-list",
Some(r##"Lists the releases that have been created for the specified site or channel. When used to list releases for a site, this list includes releases for both the default `live` channel and any active preview channels for the specified site."##),
"Details at http://byron.github.io/google-apis-rs/google_firebasehosting1_beta1_cli/sites_releases-list",
vec![
(Some(r##"parent"##),
None,
Some(r##"Required. The site or channel for which to list releases, in either of the following formats: - sites/SITE_ID - sites/SITE_ID/channels/CHANNEL_ID "##),
Some(true),
Some(false)),
(Some(r##"v"##),
Some(r##"p"##),
Some(r##"Set various optional parameters, matching the key=value form"##),
Some(false),
Some(true)),
(Some(r##"out"##),
Some(r##"o"##),
Some(r##"Specify the file into which to write the program's output"##),
Some(false),
Some(false)),
]),
("update-config",
Some(r##"Sets the Hosting metadata for a specific site."##),
"Details at http://byron.github.io/google-apis-rs/google_firebasehosting1_beta1_cli/sites_update-config",
vec![
(Some(r##"name"##),
None,
Some(r##"Required. The site for which to update the SiteConfig, in the format: sites/ site-name/config"##),
Some(true),
Some(false)),
(Some(r##"kv"##),
Some(r##"r"##),
Some(r##"Set various fields of the request structure, matching the key=value form"##),
Some(true),
Some(true)),
(Some(r##"v"##),
Some(r##"p"##),
Some(r##"Set various optional parameters, matching the key=value form"##),
Some(false),
Some(true)),
(Some(r##"out"##),
Some(r##"o"##),
Some(r##"Specify the file into which to write the program's output"##),
Some(false),
Some(false)),
]),
("versions-clone",
Some(r##"Creates a new version on the specified target site using the content of the specified version."##),
"Details at http://byron.github.io/google-apis-rs/google_firebasehosting1_beta1_cli/sites_versions-clone",
vec![
(Some(r##"parent"##),
None,
Some(r##"Required. The target site for the cloned version, in the format: sites/ SITE_ID"##),
Some(true),
Some(false)),
(Some(r##"kv"##),
Some(r##"r"##),
Some(r##"Set various fields of the request structure, matching the key=value form"##),
Some(true),
Some(true)),
(Some(r##"v"##),
Some(r##"p"##),
Some(r##"Set various optional parameters, matching the key=value form"##),
Some(false),
Some(true)),
(Some(r##"out"##),
Some(r##"o"##),
Some(r##"Specify the file into which to write the program's output"##),
Some(false),
Some(false)),
]),
("versions-create",
Some(r##"Creates a new version for the specified site."##),
"Details at http://byron.github.io/google-apis-rs/google_firebasehosting1_beta1_cli/sites_versions-create",
vec![
(Some(r##"parent"##),
None,
Some(r##"Required. The site in which to create the version, in the format: sites/ SITE_ID"##),
Some(true),
Some(false)),
(Some(r##"kv"##),
Some(r##"r"##),
Some(r##"Set various fields of the request structure, matching the key=value form"##),
Some(true),
Some(true)),
(Some(r##"v"##),
Some(r##"p"##),
Some(r##"Set various optional parameters, matching the key=value form"##),
Some(false),
Some(true)),
(Some(r##"out"##),
Some(r##"o"##),
Some(r##"Specify the file into which to write the program's output"##),
Some(false),
Some(false)),
]),
("versions-delete",
Some(r##"Deletes the specified version."##),
"Details at http://byron.github.io/google-apis-rs/google_firebasehosting1_beta1_cli/sites_versions-delete",
vec![
(Some(r##"name"##),
None,
Some(r##"Required. The fully-qualified resource name for the version, in the format: sites/SITE_ID/versions/VERSION_ID"##),
Some(true),
Some(false)),
(Some(r##"v"##),
Some(r##"p"##),
Some(r##"Set various optional parameters, matching the key=value form"##),
Some(false),
Some(true)),
(Some(r##"out"##),
Some(r##"o"##),
Some(r##"Specify the file into which to write the program's output"##),
Some(false),
Some(false)),
]),
("versions-files-list",
Some(r##"Lists the remaining files to be uploaded for the specified version."##),
"Details at http://byron.github.io/google-apis-rs/google_firebasehosting1_beta1_cli/sites_versions-files-list",
vec![
(Some(r##"parent"##),
None,
Some(r##"Required. The version for which to list files, in the format: sites/SITE_ID /versions/VERSION_ID"##),
Some(true),
Some(false)),
(Some(r##"v"##),
Some(r##"p"##),
Some(r##"Set various optional parameters, matching the key=value form"##),
Some(false),
Some(true)),
(Some(r##"out"##),
Some(r##"o"##),
Some(r##"Specify the file into which to write the program's output"##),
Some(false),
Some(false)),
]),
("versions-list",
Some(r##"Lists the versions that have been created for the specified site. This list includes versions for both the default `live` channel and any active preview channels for the specified site."##),
"Details at http://byron.github.io/google-apis-rs/google_firebasehosting1_beta1_cli/sites_versions-list",
vec![
(Some(r##"parent"##),
None,
Some(r##"Required. The site or channel for which to list versions, in either of the following formats: - sites/SITE_ID - sites/SITE_ID/channels/CHANNEL_ID "##),
Some(true),
Some(false)),
(Some(r##"v"##),
Some(r##"p"##),
Some(r##"Set various optional parameters, matching the key=value form"##),
Some(false),
Some(true)),
(Some(r##"out"##),
Some(r##"o"##),
Some(r##"Specify the file into which to write the program's output"##),
Some(false),
Some(false)),
]),
("versions-patch",
Some(r##" Updates the specified metadata for the specified version. This method will fail with `FAILED_PRECONDITION` in the event of an invalid state transition. The supported [state](../sites.versions#versionstatus) transitions for a version are from `CREATED` to `FINALIZED`. Use [`DeleteVersion`](delete) to set the status of a version to `DELETED`."##),
"Details at http://byron.github.io/google-apis-rs/google_firebasehosting1_beta1_cli/sites_versions-patch",
vec![
(Some(r##"name"##),
None,
Some(r##"The fully-qualified resource name for the version, in the format: sites/ SITE_ID/versions/VERSION_ID This name is provided in the response body when you call [`CreateVersion`](sites.versions/create)."##),
Some(true),
Some(false)),
(Some(r##"kv"##),
Some(r##"r"##),
Some(r##"Set various fields of the request structure, matching the key=value form"##),
Some(true),
Some(true)),
(Some(r##"v"##),
Some(r##"p"##),
Some(r##"Set various optional parameters, matching the key=value form"##),
Some(false),
Some(true)),
(Some(r##"out"##),
Some(r##"o"##),
Some(r##"Specify the file into which to write the program's output"##),
Some(false),
Some(false)),
]),
("versions-populate-files",
Some(r##" Adds content files to the specified version. Each file must be under 2 GB."##),
"Details at http://byron.github.io/google-apis-rs/google_firebasehosting1_beta1_cli/sites_versions-populate-files",
vec![
(Some(r##"parent"##),
None,
Some(r##"Required. The version to which to add files, in the format: sites/SITE_ID /versions/VERSION_ID"##),
Some(true),
Some(false)),
(Some(r##"kv"##),
Some(r##"r"##),
Some(r##"Set various fields of the request structure, matching the key=value form"##),
Some(true),
Some(true)),
(Some(r##"v"##),
Some(r##"p"##),
Some(r##"Set various optional parameters, matching the key=value form"##),
Some(false),
Some(true)),
(Some(r##"out"##),
Some(r##"o"##),
Some(r##"Specify the file into which to write the program's output"##),
Some(false),
Some(false)),
]),
]),
];
let mut app = App::new("firebasehosting1-beta1")
.author("Sebastian Thiel <byronimo@gmail.com>")
.version("5.0.3+20230123")
.about("The Firebase Hosting REST API enables programmatic and customizable management and deployments to your Firebase-hosted sites. Use this REST API to create and manage channels and sites as well as to deploy new or updated hosting configurations and content files.")
.after_help("All documentation details can be found at http://byron.github.io/google-apis-rs/google_firebasehosting1_beta1_cli")
.arg(Arg::with_name("url")
.long("scope")
.help("Specify the authentication a method should be executed in. Each scope requires the user to grant this application permission to use it.If unset, it defaults to the shortest scope url for a particular method.")
.multiple(true)
.takes_value(true))
.arg(Arg::with_name("folder")
.long("config-dir")
.help("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")
.multiple(false)
.takes_value(true))
.arg(Arg::with_name("debug")
.long("debug")
.help("Debug print all errors")
.multiple(false)
.takes_value(false));
for &(main_command_name, about, ref subcommands) in arg_data.iter() {
let mut mcmd = SubCommand::with_name(main_command_name).about(about);
for &(sub_command_name, ref desc, url_info, ref args) in subcommands {
let mut scmd = SubCommand::with_name(sub_command_name);
if let &Some(desc) = desc {
scmd = scmd.about(desc);
}
scmd = scmd.after_help(url_info);
for &(ref arg_name, ref flag, ref desc, ref required, ref multi) in args {
let arg_name_str =
match (arg_name, flag) {
(&Some(an), _ ) => an,
(_ , &Some(f)) => f,
_ => unreachable!(),
};
let mut arg = Arg::with_name(arg_name_str)
.empty_values(false);
if let &Some(short_flag) = flag {
arg = arg.short(short_flag);
}
if let &Some(desc) = desc {
arg = arg.help(desc);
}
if arg_name.is_some() && flag.is_some() {
arg = arg.takes_value(true);
}
if let &Some(required) = required {
arg = arg.required(required);
}
if let &Some(multi) = multi {
arg = arg.multiple(multi);
}
scmd = scmd.arg(arg);
}
mcmd = mcmd.subcommand(scmd);
}
app = app.subcommand(mcmd);
}
let matches = app.get_matches();
let debug = matches.is_present("adebug");
let connector = hyper_rustls::HttpsConnectorBuilder::new().with_native_roots()
.https_or_http()
.enable_http1()
.build();
match Engine::new(matches, connector).await {
Err(err) => {
exit_status = err.exit_code;
writeln!(io::stderr(), "{}", err).ok();
},
Ok(engine) => {
if let Err(doit_err) = engine.doit().await {
exit_status = 1;
match doit_err {
DoitError::IoError(path, err) => {
writeln!(io::stderr(), "Failed to open output file '{}': {}", path, err).ok();
},
DoitError::ApiError(err) => {
if debug {
writeln!(io::stderr(), "{:#?}", err).ok();
} else {
writeln!(io::stderr(), "{}", err).ok();
}
}
}
}
}
}
std::process::exit(exit_status);
}