From d2a4e2ff8b16cb848869cc07b6c5a9107fb0a929 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sat, 2 May 2015 10:22:55 +0200 Subject: [PATCH] fix(CLI): added latest reference CLI code Just to have something to link to --- gen/drive2-cli/Cargo.toml | 6 +- gen/drive2-cli/README.md | 143 +- gen/drive2-cli/mkdocs.yml | 2 +- gen/drive2-cli/src/cmn.rs | 154 +- gen/drive2-cli/src/main.rs | 6342 +++++++----- gen/drive2/Cargo.toml | 2 +- gen/drive2/README.md | 4 +- gen/drive2/src/cmn.rs | 15 +- gen/drive2/src/lib.rs | 136 +- gen/groupsmigration1-cli/Cargo.toml | 6 +- gen/groupsmigration1-cli/README.md | 15 +- gen/groupsmigration1-cli/mkdocs.yml | 2 +- gen/groupsmigration1-cli/src/cmn.rs | 154 +- gen/groupsmigration1-cli/src/main.rs | 281 +- gen/groupsmigration1/Cargo.toml | 2 +- gen/groupsmigration1/README.md | 4 +- gen/groupsmigration1/src/cmn.rs | 61 +- gen/groupsmigration1/src/lib.rs | 183 +- gen/youtube3-cli/Cargo.toml | 1 - gen/youtube3-cli/README.md | 150 +- gen/youtube3-cli/src/cmn.rs | 154 +- gen/youtube3-cli/src/main.rs | 12954 ++++++++++++++++++++++--- gen/youtube3/README.md | 2 +- gen/youtube3/cargo.toml | 2 +- gen/youtube3/src/cmn.rs | 15 +- gen/youtube3/src/lib.rs | 25 +- 26 files changed, 16333 insertions(+), 4482 deletions(-) diff --git a/gen/drive2-cli/Cargo.toml b/gen/drive2-cli/Cargo.toml index b0d4ee2b08..6717c81aa4 100644 --- a/gen/drive2-cli/Cargo.toml +++ b/gen/drive2-cli/Cargo.toml @@ -4,7 +4,7 @@ [package] name = "google-drive2-cli" -version = "0.1.0+20150326" +version = "0.2.0+20150326" authors = ["Sebastian Thiel "] description = "A complete library to interact with drive (protocol v2)" repository = "https://github.com/Byron/google-apis-rs/tree/master/gen/drive2-cli" @@ -20,9 +20,7 @@ name = "drive2" hyper = "*" mime = "*" yup-oauth2 = "*" -docopt = "*" -docopt_macros = "*" -rustc-serialize = "*" +clap = "*" yup-hyper-mock = "*" serde = ">= 0.3.0" serde_macros = "*" diff --git a/gen/drive2-cli/README.md b/gen/drive2-cli/README.md index bb3da110f4..3fa68af848 100644 --- a/gen/drive2-cli/README.md +++ b/gen/drive2-cli/README.md @@ -10,79 +10,96 @@ capabilities. Errors will be printed to standard error, and cause the program's If data-structures are requested, these will be returned as pretty-printed JSON, to be useful as input to other tools. +Everything else about the *drive* API can be found at the +[official documentation site](https://developers.google.com/drive/). + # Usage -This documentation was generated from the *drive* API at revision *20150326*. The CLI is at version *0.1.0*. +This documentation was generated from the *drive* API at revision *20150326*. The CLI is at version *0.2.0*. ```bash - drive2 [options] about get [-p ...] [-o ] - drive2 [options] apps get [-p ...] [-o ] - drive2 [options] apps list [-p ...] [-o ] - drive2 [options] changes get [-p ...] [-o ] - drive2 [options] changes list [-p ...] [-o ] - drive2 [options] changes watch -r ... [-p ...] [-o ] - drive2 [options] channels stop -r ... [-p ...] - drive2 [options] children delete [-p ...] - drive2 [options] children get [-p ...] [-o ] - drive2 [options] children insert -r ... [-p ...] [-o ] - drive2 [options] children list [-p ...] [-o ] - drive2 [options] comments delete [-p ...] - drive2 [options] comments get [-p ...] [-o ] - drive2 [options] comments insert -r ... [-p ...] [-o ] - drive2 [options] comments list [-p ...] [-o ] - drive2 [options] comments patch -r ... [-p ...] [-o ] - drive2 [options] comments update -r ... [-p ...] [-o ] - drive2 [options] files copy -r ... [-p ...] [-o ] - drive2 [options] files delete [-p ...] - drive2 [options] files empty-trash [-p ...] - drive2 [options] files get [-p ...] [-o ] - drive2 [options] files insert -r ... -u (simple|resumable) [-p ...] [-o ] - drive2 [options] files list [-p ...] [-o ] - drive2 [options] files patch -r ... [-p ...] [-o ] - drive2 [options] files touch [-p ...] [-o ] - drive2 [options] files trash [-p ...] [-o ] - drive2 [options] files untrash [-p ...] [-o ] - drive2 [options] files update -r ... -u (simple|resumable) [-p ...] [-o ] - drive2 [options] files watch -r ... [-p ...] [-o ] - drive2 [options] parents delete [-p ...] - drive2 [options] parents get [-p ...] [-o ] - drive2 [options] parents insert -r ... [-p ...] [-o ] - drive2 [options] parents list [-p ...] [-o ] - drive2 [options] permissions delete [-p ...] - drive2 [options] permissions get [-p ...] [-o ] - drive2 [options] permissions get-id-for-email [-p ...] [-o ] - drive2 [options] permissions insert -r ... [-p ...] [-o ] - drive2 [options] permissions list [-p ...] [-o ] - drive2 [options] permissions patch -r ... [-p ...] [-o ] - drive2 [options] permissions update -r ... [-p ...] [-o ] - drive2 [options] properties delete [-p ...] - drive2 [options] properties get [-p ...] [-o ] - drive2 [options] properties insert -r ... [-p ...] [-o ] - drive2 [options] properties list [-p ...] [-o ] - drive2 [options] properties patch -r ... [-p ...] [-o ] - drive2 [options] properties update -r ... [-p ...] [-o ] - drive2 [options] realtime get [-p ...] [-o ] - drive2 [options] realtime update -u (simple|resumable) [-p ...] - drive2 [options] replies delete [-p ...] - drive2 [options] replies get [-p ...] [-o ] - drive2 [options] replies insert -r ... [-p ...] [-o ] - drive2 [options] replies list [-p ...] [-o ] - drive2 [options] replies patch -r ... [-p ...] [-o ] - drive2 [options] replies update -r ... [-p ...] [-o ] - drive2 [options] revisions delete [-p ...] - drive2 [options] revisions get [-p ...] [-o ] - drive2 [options] revisions list [-p ...] [-o ] - drive2 [options] revisions patch -r ... [-p ...] [-o ] - drive2 [options] revisions update -r ... [-p ...] [-o ] +drive2 [options] + about + get [-p ]... [-o ] + apps + get [-p ]... [-o ] + list [-p ]... [-o ] + changes + get [-p ]... [-o ] + list [-p ]... [-o ] + watch (-r )... [-p ]... [-o ] + channels + stop (-r )... [-p ]... + children + delete [-p ]... + get [-p ]... [-o ] + insert (-r )... [-p ]... [-o ] + list [-p ]... [-o ] + comments + delete [-p ]... + get [-p ]... [-o ] + insert (-r )... [-p ]... [-o ] + list [-p ]... [-o ] + patch (-r )... [-p ]... [-o ] + update (-r )... [-p ]... [-o ] + files + copy (-r )... [-p ]... [-o ] + delete [-p ]... + empty-trash [-p ]... + get [-p ]... [-o ] + insert (-r )... (-u (simple|resumable) -f [-m ]) [-p ]... [-o ] + list [-p ]... [-o ] + patch (-r )... [-p ]... [-o ] + touch [-p ]... [-o ] + trash [-p ]... [-o ] + untrash [-p ]... [-o ] + update (-r )... (-u (simple|resumable) -f [-m ]) [-p ]... [-o ] + watch (-r )... [-p ]... [-o ] + parents + delete [-p ]... + get [-p ]... [-o ] + insert (-r )... [-p ]... [-o ] + list [-p ]... [-o ] + permissions + delete [-p ]... + get [-p ]... [-o ] + get-id-for-email [-p ]... [-o ] + insert (-r )... [-p ]... [-o ] + list [-p ]... [-o ] + patch (-r )... [-p ]... [-o ] + update (-r )... [-p ]... [-o ] + properties + delete [-p ]... + get [-p ]... [-o ] + insert (-r )... [-p ]... [-o ] + list [-p ]... [-o ] + patch (-r )... [-p ]... [-o ] + update (-r )... [-p ]... [-o ] + realtime + get [-p ]... [-o ] + update (-u (simple|resumable) -f [-m ]) [-p ]... + replies + delete [-p ]... + get [-p ]... [-o ] + insert (-r )... [-p ]... [-o ] + list [-p ]... [-o ] + patch (-r )... [-p ]... [-o ] + update (-r )... [-p ]... [-o ] + revisions + delete [-p ]... + get [-p ]... [-o ] + list [-p ]... [-o ] + patch (-r )... [-p ]... [-o ] + update (-r )... [-p ]... [-o ] drive2 --help All documentation details can be found at -http://byron.github.io/google-apis-rs/google_drive2_cli/index.html +http://byron.github.io/google-apis-rs/google_drive2_cli Configuration: - --scope + [--scope ]... Specify the authentication a method should be executed in. Each scope - requires the user to grant this application permission to use it. + requires the user to grant this application permission to use it. If unset, it defaults to the shortest scope url for a particular method. --config-dir A directory into which we will store our persistent data. Defaults to diff --git a/gen/drive2-cli/mkdocs.yml b/gen/drive2-cli/mkdocs.yml index e9bde4857e..7f9243abd6 100644 --- a/gen/drive2-cli/mkdocs.yml +++ b/gen/drive2-cli/mkdocs.yml @@ -1,4 +1,4 @@ -site_name: drive v0.1.0+20150326 +site_name: drive v0.2.0+20150326 site_url: http://byron.github.io/google-apis-rs/google-drive2-cli site_description: Write integrating applications with bcore diff --git a/gen/drive2-cli/src/cmn.rs b/gen/drive2-cli/src/cmn.rs index 4ba65df643..f784b283db 100644 --- a/gen/drive2-cli/src/cmn.rs +++ b/gen/drive2-cli/src/cmn.rs @@ -1,8 +1,9 @@ // COPY OF 'src/rust/cli/cmn.rs' // DO NOT EDIT use oauth2::{ApplicationSecret, ConsoleApplicationSecret, TokenStorage, Token}; -use rustc_serialize::json; +use serde::json; use mime::Mime; +use clap::{App, SubCommand}; use std::fs; use std::env; @@ -17,6 +18,46 @@ use std::default::Default; const FIELD_SEP: char = '.'; +pub enum CallType { + Upload(UploadProtocol), + Standard, +} + +pub enum UploadProtocol { + Simple, + Resumable, +} + +impl AsRef for UploadProtocol { + fn as_ref(&self) -> &str { + match *self { + UploadProtocol::Simple => "simple", + UploadProtocol::Resumable => "resumable" + } + } +} + +impl AsRef for CallType { + fn as_ref(&self) -> &str { + match *self { + CallType::Upload(ref proto) => proto.as_ref(), + CallType::Standard => "standard-request" + } + } +} + +impl FromStr for UploadProtocol { + type Err = String; + + fn from_str(s: &str) -> Result { + match s { + "simple" => Ok(UploadProtocol::Simple), + "resumable" => Ok(UploadProtocol::Resumable), + _ => Err(format!("Protocol '{}' is unknown", s)), + } + } +} + #[derive(Clone, Default)] pub struct FieldCursor(Vec); @@ -112,6 +153,17 @@ pub fn parse_kv_arg<'a>(kv: &'a str, err: &mut InvalidOptionsError, for_hashmap: } } +pub fn protocol_from_str(name: &str, valid_protocols: Vec, err: &mut InvalidOptionsError) -> CallType { + CallType::Upload( + match UploadProtocol::from_str(name) { + Ok(up) => up, + Err(msg) => { + err.issues.push(CLIError::InvalidUploadProtocol(name.to_string(), valid_protocols)); + UploadProtocol::Simple + } + }) +} + pub fn input_file_from_opts(file_path: &str, err: &mut InvalidOptionsError) -> Option { match fs::File::open(file_path) { Ok(f) => Some(f), @@ -132,13 +184,14 @@ pub fn input_mime_from_opts(mime: &str, err: &mut InvalidOptionsError) -> Option } } -// May panic if we can't open the file - this is anticipated, we can't currently communicate this -// kind of error: TODO: fix this architecture :) -pub fn writer_from_opts(flag: bool, arg: &str) -> Box { - if !flag || arg == "-" { - Box::new(stdout()) - } else { - Box::new(fs::OpenOptions::new().create(true).write(true).open(arg).unwrap()) +pub fn writer_from_opts(arg: Option<&str>) -> Result, io::Error> { + let f = arg.unwrap_or("-"); + match f { + "-" => Ok(Box::new(stdout())), + _ => match fs::OpenOptions::new().create(true).write(true).open(f) { + Ok(f) => Ok(Box::new(f)), + Err(io_err) => Err(io_err), + } } } @@ -151,7 +204,7 @@ pub fn arg_from_str(arg: &str, err: &mut InvalidOptionsError, match FromStr::from_str(arg) { Err(perr) => { err.issues.push( - CLIError::ParseError((arg_name, arg_type, arg.to_string(), format!("{}", perr))) + CLIError::ParseError(arg_name, arg_type, arg.to_string(), format!("{}", perr)) ); Default::default() }, @@ -171,49 +224,47 @@ impl JsonTokenStorage { } impl TokenStorage for JsonTokenStorage { - type Error = io::Error; + type Error = json::Error; // NOTE: logging might be interesting, currently we swallow all errors - fn set(&mut self, scope_hash: u64, _: &Vec<&str>, token: Option) -> Option { + fn set(&mut self, scope_hash: u64, _: &Vec<&str>, token: Option) -> Result<(), json::Error> { match token { None => { match fs::remove_file(self.path(scope_hash)) { Err(err) => match err.kind() { - io::ErrorKind::NotFound => None, - _ => Some(err) + io::ErrorKind::NotFound => Ok(()), + _ => Err(json::Error::IoError(err)) }, - Ok(_) => None + Ok(_) => Ok(()), } } Some(token) => { - let json_token = json::encode(&token).unwrap(); match fs::OpenOptions::new().create(true).write(true).open(&self.path(scope_hash)) { Ok(mut f) => { - match f.write(json_token.as_bytes()) { - Ok(_) => None, - Err(io_err) => Some(io_err), + match json::to_writer_pretty(&mut f, &token) { + Ok(_) => Ok(()), + Err(io_err) => Err(json::Error::IoError(io_err)), } }, - Err(io_err) => Some(io_err) + Err(io_err) => Err(json::Error::IoError(io_err)) } } } } - fn get(&self, scope_hash: u64, _: &Vec<&str>) -> Result, io::Error> { + fn get(&self, scope_hash: u64, _: &Vec<&str>) -> Result, json::Error> { match fs::File::open(&self.path(scope_hash)) { Ok(mut f) => { - let mut json_string = String::new(); - match f.read_to_string(&mut json_string) { - Ok(_) => Ok(Some(json::decode::(&json_string).unwrap())), - Err(io_err) => Err(io_err), + match json::de::from_reader(f) { + Ok(token) => Ok(Some(token)), + Err(err) => Err(err), } }, Err(io_err) => { match io_err.kind() { io::ErrorKind::NotFound => Ok(None), - _ => Err(io_err) + _ => Err(json::Error::IoError(io_err)) } } } @@ -223,7 +274,7 @@ impl TokenStorage for JsonTokenStorage { #[derive(Debug)] pub enum ApplicationSecretError { - DecoderError((String, json::DecoderError)), + DecoderError((String, json::Error)), FormatError(String), } @@ -311,11 +362,14 @@ impl fmt::Display for FieldError { #[derive(Debug)] pub enum CLIError { Configuration(ConfigurationError), - ParseError((&'static str, &'static str, String, String)), + ParseError(&'static str, &'static str, String, String), UnknownParameter(String), + InvalidUploadProtocol(String, Vec), InvalidKeyValueSyntax(String, bool), Input(InputError), Field(FieldError), + MissingCommandError, + MissingMethodError(String), } impl fmt::Display for CLIError { @@ -324,7 +378,9 @@ impl fmt::Display for CLIError { CLIError::Configuration(ref err) => write!(f, "Configuration -> {}", err), CLIError::Input(ref err) => write!(f, "Input -> {}", err), CLIError::Field(ref err) => write!(f, "Field -> {}", err), - CLIError::ParseError((arg_name, type_name, ref value, ref err_desc)) + CLIError::InvalidUploadProtocol(ref proto_name, ref valid_names) + => writeln!(f, "'{}' is not a valid upload protocol. Choose from one of {}", proto_name, valid_names.connect(", ")), + CLIError::ParseError(arg_name, type_name, ref value, ref err_desc) => writeln!(f, "Failed to parse argument '{}' with value '{}' as {} with error: {}", arg_name, value, type_name, err_desc), CLIError::UnknownParameter(ref param_name) @@ -333,6 +389,8 @@ impl fmt::Display for CLIError { let hashmap_info = if is_hashmap { "hashmap " } else { "" }; writeln!(f, "'{}' does not match {}pattern =", kv, hashmap_info) }, + CLIError::MissingCommandError => writeln!(f, "Please specify the main sub-command"), + CLIError::MissingMethodError(ref cmd) => writeln!(f, "Please specify the method to call on the '{}' command", cmd), } } } @@ -399,7 +457,7 @@ pub fn assure_config_dir_exists(dir: &str) -> Result { pub fn application_secret_from_directory(dir: &str, secret_basename: &str, - json_app_secret: &str) + json_console_secret: &str) -> Result { let secret_path = Path::new(dir).join(secret_basename); let secret_str = || secret_path.as_path().to_str().unwrap().to_string(); @@ -418,7 +476,10 @@ pub fn application_secret_from_directory(dir: &str, err = match fs::OpenOptions::new().create(true).write(true).open(&secret_path) { Err(cfe) => cfe, Ok(mut f) => { - match f.write(json_app_secret.as_bytes()) { + // Assure we convert 'ugly' json string into pretty one + let console_secret: ConsoleApplicationSecret + = json::from_str(json_console_secret).unwrap(); + match json::to_writer_pretty(&mut f, &console_secret) { Err(io_err) => io_err, Ok(_) => continue, } @@ -429,23 +490,24 @@ pub fn application_secret_from_directory(dir: &str, return secret_io_error(err) }, Ok(mut f) => { - let mut json_encoded_secret = String::new(); - if let Err(io_err) = f.read_to_string(&mut json_encoded_secret) { - return secret_io_error(io_err) - } - match json::decode::(&json_encoded_secret) { - Err(json_decode_error) => return Err(CLIError::Configuration( - ConfigurationError::Secret(ApplicationSecretError::DecoderError( - (secret_str(), json_decode_error) + match json::de::from_reader::<_, ConsoleApplicationSecret>(f) { + Err(json::Error::IoError(err)) => + return secret_io_error(err), + Err(json_err) => + return Err(CLIError::Configuration( + ConfigurationError::Secret( + ApplicationSecretError::DecoderError( + (secret_str(), json_err) )))), - Ok(console_secret) => match console_secret.installed { - Some(secret) => return Ok(secret), - None => return Err( - CLIError::Configuration( - ConfigurationError::Secret( - ApplicationSecretError::FormatError(secret_str()) - ))) - }, + Ok(console_secret) => + match console_secret.installed { + Some(secret) => return Ok(secret), + None => return Err( + CLIError::Configuration( + ConfigurationError::Secret( + ApplicationSecretError::FormatError(secret_str()) + ))) + }, } } } diff --git a/gen/drive2-cli/src/main.rs b/gen/drive2-cli/src/main.rs index 2f657f55fb..d1043e9554 100644 --- a/gen/drive2-cli/src/main.rs +++ b/gen/drive2-cli/src/main.rs @@ -2,13 +2,11 @@ // This file was generated automatically from 'src/mako/cli/main.rs.mako' // DO NOT EDIT ! #![feature(plugin, exit_status)] -#![plugin(docopt_macros)] #![allow(unused_variables, unused_imports, dead_code, unused_mut)] -extern crate docopt; +extern crate clap; extern crate yup_oauth2 as oauth2; extern crate yup_hyper_mock as mock; -extern crate rustc_serialize; extern crate serde; extern crate hyper; extern crate mime; @@ -16,111 +14,37 @@ extern crate google_drive2 as api; use std::env; use std::io::{self, Write}; - -docopt!(Options derive Debug, " -Usage: - drive2 [options] about get [-p ...] [-o ] - drive2 [options] apps get [-p ...] [-o ] - drive2 [options] apps list [-p ...] [-o ] - drive2 [options] changes get [-p ...] [-o ] - drive2 [options] changes list [-p ...] [-o ] - drive2 [options] changes watch -r ... [-p ...] [-o ] - drive2 [options] channels stop -r ... [-p ...] - drive2 [options] children delete [-p ...] - drive2 [options] children get [-p ...] [-o ] - drive2 [options] children insert -r ... [-p ...] [-o ] - drive2 [options] children list [-p ...] [-o ] - drive2 [options] comments delete [-p ...] - drive2 [options] comments get [-p ...] [-o ] - drive2 [options] comments insert -r ... [-p ...] [-o ] - drive2 [options] comments list [-p ...] [-o ] - drive2 [options] comments patch -r ... [-p ...] [-o ] - drive2 [options] comments update -r ... [-p ...] [-o ] - drive2 [options] files copy -r ... [-p ...] [-o ] - drive2 [options] files delete [-p ...] - drive2 [options] files empty-trash [-p ...] - drive2 [options] files get [-p ...] [-o ] - drive2 [options] files insert -r ... -u (simple|resumable) [-p ...] [-o ] - drive2 [options] files list [-p ...] [-o ] - drive2 [options] files patch -r ... [-p ...] [-o ] - drive2 [options] files touch [-p ...] [-o ] - drive2 [options] files trash [-p ...] [-o ] - drive2 [options] files untrash [-p ...] [-o ] - drive2 [options] files update -r ... -u (simple|resumable) [-p ...] [-o ] - drive2 [options] files watch -r ... [-p ...] [-o ] - drive2 [options] parents delete [-p ...] - drive2 [options] parents get [-p ...] [-o ] - drive2 [options] parents insert -r ... [-p ...] [-o ] - drive2 [options] parents list [-p ...] [-o ] - drive2 [options] permissions delete [-p ...] - drive2 [options] permissions get [-p ...] [-o ] - drive2 [options] permissions get-id-for-email [-p ...] [-o ] - drive2 [options] permissions insert -r ... [-p ...] [-o ] - drive2 [options] permissions list [-p ...] [-o ] - drive2 [options] permissions patch -r ... [-p ...] [-o ] - drive2 [options] permissions update -r ... [-p ...] [-o ] - drive2 [options] properties delete [-p ...] - drive2 [options] properties get [-p ...] [-o ] - drive2 [options] properties insert -r ... [-p ...] [-o ] - drive2 [options] properties list [-p ...] [-o ] - drive2 [options] properties patch -r ... [-p ...] [-o ] - drive2 [options] properties update -r ... [-p ...] [-o ] - drive2 [options] realtime get [-p ...] [-o ] - drive2 [options] realtime update -u (simple|resumable) [-p ...] - drive2 [options] replies delete [-p ...] - drive2 [options] replies get [-p ...] [-o ] - drive2 [options] replies insert -r ... [-p ...] [-o ] - drive2 [options] replies list [-p ...] [-o ] - drive2 [options] replies patch -r ... [-p ...] [-o ] - drive2 [options] replies update -r ... [-p ...] [-o ] - drive2 [options] revisions delete [-p ...] - drive2 [options] revisions get [-p ...] [-o ] - drive2 [options] revisions list [-p ...] [-o ] - drive2 [options] revisions patch -r ... [-p ...] [-o ] - drive2 [options] revisions update -r ... [-p ...] [-o ] - drive2 --help - -All documentation details can be found at -http://byron.github.io/google-apis-rs/google_drive2_cli/index.html - -Configuration: - --scope - 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. - --config-dir - A directory into which we will store our persistent data. Defaults to - a user-writable directory that we will create during the first invocation. - [default: ~/.google-service-cli] - --debug - Output all server communication to standard error. `tx` and `rx` are placed - into the same stream. - --debug-auth - Output all communication related to authentication to standard error. `tx` - and `rx` are placed into the same stream. -"); +use clap::{App, SubCommand, Arg}; mod cmn; + use cmn::{InvalidOptionsError, CLIError, JsonTokenStorage, arg_from_str, writer_from_opts, parse_kv_arg, - input_file_from_opts, input_mime_from_opts, FieldCursor, FieldError}; + input_file_from_opts, input_mime_from_opts, FieldCursor, FieldError, CallType, UploadProtocol, + protocol_from_str}; use std::default::Default; use std::str::FromStr; use oauth2::{Authenticator, DefaultAuthenticatorDelegate}; -use rustc_serialize::json; +use serde::json; +use clap::ArgMatches; -struct Engine { - opt: Options, +enum DoitError { + IoError(String, io::Error), + ApiError(api::Error), +} + +struct Engine<'n, 'a> { + opt: ArgMatches<'n, 'a>, hub: api::Drive>, } -impl Engine { - fn _about_get(&self, dry_run: bool, err: &mut InvalidOptionsError) - -> Option { +impl<'n, 'a> Engine<'n, 'a> { + fn _about_get(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { let mut call = self.hub.about().get(); - for parg in self.opt.arg_v.iter() { + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { let (key, value) = parse_kv_arg(&*parg, err, false); match key { "start-change-id" => { @@ -150,32 +74,35 @@ impl Engine { _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), } } - let protocol = "standard-request"; + let protocol = CallType::Standard; if dry_run { - None + Ok(()) } else { assert!(err.issues.len() == 0); - if self.opt.flag_scope.len() > 0 { - call = call.add_scope(&self.opt.flag_scope); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); } - let mut ostream = writer_from_opts(self.opt.flag_o, &self.opt.arg_out); + 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 { - "standard-request" => call.doit(), - _ => unreachable!(), + CallType::Standard => call.doit(), + _ => unreachable!() } { - Err(api_err) => Some(api_err), + Err(api_err) => Err(DoitError::ApiError(api_err)), Ok((mut response, output_schema)) => { serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); - None + Ok(()) } } } } - fn _apps_get(&self, dry_run: bool, err: &mut InvalidOptionsError) - -> Option { - let mut call = self.hub.apps().get(&self.opt.arg_app_id); - for parg in self.opt.arg_v.iter() { + fn _apps_get(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + let mut call = self.hub.apps().get(opt.value_of("app-id").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { let (key, value) = parse_kv_arg(&*parg, err, false); match key { "alt" @@ -196,32 +123,35 @@ impl Engine { _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), } } - let protocol = "standard-request"; + let protocol = CallType::Standard; if dry_run { - None + Ok(()) } else { assert!(err.issues.len() == 0); - if self.opt.flag_scope.len() > 0 { - call = call.add_scope(&self.opt.flag_scope); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); } - let mut ostream = writer_from_opts(self.opt.flag_o, &self.opt.arg_out); + 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 { - "standard-request" => call.doit(), - _ => unreachable!(), + CallType::Standard => call.doit(), + _ => unreachable!() } { - Err(api_err) => Some(api_err), + Err(api_err) => Err(DoitError::ApiError(api_err)), Ok((mut response, output_schema)) => { serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); - None + Ok(()) } } } } - fn _apps_list(&self, dry_run: bool, err: &mut InvalidOptionsError) - -> Option { + fn _apps_list(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { let mut call = self.hub.apps().list(); - for parg in self.opt.arg_v.iter() { + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { let (key, value) = parse_kv_arg(&*parg, err, false); match key { "language-code" => { @@ -251,32 +181,35 @@ impl Engine { _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), } } - let protocol = "standard-request"; + let protocol = CallType::Standard; if dry_run { - None + Ok(()) } else { assert!(err.issues.len() == 0); - if self.opt.flag_scope.len() > 0 { - call = call.add_scope(&self.opt.flag_scope); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); } - let mut ostream = writer_from_opts(self.opt.flag_o, &self.opt.arg_out); + 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 { - "standard-request" => call.doit(), - _ => unreachable!(), + CallType::Standard => call.doit(), + _ => unreachable!() } { - Err(api_err) => Some(api_err), + Err(api_err) => Err(DoitError::ApiError(api_err)), Ok((mut response, output_schema)) => { serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); - None + Ok(()) } } } } - fn _changes_get(&self, dry_run: bool, err: &mut InvalidOptionsError) - -> Option { - let mut call = self.hub.changes().get(&self.opt.arg_change_id); - for parg in self.opt.arg_v.iter() { + fn _changes_get(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + let mut call = self.hub.changes().get(opt.value_of("change-id").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { let (key, value) = parse_kv_arg(&*parg, err, false); match key { "alt" @@ -297,32 +230,35 @@ impl Engine { _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), } } - let protocol = "standard-request"; + let protocol = CallType::Standard; if dry_run { - None + Ok(()) } else { assert!(err.issues.len() == 0); - if self.opt.flag_scope.len() > 0 { - call = call.add_scope(&self.opt.flag_scope); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); } - let mut ostream = writer_from_opts(self.opt.flag_o, &self.opt.arg_out); + 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 { - "standard-request" => call.doit(), - _ => unreachable!(), + CallType::Standard => call.doit(), + _ => unreachable!() } { - Err(api_err) => Some(api_err), + Err(api_err) => Err(DoitError::ApiError(api_err)), Ok((mut response, output_schema)) => { serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); - None + Ok(()) } } } } - fn _changes_list(&self, dry_run: bool, err: &mut InvalidOptionsError) - -> Option { + fn _changes_list(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { let mut call = self.hub.changes().list(); - for parg in self.opt.arg_v.iter() { + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { let (key, value) = parse_kv_arg(&*parg, err, false); match key { "start-change-id" => { @@ -358,34 +294,37 @@ impl Engine { _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), } } - let protocol = "standard-request"; + let protocol = CallType::Standard; if dry_run { - None + Ok(()) } else { assert!(err.issues.len() == 0); - if self.opt.flag_scope.len() > 0 { - call = call.add_scope(&self.opt.flag_scope); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); } - let mut ostream = writer_from_opts(self.opt.flag_o, &self.opt.arg_out); + 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 { - "standard-request" => call.doit(), - _ => unreachable!(), + CallType::Standard => call.doit(), + _ => unreachable!() } { - Err(api_err) => Some(api_err), + Err(api_err) => Err(DoitError::ApiError(api_err)), Ok((mut response, output_schema)) => { serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); - None + Ok(()) } } } } - fn _changes_watch(&self, dry_run: bool, err: &mut InvalidOptionsError) - -> Option { + fn _changes_watch(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { let mut request = api::Channel::default(); let mut field_cursor = FieldCursor::default(); - for kvarg in self.opt.arg_kv.iter() { + for kvarg in opt.values_of("kv").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(); @@ -440,7 +379,7 @@ impl Engine { } } let mut call = self.hub.changes().watch(request); - for parg in self.opt.arg_v.iter() { + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { let (key, value) = parse_kv_arg(&*parg, err, false); match key { "start-change-id" => { @@ -476,34 +415,37 @@ impl Engine { _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), } } - let protocol = "standard-request"; + let protocol = CallType::Standard; if dry_run { - None + Ok(()) } else { assert!(err.issues.len() == 0); - if self.opt.flag_scope.len() > 0 { - call = call.add_scope(&self.opt.flag_scope); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); } - let mut ostream = writer_from_opts(self.opt.flag_o, &self.opt.arg_out); + 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 { - "standard-request" => call.doit(), - _ => unreachable!(), + CallType::Standard => call.doit(), + _ => unreachable!() } { - Err(api_err) => Some(api_err), + Err(api_err) => Err(DoitError::ApiError(api_err)), Ok((mut response, output_schema)) => { serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); - None + Ok(()) } } } } - fn _channels_stop(&self, dry_run: bool, err: &mut InvalidOptionsError) - -> Option { + fn _channels_stop(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { let mut request = api::Channel::default(); let mut field_cursor = FieldCursor::default(); - for kvarg in self.opt.arg_kv.iter() { + for kvarg in opt.values_of("kv").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(); @@ -558,7 +500,7 @@ impl Engine { } } let mut call = self.hub.channels().stop(request); - for parg in self.opt.arg_v.iter() { + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { let (key, value) = parse_kv_arg(&*parg, err, false); match key { "alt" @@ -579,30 +521,30 @@ impl Engine { _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), } } - let protocol = "standard-request"; + let protocol = CallType::Standard; if dry_run { - None + Ok(()) } else { assert!(err.issues.len() == 0); - if self.opt.flag_scope.len() > 0 { - call = call.add_scope(&self.opt.flag_scope); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); } match match protocol { - "standard-request" => call.doit(), - _ => unreachable!(), + CallType::Standard => call.doit(), + _ => unreachable!() } { - Err(api_err) => Some(api_err), + Err(api_err) => Err(DoitError::ApiError(api_err)), Ok(mut response) => { - None + Ok(()) } } } } - fn _children_delete(&self, dry_run: bool, err: &mut InvalidOptionsError) - -> Option { - let mut call = self.hub.children().delete(&self.opt.arg_folder_id, &self.opt.arg_child_id); - for parg in self.opt.arg_v.iter() { + fn _children_delete(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + let mut call = self.hub.children().delete(opt.value_of("folder-id").unwrap_or(""), opt.value_of("child-id").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { let (key, value) = parse_kv_arg(&*parg, err, false); match key { "alt" @@ -623,30 +565,30 @@ impl Engine { _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), } } - let protocol = "standard-request"; + let protocol = CallType::Standard; if dry_run { - None + Ok(()) } else { assert!(err.issues.len() == 0); - if self.opt.flag_scope.len() > 0 { - call = call.add_scope(&self.opt.flag_scope); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); } match match protocol { - "standard-request" => call.doit(), - _ => unreachable!(), + CallType::Standard => call.doit(), + _ => unreachable!() } { - Err(api_err) => Some(api_err), + Err(api_err) => Err(DoitError::ApiError(api_err)), Ok(mut response) => { - None + Ok(()) } } } } - fn _children_get(&self, dry_run: bool, err: &mut InvalidOptionsError) - -> Option { - let mut call = self.hub.children().get(&self.opt.arg_folder_id, &self.opt.arg_child_id); - for parg in self.opt.arg_v.iter() { + fn _children_get(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + let mut call = self.hub.children().get(opt.value_of("folder-id").unwrap_or(""), opt.value_of("child-id").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { let (key, value) = parse_kv_arg(&*parg, err, false); match key { "alt" @@ -667,34 +609,37 @@ impl Engine { _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), } } - let protocol = "standard-request"; + let protocol = CallType::Standard; if dry_run { - None + Ok(()) } else { assert!(err.issues.len() == 0); - if self.opt.flag_scope.len() > 0 { - call = call.add_scope(&self.opt.flag_scope); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); } - let mut ostream = writer_from_opts(self.opt.flag_o, &self.opt.arg_out); + 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 { - "standard-request" => call.doit(), - _ => unreachable!(), + CallType::Standard => call.doit(), + _ => unreachable!() } { - Err(api_err) => Some(api_err), + Err(api_err) => Err(DoitError::ApiError(api_err)), Ok((mut response, output_schema)) => { serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); - None + Ok(()) } } } } - fn _children_insert(&self, dry_run: bool, err: &mut InvalidOptionsError) - -> Option { + fn _children_insert(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { let mut request = api::ChildReference::default(); let mut field_cursor = FieldCursor::default(); - for kvarg in self.opt.arg_kv.iter() { + for kvarg in opt.values_of("kv").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(); @@ -726,8 +671,8 @@ impl Engine { } } } - let mut call = self.hub.children().insert(request, &self.opt.arg_folder_id); - for parg in self.opt.arg_v.iter() { + let mut call = self.hub.children().insert(request, opt.value_of("folder-id").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { let (key, value) = parse_kv_arg(&*parg, err, false); match key { "alt" @@ -748,32 +693,35 @@ impl Engine { _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), } } - let protocol = "standard-request"; + let protocol = CallType::Standard; if dry_run { - None + Ok(()) } else { assert!(err.issues.len() == 0); - if self.opt.flag_scope.len() > 0 { - call = call.add_scope(&self.opt.flag_scope); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); } - let mut ostream = writer_from_opts(self.opt.flag_o, &self.opt.arg_out); + 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 { - "standard-request" => call.doit(), - _ => unreachable!(), + CallType::Standard => call.doit(), + _ => unreachable!() } { - Err(api_err) => Some(api_err), + Err(api_err) => Err(DoitError::ApiError(api_err)), Ok((mut response, output_schema)) => { serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); - None + Ok(()) } } } } - fn _children_list(&self, dry_run: bool, err: &mut InvalidOptionsError) - -> Option { - let mut call = self.hub.children().list(&self.opt.arg_folder_id); - for parg in self.opt.arg_v.iter() { + fn _children_list(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + let mut call = self.hub.children().list(opt.value_of("folder-id").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { let (key, value) = parse_kv_arg(&*parg, err, false); match key { "q" => { @@ -803,32 +751,35 @@ impl Engine { _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), } } - let protocol = "standard-request"; + let protocol = CallType::Standard; if dry_run { - None + Ok(()) } else { assert!(err.issues.len() == 0); - if self.opt.flag_scope.len() > 0 { - call = call.add_scope(&self.opt.flag_scope); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); } - let mut ostream = writer_from_opts(self.opt.flag_o, &self.opt.arg_out); + 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 { - "standard-request" => call.doit(), - _ => unreachable!(), + CallType::Standard => call.doit(), + _ => unreachable!() } { - Err(api_err) => Some(api_err), + Err(api_err) => Err(DoitError::ApiError(api_err)), Ok((mut response, output_schema)) => { serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); - None + Ok(()) } } } } - fn _comments_delete(&self, dry_run: bool, err: &mut InvalidOptionsError) - -> Option { - let mut call = self.hub.comments().delete(&self.opt.arg_file_id, &self.opt.arg_comment_id); - for parg in self.opt.arg_v.iter() { + fn _comments_delete(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + let mut call = self.hub.comments().delete(opt.value_of("file-id").unwrap_or(""), opt.value_of("comment-id").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { let (key, value) = parse_kv_arg(&*parg, err, false); match key { "alt" @@ -849,30 +800,30 @@ impl Engine { _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), } } - let protocol = "standard-request"; + let protocol = CallType::Standard; if dry_run { - None + Ok(()) } else { assert!(err.issues.len() == 0); - if self.opt.flag_scope.len() > 0 { - call = call.add_scope(&self.opt.flag_scope); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); } match match protocol { - "standard-request" => call.doit(), - _ => unreachable!(), + CallType::Standard => call.doit(), + _ => unreachable!() } { - Err(api_err) => Some(api_err), + Err(api_err) => Err(DoitError::ApiError(api_err)), Ok(mut response) => { - None + Ok(()) } } } } - fn _comments_get(&self, dry_run: bool, err: &mut InvalidOptionsError) - -> Option { - let mut call = self.hub.comments().get(&self.opt.arg_file_id, &self.opt.arg_comment_id); - for parg in self.opt.arg_v.iter() { + fn _comments_get(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + let mut call = self.hub.comments().get(opt.value_of("file-id").unwrap_or(""), opt.value_of("comment-id").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { let (key, value) = parse_kv_arg(&*parg, err, false); match key { "include-deleted" => { @@ -896,34 +847,37 @@ impl Engine { _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), } } - let protocol = "standard-request"; + let protocol = CallType::Standard; if dry_run { - None + Ok(()) } else { assert!(err.issues.len() == 0); - if self.opt.flag_scope.len() > 0 { - call = call.add_scope(&self.opt.flag_scope); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); } - let mut ostream = writer_from_opts(self.opt.flag_o, &self.opt.arg_out); + 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 { - "standard-request" => call.doit(), - _ => unreachable!(), + CallType::Standard => call.doit(), + _ => unreachable!() } { - Err(api_err) => Some(api_err), + Err(api_err) => Err(DoitError::ApiError(api_err)), Ok((mut response, output_schema)) => { serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); - None + Ok(()) } } } } - fn _comments_insert(&self, dry_run: bool, err: &mut InvalidOptionsError) - -> Option { + fn _comments_insert(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { let mut request = api::Comment::default(); let mut field_cursor = FieldCursor::default(); - for kvarg in self.opt.arg_kv.iter() { + for kvarg in opt.values_of("kv").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(); @@ -1040,8 +994,8 @@ impl Engine { } } } - let mut call = self.hub.comments().insert(request, &self.opt.arg_file_id); - for parg in self.opt.arg_v.iter() { + let mut call = self.hub.comments().insert(request, opt.value_of("file-id").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { let (key, value) = parse_kv_arg(&*parg, err, false); match key { "alt" @@ -1062,32 +1016,35 @@ impl Engine { _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), } } - let protocol = "standard-request"; + let protocol = CallType::Standard; if dry_run { - None + Ok(()) } else { assert!(err.issues.len() == 0); - if self.opt.flag_scope.len() > 0 { - call = call.add_scope(&self.opt.flag_scope); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); } - let mut ostream = writer_from_opts(self.opt.flag_o, &self.opt.arg_out); + 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 { - "standard-request" => call.doit(), - _ => unreachable!(), + CallType::Standard => call.doit(), + _ => unreachable!() } { - Err(api_err) => Some(api_err), + Err(api_err) => Err(DoitError::ApiError(api_err)), Ok((mut response, output_schema)) => { serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); - None + Ok(()) } } } } - fn _comments_list(&self, dry_run: bool, err: &mut InvalidOptionsError) - -> Option { - let mut call = self.hub.comments().list(&self.opt.arg_file_id); - for parg in self.opt.arg_v.iter() { + fn _comments_list(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + let mut call = self.hub.comments().list(opt.value_of("file-id").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { let (key, value) = parse_kv_arg(&*parg, err, false); match key { "updated-min" => { @@ -1120,34 +1077,37 @@ impl Engine { _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), } } - let protocol = "standard-request"; + let protocol = CallType::Standard; if dry_run { - None + Ok(()) } else { assert!(err.issues.len() == 0); - if self.opt.flag_scope.len() > 0 { - call = call.add_scope(&self.opt.flag_scope); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); } - let mut ostream = writer_from_opts(self.opt.flag_o, &self.opt.arg_out); + 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 { - "standard-request" => call.doit(), - _ => unreachable!(), + CallType::Standard => call.doit(), + _ => unreachable!() } { - Err(api_err) => Some(api_err), + Err(api_err) => Err(DoitError::ApiError(api_err)), Ok((mut response, output_schema)) => { serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); - None + Ok(()) } } } } - fn _comments_patch(&self, dry_run: bool, err: &mut InvalidOptionsError) - -> Option { + fn _comments_patch(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { let mut request = api::Comment::default(); let mut field_cursor = FieldCursor::default(); - for kvarg in self.opt.arg_kv.iter() { + for kvarg in opt.values_of("kv").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(); @@ -1264,8 +1224,8 @@ impl Engine { } } } - let mut call = self.hub.comments().patch(request, &self.opt.arg_file_id, &self.opt.arg_comment_id); - for parg in self.opt.arg_v.iter() { + let mut call = self.hub.comments().patch(request, opt.value_of("file-id").unwrap_or(""), opt.value_of("comment-id").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { let (key, value) = parse_kv_arg(&*parg, err, false); match key { "alt" @@ -1286,34 +1246,37 @@ impl Engine { _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), } } - let protocol = "standard-request"; + let protocol = CallType::Standard; if dry_run { - None + Ok(()) } else { assert!(err.issues.len() == 0); - if self.opt.flag_scope.len() > 0 { - call = call.add_scope(&self.opt.flag_scope); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); } - let mut ostream = writer_from_opts(self.opt.flag_o, &self.opt.arg_out); + 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 { - "standard-request" => call.doit(), - _ => unreachable!(), + CallType::Standard => call.doit(), + _ => unreachable!() } { - Err(api_err) => Some(api_err), + Err(api_err) => Err(DoitError::ApiError(api_err)), Ok((mut response, output_schema)) => { serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); - None + Ok(()) } } } } - fn _comments_update(&self, dry_run: bool, err: &mut InvalidOptionsError) - -> Option { + fn _comments_update(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { let mut request = api::Comment::default(); let mut field_cursor = FieldCursor::default(); - for kvarg in self.opt.arg_kv.iter() { + for kvarg in opt.values_of("kv").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(); @@ -1430,8 +1393,8 @@ impl Engine { } } } - let mut call = self.hub.comments().update(request, &self.opt.arg_file_id, &self.opt.arg_comment_id); - for parg in self.opt.arg_v.iter() { + let mut call = self.hub.comments().update(request, opt.value_of("file-id").unwrap_or(""), opt.value_of("comment-id").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { let (key, value) = parse_kv_arg(&*parg, err, false); match key { "alt" @@ -1452,34 +1415,37 @@ impl Engine { _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), } } - let protocol = "standard-request"; + let protocol = CallType::Standard; if dry_run { - None + Ok(()) } else { assert!(err.issues.len() == 0); - if self.opt.flag_scope.len() > 0 { - call = call.add_scope(&self.opt.flag_scope); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); } - let mut ostream = writer_from_opts(self.opt.flag_o, &self.opt.arg_out); + 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 { - "standard-request" => call.doit(), - _ => unreachable!(), + CallType::Standard => call.doit(), + _ => unreachable!() } { - Err(api_err) => Some(api_err), + Err(api_err) => Err(DoitError::ApiError(api_err)), Ok((mut response, output_schema)) => { serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); - None + Ok(()) } } } } - fn _files_copy(&self, dry_run: bool, err: &mut InvalidOptionsError) - -> Option { + fn _files_copy(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { let mut request = api::File::default(); let mut field_cursor = FieldCursor::default(); - for kvarg in self.opt.arg_kv.iter() { + for kvarg in opt.values_of("kv").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(); @@ -1974,8 +1940,8 @@ impl Engine { } } } - let mut call = self.hub.files().copy(request, &self.opt.arg_file_id); - for parg in self.opt.arg_v.iter() { + let mut call = self.hub.files().copy(request, opt.value_of("file-id").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { let (key, value) = parse_kv_arg(&*parg, err, false); match key { "visibility" => { @@ -2017,32 +1983,35 @@ impl Engine { _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), } } - let protocol = "standard-request"; + let protocol = CallType::Standard; if dry_run { - None + Ok(()) } else { assert!(err.issues.len() == 0); - if self.opt.flag_scope.len() > 0 { - call = call.add_scope(&self.opt.flag_scope); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); } - let mut ostream = writer_from_opts(self.opt.flag_o, &self.opt.arg_out); + 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 { - "standard-request" => call.doit(), - _ => unreachable!(), + CallType::Standard => call.doit(), + _ => unreachable!() } { - Err(api_err) => Some(api_err), + Err(api_err) => Err(DoitError::ApiError(api_err)), Ok((mut response, output_schema)) => { serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); - None + Ok(()) } } } } - fn _files_delete(&self, dry_run: bool, err: &mut InvalidOptionsError) - -> Option { - let mut call = self.hub.files().delete(&self.opt.arg_file_id); - for parg in self.opt.arg_v.iter() { + fn _files_delete(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + let mut call = self.hub.files().delete(opt.value_of("file-id").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { let (key, value) = parse_kv_arg(&*parg, err, false); match key { "alt" @@ -2063,30 +2032,30 @@ impl Engine { _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), } } - let protocol = "standard-request"; + let protocol = CallType::Standard; if dry_run { - None + Ok(()) } else { assert!(err.issues.len() == 0); - if self.opt.flag_scope.len() > 0 { - call = call.add_scope(&self.opt.flag_scope); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); } match match protocol { - "standard-request" => call.doit(), - _ => unreachable!(), + CallType::Standard => call.doit(), + _ => unreachable!() } { - Err(api_err) => Some(api_err), + Err(api_err) => Err(DoitError::ApiError(api_err)), Ok(mut response) => { - None + Ok(()) } } } } - fn _files_empty_trash(&self, dry_run: bool, err: &mut InvalidOptionsError) - -> Option { + fn _files_empty_trash(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { let mut call = self.hub.files().empty_trash(); - for parg in self.opt.arg_v.iter() { + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { let (key, value) = parse_kv_arg(&*parg, err, false); match key { "alt" @@ -2107,31 +2076,31 @@ impl Engine { _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), } } - let protocol = "standard-request"; + let protocol = CallType::Standard; if dry_run { - None + Ok(()) } else { assert!(err.issues.len() == 0); - if self.opt.flag_scope.len() > 0 { - call = call.add_scope(&self.opt.flag_scope); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); } match match protocol { - "standard-request" => call.doit(), - _ => unreachable!(), + CallType::Standard => call.doit(), + _ => unreachable!() } { - Err(api_err) => Some(api_err), + Err(api_err) => Err(DoitError::ApiError(api_err)), Ok(mut response) => { - None + Ok(()) } } } } - fn _files_get(&self, dry_run: bool, err: &mut InvalidOptionsError) - -> Option { + fn _files_get(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { let mut download_mode = false; - let mut call = self.hub.files().get(&self.opt.arg_file_id); - for parg in self.opt.arg_v.iter() { + let mut call = self.hub.files().get(opt.value_of("file-id").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { let (key, value) = parse_kv_arg(&*parg, err, false); match key { "update-viewed-date" => { @@ -2167,38 +2136,41 @@ impl Engine { _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), } } - let protocol = "standard-request"; + let protocol = CallType::Standard; if dry_run { - None + Ok(()) } else { assert!(err.issues.len() == 0); - if self.opt.flag_scope.len() > 0 { - call = call.add_scope(&self.opt.flag_scope); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); } - let mut ostream = writer_from_opts(self.opt.flag_o, &self.opt.arg_out); + 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 { - "standard-request" => call.doit(), - _ => unreachable!(), + CallType::Standard => call.doit(), + _ => unreachable!() } { - Err(api_err) => Some(api_err), + Err(api_err) => Err(DoitError::ApiError(api_err)), Ok((mut response, output_schema)) => { if !download_mode { serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); } else { io::copy(&mut response, &mut ostream).unwrap(); } - None + Ok(()) } } } } - fn _files_insert(&self, dry_run: bool, err: &mut InvalidOptionsError) - -> Option { + fn _files_insert(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { let mut request = api::File::default(); let mut field_cursor = FieldCursor::default(); - for kvarg in self.opt.arg_kv.iter() { + for kvarg in opt.values_of("kv").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(); @@ -2694,7 +2666,7 @@ impl Engine { } } let mut call = self.hub.files().insert(request); - for parg in self.opt.arg_v.iter() { + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { let (key, value) = parse_kv_arg(&*parg, err, false); match key { "visibility" => { @@ -2739,42 +2711,39 @@ impl Engine { _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), } } - let protocol = - if self.opt.cmd_simple { - "simple" - } else if self.opt.cmd_resumable { - "resumable" - } else { - unreachable!() - }; - let mut input_file = input_file_from_opts(&self.opt.arg_file, err); - let mime_type = input_mime_from_opts(&self.opt.arg_mime, err); + let vals = opt.values_of("mode").unwrap(); + let protocol = protocol_from_str(vals[0], ["simple", "resumable"].iter().map(|&v| v.to_string()).collect(), err); + let mut input_file = input_file_from_opts(vals[1], err); + let mime_type = input_mime_from_opts(opt.value_of("mime").unwrap_or("application/octet-stream"), err); if dry_run { - None + Ok(()) } else { assert!(err.issues.len() == 0); - if self.opt.flag_scope.len() > 0 { - call = call.add_scope(&self.opt.flag_scope); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); } - let mut ostream = writer_from_opts(self.opt.flag_o, &self.opt.arg_out); + 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 { - "simple" => call.upload(input_file.unwrap(), mime_type.unwrap()), - "resumable" => call.upload_resumable(input_file.unwrap(), mime_type.unwrap()), - _ => unreachable!(), + CallType::Upload(UploadProtocol::Simple) => call.upload(input_file.unwrap(), mime_type.unwrap()), + CallType::Upload(UploadProtocol::Resumable) => call.upload_resumable(input_file.unwrap(), mime_type.unwrap()), + CallType::Standard => unreachable!() } { - Err(api_err) => Some(api_err), + Err(api_err) => Err(DoitError::ApiError(api_err)), Ok((mut response, output_schema)) => { serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); - None + Ok(()) } } } } - fn _files_list(&self, dry_run: bool, err: &mut InvalidOptionsError) - -> Option { + fn _files_list(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { let mut call = self.hub.files().list(); - for parg in self.opt.arg_v.iter() { + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { let (key, value) = parse_kv_arg(&*parg, err, false); match key { "q" => { @@ -2810,1342 +2779,1354 @@ impl Engine { _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), } } - let protocol = "standard-request"; + let protocol = CallType::Standard; if dry_run { - None + Ok(()) } else { assert!(err.issues.len() == 0); - if self.opt.flag_scope.len() > 0 { - call = call.add_scope(&self.opt.flag_scope); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); } - let mut ostream = writer_from_opts(self.opt.flag_o, &self.opt.arg_out); - match match protocol { - "standard-request" => call.doit(), - _ => unreachable!(), - } { - Err(api_err) => Some(api_err), - Ok((mut response, output_schema)) => { - serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); - None - } - } - } - } - - fn _files_patch(&self, dry_run: bool, err: &mut InvalidOptionsError) - -> Option { - - let mut request = api::File::default(); - let mut field_cursor = FieldCursor::default(); - for kvarg in self.opt.arg_kv.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; - } - fn request_image_media_metadata_init(request: &mut api::File) { - if request.image_media_metadata.is_none() { - request.image_media_metadata = Some(Default::default()); - } - } - - fn request_image_media_metadata_location_init(request: &mut api::File) { - request_image_media_metadata_init(request); - if request.image_media_metadata.as_mut().unwrap().location.is_none() { - request.image_media_metadata.as_mut().unwrap().location = Some(Default::default()); - } - } - - fn request_indexable_text_init(request: &mut api::File) { - if request.indexable_text.is_none() { - request.indexable_text = Some(Default::default()); - } - } - - fn request_labels_init(request: &mut api::File) { - if request.labels.is_none() { - request.labels = Some(Default::default()); - } - } - - fn request_last_modifying_user_init(request: &mut api::File) { - if request.last_modifying_user.is_none() { - request.last_modifying_user = Some(Default::default()); - } - } - - fn request_last_modifying_user_picture_init(request: &mut api::File) { - request_last_modifying_user_init(request); - if request.last_modifying_user.as_mut().unwrap().picture.is_none() { - request.last_modifying_user.as_mut().unwrap().picture = Some(Default::default()); - } - } - - fn request_sharing_user_init(request: &mut api::File) { - if request.sharing_user.is_none() { - request.sharing_user = Some(Default::default()); - } - } - - fn request_sharing_user_picture_init(request: &mut api::File) { - request_sharing_user_init(request); - if request.sharing_user.as_mut().unwrap().picture.is_none() { - request.sharing_user.as_mut().unwrap().picture = Some(Default::default()); - } - } - - fn request_thumbnail_init(request: &mut api::File) { - if request.thumbnail.is_none() { - request.thumbnail = Some(Default::default()); - } - } - - fn request_user_permission_init(request: &mut api::File) { - if request.user_permission.is_none() { - request.user_permission = Some(Default::default()); - } - } - - fn request_video_media_metadata_init(request: &mut api::File) { - if request.video_media_metadata.is_none() { - request.video_media_metadata = Some(Default::default()); - } - } - - match &temp_cursor.to_string()[..] { - "mime-type" => { - request.mime_type = Some(value.unwrap_or("").to_string()); - }, - "last-viewed-by-me-date" => { - request.last_viewed_by_me_date = Some(value.unwrap_or("").to_string()); - }, - "app-data-contents" => { - request.app_data_contents = Some(arg_from_str(value.unwrap_or("false"), err, "app-data-contents", "boolean")); - }, - "thumbnail-link" => { - request.thumbnail_link = Some(value.unwrap_or("").to_string()); - }, - "labels.restricted" => { - request_labels_init(&mut request); - request.labels.as_mut().unwrap().restricted = Some(arg_from_str(value.unwrap_or("false"), err, "labels.restricted", "boolean")); - }, - "labels.hidden" => { - request_labels_init(&mut request); - request.labels.as_mut().unwrap().hidden = Some(arg_from_str(value.unwrap_or("false"), err, "labels.hidden", "boolean")); - }, - "labels.viewed" => { - request_labels_init(&mut request); - request.labels.as_mut().unwrap().viewed = Some(arg_from_str(value.unwrap_or("false"), err, "labels.viewed", "boolean")); - }, - "labels.starred" => { - request_labels_init(&mut request); - request.labels.as_mut().unwrap().starred = Some(arg_from_str(value.unwrap_or("false"), err, "labels.starred", "boolean")); - }, - "labels.trashed" => { - request_labels_init(&mut request); - request.labels.as_mut().unwrap().trashed = Some(arg_from_str(value.unwrap_or("false"), err, "labels.trashed", "boolean")); - }, - "indexable-text.text" => { - request_indexable_text_init(&mut request); - request.indexable_text.as_mut().unwrap().text = Some(value.unwrap_or("").to_string()); - }, - "explicitly-trashed" => { - request_indexable_text_init(&mut request); - request.explicitly_trashed = Some(arg_from_str(value.unwrap_or("false"), err, "explicitly-trashed", "boolean")); - }, - "etag" => { - request_indexable_text_init(&mut request); - request.etag = Some(value.unwrap_or("").to_string()); - }, - "last-modifying-user-name" => { - request_indexable_text_init(&mut request); - request.last_modifying_user_name = Some(value.unwrap_or("").to_string()); - }, - "writers-can-share" => { - request_indexable_text_init(&mut request); - request.writers_can_share = Some(arg_from_str(value.unwrap_or("false"), err, "writers-can-share", "boolean")); - }, - "id" => { - request_indexable_text_init(&mut request); - request.id = Some(value.unwrap_or("").to_string()); - }, - "sharing-user.picture.url" => { - request_sharing_user_picture_init(&mut request); - request.sharing_user.as_mut().unwrap().picture.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); - }, - "sharing-user.kind" => { - request_sharing_user_picture_init(&mut request); - request.sharing_user.as_mut().unwrap().kind = Some(value.unwrap_or("").to_string()); - }, - "sharing-user.display-name" => { - request_sharing_user_picture_init(&mut request); - request.sharing_user.as_mut().unwrap().display_name = Some(value.unwrap_or("").to_string()); - }, - "sharing-user.permission-id" => { - request_sharing_user_picture_init(&mut request); - request.sharing_user.as_mut().unwrap().permission_id = Some(value.unwrap_or("").to_string()); - }, - "sharing-user.is-authenticated-user" => { - request_sharing_user_picture_init(&mut request); - request.sharing_user.as_mut().unwrap().is_authenticated_user = Some(arg_from_str(value.unwrap_or("false"), err, "sharing-user.is-authenticated-user", "boolean")); - }, - "sharing-user.email-address" => { - request_sharing_user_picture_init(&mut request); - request.sharing_user.as_mut().unwrap().email_address = Some(value.unwrap_or("").to_string()); - }, - "video-media-metadata.width" => { - request_video_media_metadata_init(&mut request); - request.video_media_metadata.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "video-media-metadata.width", "integer")); - }, - "video-media-metadata.duration-millis" => { - request_video_media_metadata_init(&mut request); - request.video_media_metadata.as_mut().unwrap().duration_millis = Some(value.unwrap_or("").to_string()); - }, - "video-media-metadata.height" => { - request_video_media_metadata_init(&mut request); - request.video_media_metadata.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "video-media-metadata.height", "integer")); - }, - "last-modifying-user.picture.url" => { - request_last_modifying_user_picture_init(&mut request); - request.last_modifying_user.as_mut().unwrap().picture.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); - }, - "last-modifying-user.kind" => { - request_last_modifying_user_picture_init(&mut request); - request.last_modifying_user.as_mut().unwrap().kind = Some(value.unwrap_or("").to_string()); - }, - "last-modifying-user.display-name" => { - request_last_modifying_user_picture_init(&mut request); - request.last_modifying_user.as_mut().unwrap().display_name = Some(value.unwrap_or("").to_string()); - }, - "last-modifying-user.permission-id" => { - request_last_modifying_user_picture_init(&mut request); - request.last_modifying_user.as_mut().unwrap().permission_id = Some(value.unwrap_or("").to_string()); - }, - "last-modifying-user.is-authenticated-user" => { - request_last_modifying_user_picture_init(&mut request); - request.last_modifying_user.as_mut().unwrap().is_authenticated_user = Some(arg_from_str(value.unwrap_or("false"), err, "last-modifying-user.is-authenticated-user", "boolean")); - }, - "last-modifying-user.email-address" => { - request_last_modifying_user_picture_init(&mut request); - request.last_modifying_user.as_mut().unwrap().email_address = Some(value.unwrap_or("").to_string()); - }, - "copyable" => { - request_last_modifying_user_init(&mut request); - request.copyable = Some(arg_from_str(value.unwrap_or("false"), err, "copyable", "boolean")); - }, - "folder-color-rgb" => { - request_last_modifying_user_init(&mut request); - request.folder_color_rgb = Some(value.unwrap_or("").to_string()); - }, - "owner-names" => { - request_last_modifying_user_init(&mut request); - if request.owner_names.is_none() { - request.owner_names = Some(Default::default()); - } - request.owner_names.as_mut().unwrap().push(value.unwrap_or("").to_string()); - }, - "shared-with-me-date" => { - request_last_modifying_user_init(&mut request); - request.shared_with_me_date = Some(value.unwrap_or("").to_string()); - }, - "web-view-link" => { - request_last_modifying_user_init(&mut request); - request.web_view_link = Some(value.unwrap_or("").to_string()); - }, - "version" => { - request_last_modifying_user_init(&mut request); - request.version = Some(value.unwrap_or("").to_string()); - }, - "export-links" => { - request_last_modifying_user_init(&mut request); - if request.export_links.is_none() { - request.export_links = Some(Default::default()); - } - let (key, value) = parse_kv_arg(value.unwrap_or(""), err, true); - request.export_links.as_mut().unwrap().insert(key.to_string(), value.unwrap_or("").to_string()); - }, - "shared" => { - request_last_modifying_user_init(&mut request); - request.shared = Some(arg_from_str(value.unwrap_or("false"), err, "shared", "boolean")); - }, - "thumbnail.mime-type" => { - request_thumbnail_init(&mut request); - request.thumbnail.as_mut().unwrap().mime_type = Some(value.unwrap_or("").to_string()); - }, - "thumbnail.image" => { - request_thumbnail_init(&mut request); - request.thumbnail.as_mut().unwrap().image = Some(value.unwrap_or("").to_string()); - }, - "open-with-links" => { - request_thumbnail_init(&mut request); - if request.open_with_links.is_none() { - request.open_with_links = Some(Default::default()); - } - let (key, value) = parse_kv_arg(value.unwrap_or(""), err, true); - request.open_with_links.as_mut().unwrap().insert(key.to_string(), value.unwrap_or("").to_string()); - }, - "image-media-metadata.exposure-bias" => { - request_image_media_metadata_init(&mut request); - request.image_media_metadata.as_mut().unwrap().exposure_bias = Some(arg_from_str(value.unwrap_or("0.0"), err, "image-media-metadata.exposure-bias", "number")); - }, - "image-media-metadata.exposure-time" => { - request_image_media_metadata_init(&mut request); - request.image_media_metadata.as_mut().unwrap().exposure_time = Some(arg_from_str(value.unwrap_or("0.0"), err, "image-media-metadata.exposure-time", "number")); - }, - "image-media-metadata.max-aperture-value" => { - request_image_media_metadata_init(&mut request); - request.image_media_metadata.as_mut().unwrap().max_aperture_value = Some(arg_from_str(value.unwrap_or("0.0"), err, "image-media-metadata.max-aperture-value", "number")); - }, - "image-media-metadata.width" => { - request_image_media_metadata_init(&mut request); - request.image_media_metadata.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "image-media-metadata.width", "integer")); - }, - "image-media-metadata.focal-length" => { - request_image_media_metadata_init(&mut request); - request.image_media_metadata.as_mut().unwrap().focal_length = Some(arg_from_str(value.unwrap_or("0.0"), err, "image-media-metadata.focal-length", "number")); - }, - "image-media-metadata.camera-make" => { - request_image_media_metadata_init(&mut request); - request.image_media_metadata.as_mut().unwrap().camera_make = Some(value.unwrap_or("").to_string()); - }, - "image-media-metadata.exposure-mode" => { - request_image_media_metadata_init(&mut request); - request.image_media_metadata.as_mut().unwrap().exposure_mode = Some(value.unwrap_or("").to_string()); - }, - "image-media-metadata.color-space" => { - request_image_media_metadata_init(&mut request); - request.image_media_metadata.as_mut().unwrap().color_space = Some(value.unwrap_or("").to_string()); - }, - "image-media-metadata.location.latitude" => { - request_image_media_metadata_location_init(&mut request); - request.image_media_metadata.as_mut().unwrap().location.as_mut().unwrap().latitude = Some(arg_from_str(value.unwrap_or("0.0"), err, "image-media-metadata.location.latitude", "number")); - }, - "image-media-metadata.location.altitude" => { - request_image_media_metadata_location_init(&mut request); - request.image_media_metadata.as_mut().unwrap().location.as_mut().unwrap().altitude = Some(arg_from_str(value.unwrap_or("0.0"), err, "image-media-metadata.location.altitude", "number")); - }, - "image-media-metadata.location.longitude" => { - request_image_media_metadata_location_init(&mut request); - request.image_media_metadata.as_mut().unwrap().location.as_mut().unwrap().longitude = Some(arg_from_str(value.unwrap_or("0.0"), err, "image-media-metadata.location.longitude", "number")); - }, - "image-media-metadata.subject-distance" => { - request_image_media_metadata_location_init(&mut request); - request.image_media_metadata.as_mut().unwrap().subject_distance = Some(arg_from_str(value.unwrap_or("-0"), err, "image-media-metadata.subject-distance", "integer")); - }, - "image-media-metadata.height" => { - request_image_media_metadata_location_init(&mut request); - request.image_media_metadata.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "image-media-metadata.height", "integer")); - }, - "image-media-metadata.lens" => { - request_image_media_metadata_location_init(&mut request); - request.image_media_metadata.as_mut().unwrap().lens = Some(value.unwrap_or("").to_string()); - }, - "image-media-metadata.date" => { - request_image_media_metadata_location_init(&mut request); - request.image_media_metadata.as_mut().unwrap().date = Some(value.unwrap_or("").to_string()); - }, - "image-media-metadata.iso-speed" => { - request_image_media_metadata_location_init(&mut request); - request.image_media_metadata.as_mut().unwrap().iso_speed = Some(arg_from_str(value.unwrap_or("-0"), err, "image-media-metadata.iso-speed", "integer")); - }, - "image-media-metadata.metering-mode" => { - request_image_media_metadata_location_init(&mut request); - request.image_media_metadata.as_mut().unwrap().metering_mode = Some(value.unwrap_or("").to_string()); - }, - "image-media-metadata.flash-used" => { - request_image_media_metadata_location_init(&mut request); - request.image_media_metadata.as_mut().unwrap().flash_used = Some(arg_from_str(value.unwrap_or("false"), err, "image-media-metadata.flash-used", "boolean")); - }, - "image-media-metadata.aperture" => { - request_image_media_metadata_location_init(&mut request); - request.image_media_metadata.as_mut().unwrap().aperture = Some(arg_from_str(value.unwrap_or("0.0"), err, "image-media-metadata.aperture", "number")); - }, - "image-media-metadata.rotation" => { - request_image_media_metadata_location_init(&mut request); - request.image_media_metadata.as_mut().unwrap().rotation = Some(arg_from_str(value.unwrap_or("-0"), err, "image-media-metadata.rotation", "integer")); - }, - "image-media-metadata.sensor" => { - request_image_media_metadata_location_init(&mut request); - request.image_media_metadata.as_mut().unwrap().sensor = Some(value.unwrap_or("").to_string()); - }, - "image-media-metadata.white-balance" => { - request_image_media_metadata_location_init(&mut request); - request.image_media_metadata.as_mut().unwrap().white_balance = Some(value.unwrap_or("").to_string()); - }, - "image-media-metadata.camera-model" => { - request_image_media_metadata_location_init(&mut request); - request.image_media_metadata.as_mut().unwrap().camera_model = Some(value.unwrap_or("").to_string()); - }, - "description" => { - request_image_media_metadata_init(&mut request); - request.description = Some(value.unwrap_or("").to_string()); - }, - "web-content-link" => { - request_image_media_metadata_init(&mut request); - request.web_content_link = Some(value.unwrap_or("").to_string()); - }, - "editable" => { - request_image_media_metadata_init(&mut request); - request.editable = Some(arg_from_str(value.unwrap_or("false"), err, "editable", "boolean")); - }, - "embed-link" => { - request_image_media_metadata_init(&mut request); - request.embed_link = Some(value.unwrap_or("").to_string()); - }, - "marked-viewed-by-me-date" => { - request_image_media_metadata_init(&mut request); - request.marked_viewed_by_me_date = Some(value.unwrap_or("").to_string()); - }, - "quota-bytes-used" => { - request_image_media_metadata_init(&mut request); - request.quota_bytes_used = Some(value.unwrap_or("").to_string()); - }, - "file-size" => { - request_image_media_metadata_init(&mut request); - request.file_size = Some(value.unwrap_or("").to_string()); - }, - "created-date" => { - request_image_media_metadata_init(&mut request); - request.created_date = Some(value.unwrap_or("").to_string()); - }, - "md5-checksum" => { - request_image_media_metadata_init(&mut request); - request.md5_checksum = Some(value.unwrap_or("").to_string()); - }, - "icon-link" => { - request_image_media_metadata_init(&mut request); - request.icon_link = Some(value.unwrap_or("").to_string()); - }, - "default-open-with-link" => { - request_image_media_metadata_init(&mut request); - request.default_open_with_link = Some(value.unwrap_or("").to_string()); - }, - "kind" => { - request_image_media_metadata_init(&mut request); - request.kind = Some(value.unwrap_or("").to_string()); - }, - "alternate-link" => { - request_image_media_metadata_init(&mut request); - request.alternate_link = Some(value.unwrap_or("").to_string()); - }, - "title" => { - request_image_media_metadata_init(&mut request); - request.title = Some(value.unwrap_or("").to_string()); - }, - "modified-by-me-date" => { - request_image_media_metadata_init(&mut request); - request.modified_by_me_date = Some(value.unwrap_or("").to_string()); - }, - "download-url" => { - request_image_media_metadata_init(&mut request); - request.download_url = Some(value.unwrap_or("").to_string()); - }, - "user-permission.with-link" => { - request_user_permission_init(&mut request); - request.user_permission.as_mut().unwrap().with_link = Some(arg_from_str(value.unwrap_or("false"), err, "user-permission.with-link", "boolean")); - }, - "user-permission.domain" => { - request_user_permission_init(&mut request); - request.user_permission.as_mut().unwrap().domain = Some(value.unwrap_or("").to_string()); - }, - "user-permission.name" => { - request_user_permission_init(&mut request); - request.user_permission.as_mut().unwrap().name = Some(value.unwrap_or("").to_string()); - }, - "user-permission.kind" => { - request_user_permission_init(&mut request); - request.user_permission.as_mut().unwrap().kind = Some(value.unwrap_or("").to_string()); - }, - "user-permission.value" => { - request_user_permission_init(&mut request); - request.user_permission.as_mut().unwrap().value = Some(value.unwrap_or("").to_string()); - }, - "user-permission.id" => { - request_user_permission_init(&mut request); - request.user_permission.as_mut().unwrap().id = Some(value.unwrap_or("").to_string()); - }, - "user-permission.auth-key" => { - request_user_permission_init(&mut request); - request.user_permission.as_mut().unwrap().auth_key = Some(value.unwrap_or("").to_string()); - }, - "user-permission.etag" => { - request_user_permission_init(&mut request); - request.user_permission.as_mut().unwrap().etag = Some(value.unwrap_or("").to_string()); - }, - "user-permission.email-address" => { - request_user_permission_init(&mut request); - request.user_permission.as_mut().unwrap().email_address = Some(value.unwrap_or("").to_string()); - }, - "user-permission.photo-link" => { - request_user_permission_init(&mut request); - request.user_permission.as_mut().unwrap().photo_link = Some(value.unwrap_or("").to_string()); - }, - "user-permission.role" => { - request_user_permission_init(&mut request); - request.user_permission.as_mut().unwrap().role = Some(value.unwrap_or("").to_string()); - }, - "user-permission.type" => { - request_user_permission_init(&mut request); - request.user_permission.as_mut().unwrap().type_ = Some(value.unwrap_or("").to_string()); - }, - "user-permission.additional-roles" => { - request_user_permission_init(&mut request); - if request.user_permission.as_mut().unwrap().additional_roles.is_none() { - request.user_permission.as_mut().unwrap().additional_roles = Some(Default::default()); - } - request.user_permission.as_mut().unwrap().additional_roles.as_mut().unwrap().push(value.unwrap_or("").to_string()); - }, - "user-permission.self-link" => { - request_user_permission_init(&mut request); - request.user_permission.as_mut().unwrap().self_link = Some(value.unwrap_or("").to_string()); - }, - "original-filename" => { - request_user_permission_init(&mut request); - request.original_filename = Some(value.unwrap_or("").to_string()); - }, - "file-extension" => { - request_user_permission_init(&mut request); - request.file_extension = Some(value.unwrap_or("").to_string()); - }, - "head-revision-id" => { - request_user_permission_init(&mut request); - request.head_revision_id = Some(value.unwrap_or("").to_string()); - }, - "self-link" => { - request_user_permission_init(&mut request); - request.self_link = Some(value.unwrap_or("").to_string()); - }, - "modified-date" => { - request_user_permission_init(&mut request); - request.modified_date = Some(value.unwrap_or("").to_string()); - }, - _ => { - err.issues.push(CLIError::Field(FieldError::Unknown(temp_cursor.to_string()))); - } - } - } - let mut call = self.hub.files().patch(request, &self.opt.arg_file_id); - for parg in self.opt.arg_v.iter() { - let (key, value) = parse_kv_arg(&*parg, err, false); - match key { - "use-content-as-indexable-text" => { - call = call.use_content_as_indexable_text(arg_from_str(value.unwrap_or("false"), err, "use-content-as-indexable-text", "boolean")); - }, - "update-viewed-date" => { - call = call.update_viewed_date(arg_from_str(value.unwrap_or("false"), err, "update-viewed-date", "boolean")); - }, - "timed-text-track-name" => { - call = call.timed_text_track_name(value.unwrap_or("")); - }, - "timed-text-language" => { - call = call.timed_text_language(value.unwrap_or("")); - }, - "set-modified-date" => { - call = call.set_modified_date(arg_from_str(value.unwrap_or("false"), err, "set-modified-date", "boolean")); - }, - "remove-parents" => { - call = call.remove_parents(value.unwrap_or("")); - }, - "pinned" => { - call = call.pinned(arg_from_str(value.unwrap_or("false"), err, "pinned", "boolean")); - }, - "ocr-language" => { - call = call.ocr_language(value.unwrap_or("")); - }, - "ocr" => { - call = call.ocr(arg_from_str(value.unwrap_or("false"), err, "ocr", "boolean")); - }, - "new-revision" => { - call = call.new_revision(arg_from_str(value.unwrap_or("false"), err, "new-revision", "boolean")); - }, - "convert" => { - call = call.convert(arg_from_str(value.unwrap_or("false"), err, "convert", "boolean")); - }, - "add-parents" => { - call = call.add_parents(value.unwrap_or("")); - }, - "alt" - |"fields" - |"key" - |"oauth-token" - |"pretty-print" - |"quota-user" - |"user-ip" => { - let map = [ - ("oauth-token", "oauth_token"), - ("pretty-print", "prettyPrint"), - ("quota-user", "quotaUser"), - ("user-ip", "userIp"), - ]; - call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) - }, - _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), - } - } - let protocol = "standard-request"; - if dry_run { - None - } else { - assert!(err.issues.len() == 0); - if self.opt.flag_scope.len() > 0 { - call = call.add_scope(&self.opt.flag_scope); - } - let mut ostream = writer_from_opts(self.opt.flag_o, &self.opt.arg_out); - match match protocol { - "standard-request" => call.doit(), - _ => unreachable!(), - } { - Err(api_err) => Some(api_err), - Ok((mut response, output_schema)) => { - serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); - None - } - } - } - } - - fn _files_touch(&self, dry_run: bool, err: &mut InvalidOptionsError) - -> Option { - let mut call = self.hub.files().touch(&self.opt.arg_file_id); - for parg in self.opt.arg_v.iter() { - let (key, value) = parse_kv_arg(&*parg, err, false); - match key { - "alt" - |"fields" - |"key" - |"oauth-token" - |"pretty-print" - |"quota-user" - |"user-ip" => { - let map = [ - ("oauth-token", "oauth_token"), - ("pretty-print", "prettyPrint"), - ("quota-user", "quotaUser"), - ("user-ip", "userIp"), - ]; - call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) - }, - _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), - } - } - let protocol = "standard-request"; - if dry_run { - None - } else { - assert!(err.issues.len() == 0); - if self.opt.flag_scope.len() > 0 { - call = call.add_scope(&self.opt.flag_scope); - } - let mut ostream = writer_from_opts(self.opt.flag_o, &self.opt.arg_out); - match match protocol { - "standard-request" => call.doit(), - _ => unreachable!(), - } { - Err(api_err) => Some(api_err), - Ok((mut response, output_schema)) => { - serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); - None - } - } - } - } - - fn _files_trash(&self, dry_run: bool, err: &mut InvalidOptionsError) - -> Option { - let mut call = self.hub.files().trash(&self.opt.arg_file_id); - for parg in self.opt.arg_v.iter() { - let (key, value) = parse_kv_arg(&*parg, err, false); - match key { - "alt" - |"fields" - |"key" - |"oauth-token" - |"pretty-print" - |"quota-user" - |"user-ip" => { - let map = [ - ("oauth-token", "oauth_token"), - ("pretty-print", "prettyPrint"), - ("quota-user", "quotaUser"), - ("user-ip", "userIp"), - ]; - call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) - }, - _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), - } - } - let protocol = "standard-request"; - if dry_run { - None - } else { - assert!(err.issues.len() == 0); - if self.opt.flag_scope.len() > 0 { - call = call.add_scope(&self.opt.flag_scope); - } - let mut ostream = writer_from_opts(self.opt.flag_o, &self.opt.arg_out); - match match protocol { - "standard-request" => call.doit(), - _ => unreachable!(), - } { - Err(api_err) => Some(api_err), - Ok((mut response, output_schema)) => { - serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); - None - } - } - } - } - - fn _files_untrash(&self, dry_run: bool, err: &mut InvalidOptionsError) - -> Option { - let mut call = self.hub.files().untrash(&self.opt.arg_file_id); - for parg in self.opt.arg_v.iter() { - let (key, value) = parse_kv_arg(&*parg, err, false); - match key { - "alt" - |"fields" - |"key" - |"oauth-token" - |"pretty-print" - |"quota-user" - |"user-ip" => { - let map = [ - ("oauth-token", "oauth_token"), - ("pretty-print", "prettyPrint"), - ("quota-user", "quotaUser"), - ("user-ip", "userIp"), - ]; - call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) - }, - _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), - } - } - let protocol = "standard-request"; - if dry_run { - None - } else { - assert!(err.issues.len() == 0); - if self.opt.flag_scope.len() > 0 { - call = call.add_scope(&self.opt.flag_scope); - } - let mut ostream = writer_from_opts(self.opt.flag_o, &self.opt.arg_out); - match match protocol { - "standard-request" => call.doit(), - _ => unreachable!(), - } { - Err(api_err) => Some(api_err), - Ok((mut response, output_schema)) => { - serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); - None - } - } - } - } - - fn _files_update(&self, dry_run: bool, err: &mut InvalidOptionsError) - -> Option { - - let mut request = api::File::default(); - let mut field_cursor = FieldCursor::default(); - for kvarg in self.opt.arg_kv.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; - } - fn request_image_media_metadata_init(request: &mut api::File) { - if request.image_media_metadata.is_none() { - request.image_media_metadata = Some(Default::default()); - } - } - - fn request_image_media_metadata_location_init(request: &mut api::File) { - request_image_media_metadata_init(request); - if request.image_media_metadata.as_mut().unwrap().location.is_none() { - request.image_media_metadata.as_mut().unwrap().location = Some(Default::default()); - } - } - - fn request_indexable_text_init(request: &mut api::File) { - if request.indexable_text.is_none() { - request.indexable_text = Some(Default::default()); - } - } - - fn request_labels_init(request: &mut api::File) { - if request.labels.is_none() { - request.labels = Some(Default::default()); - } - } - - fn request_last_modifying_user_init(request: &mut api::File) { - if request.last_modifying_user.is_none() { - request.last_modifying_user = Some(Default::default()); - } - } - - fn request_last_modifying_user_picture_init(request: &mut api::File) { - request_last_modifying_user_init(request); - if request.last_modifying_user.as_mut().unwrap().picture.is_none() { - request.last_modifying_user.as_mut().unwrap().picture = Some(Default::default()); - } - } - - fn request_sharing_user_init(request: &mut api::File) { - if request.sharing_user.is_none() { - request.sharing_user = Some(Default::default()); - } - } - - fn request_sharing_user_picture_init(request: &mut api::File) { - request_sharing_user_init(request); - if request.sharing_user.as_mut().unwrap().picture.is_none() { - request.sharing_user.as_mut().unwrap().picture = Some(Default::default()); - } - } - - fn request_thumbnail_init(request: &mut api::File) { - if request.thumbnail.is_none() { - request.thumbnail = Some(Default::default()); - } - } - - fn request_user_permission_init(request: &mut api::File) { - if request.user_permission.is_none() { - request.user_permission = Some(Default::default()); - } - } - - fn request_video_media_metadata_init(request: &mut api::File) { - if request.video_media_metadata.is_none() { - request.video_media_metadata = Some(Default::default()); - } - } - - match &temp_cursor.to_string()[..] { - "mime-type" => { - request.mime_type = Some(value.unwrap_or("").to_string()); - }, - "last-viewed-by-me-date" => { - request.last_viewed_by_me_date = Some(value.unwrap_or("").to_string()); - }, - "app-data-contents" => { - request.app_data_contents = Some(arg_from_str(value.unwrap_or("false"), err, "app-data-contents", "boolean")); - }, - "thumbnail-link" => { - request.thumbnail_link = Some(value.unwrap_or("").to_string()); - }, - "labels.restricted" => { - request_labels_init(&mut request); - request.labels.as_mut().unwrap().restricted = Some(arg_from_str(value.unwrap_or("false"), err, "labels.restricted", "boolean")); - }, - "labels.hidden" => { - request_labels_init(&mut request); - request.labels.as_mut().unwrap().hidden = Some(arg_from_str(value.unwrap_or("false"), err, "labels.hidden", "boolean")); - }, - "labels.viewed" => { - request_labels_init(&mut request); - request.labels.as_mut().unwrap().viewed = Some(arg_from_str(value.unwrap_or("false"), err, "labels.viewed", "boolean")); - }, - "labels.starred" => { - request_labels_init(&mut request); - request.labels.as_mut().unwrap().starred = Some(arg_from_str(value.unwrap_or("false"), err, "labels.starred", "boolean")); - }, - "labels.trashed" => { - request_labels_init(&mut request); - request.labels.as_mut().unwrap().trashed = Some(arg_from_str(value.unwrap_or("false"), err, "labels.trashed", "boolean")); - }, - "indexable-text.text" => { - request_indexable_text_init(&mut request); - request.indexable_text.as_mut().unwrap().text = Some(value.unwrap_or("").to_string()); - }, - "explicitly-trashed" => { - request_indexable_text_init(&mut request); - request.explicitly_trashed = Some(arg_from_str(value.unwrap_or("false"), err, "explicitly-trashed", "boolean")); - }, - "etag" => { - request_indexable_text_init(&mut request); - request.etag = Some(value.unwrap_or("").to_string()); - }, - "last-modifying-user-name" => { - request_indexable_text_init(&mut request); - request.last_modifying_user_name = Some(value.unwrap_or("").to_string()); - }, - "writers-can-share" => { - request_indexable_text_init(&mut request); - request.writers_can_share = Some(arg_from_str(value.unwrap_or("false"), err, "writers-can-share", "boolean")); - }, - "id" => { - request_indexable_text_init(&mut request); - request.id = Some(value.unwrap_or("").to_string()); - }, - "sharing-user.picture.url" => { - request_sharing_user_picture_init(&mut request); - request.sharing_user.as_mut().unwrap().picture.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); - }, - "sharing-user.kind" => { - request_sharing_user_picture_init(&mut request); - request.sharing_user.as_mut().unwrap().kind = Some(value.unwrap_or("").to_string()); - }, - "sharing-user.display-name" => { - request_sharing_user_picture_init(&mut request); - request.sharing_user.as_mut().unwrap().display_name = Some(value.unwrap_or("").to_string()); - }, - "sharing-user.permission-id" => { - request_sharing_user_picture_init(&mut request); - request.sharing_user.as_mut().unwrap().permission_id = Some(value.unwrap_or("").to_string()); - }, - "sharing-user.is-authenticated-user" => { - request_sharing_user_picture_init(&mut request); - request.sharing_user.as_mut().unwrap().is_authenticated_user = Some(arg_from_str(value.unwrap_or("false"), err, "sharing-user.is-authenticated-user", "boolean")); - }, - "sharing-user.email-address" => { - request_sharing_user_picture_init(&mut request); - request.sharing_user.as_mut().unwrap().email_address = Some(value.unwrap_or("").to_string()); - }, - "video-media-metadata.width" => { - request_video_media_metadata_init(&mut request); - request.video_media_metadata.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "video-media-metadata.width", "integer")); - }, - "video-media-metadata.duration-millis" => { - request_video_media_metadata_init(&mut request); - request.video_media_metadata.as_mut().unwrap().duration_millis = Some(value.unwrap_or("").to_string()); - }, - "video-media-metadata.height" => { - request_video_media_metadata_init(&mut request); - request.video_media_metadata.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "video-media-metadata.height", "integer")); - }, - "last-modifying-user.picture.url" => { - request_last_modifying_user_picture_init(&mut request); - request.last_modifying_user.as_mut().unwrap().picture.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); - }, - "last-modifying-user.kind" => { - request_last_modifying_user_picture_init(&mut request); - request.last_modifying_user.as_mut().unwrap().kind = Some(value.unwrap_or("").to_string()); - }, - "last-modifying-user.display-name" => { - request_last_modifying_user_picture_init(&mut request); - request.last_modifying_user.as_mut().unwrap().display_name = Some(value.unwrap_or("").to_string()); - }, - "last-modifying-user.permission-id" => { - request_last_modifying_user_picture_init(&mut request); - request.last_modifying_user.as_mut().unwrap().permission_id = Some(value.unwrap_or("").to_string()); - }, - "last-modifying-user.is-authenticated-user" => { - request_last_modifying_user_picture_init(&mut request); - request.last_modifying_user.as_mut().unwrap().is_authenticated_user = Some(arg_from_str(value.unwrap_or("false"), err, "last-modifying-user.is-authenticated-user", "boolean")); - }, - "last-modifying-user.email-address" => { - request_last_modifying_user_picture_init(&mut request); - request.last_modifying_user.as_mut().unwrap().email_address = Some(value.unwrap_or("").to_string()); - }, - "copyable" => { - request_last_modifying_user_init(&mut request); - request.copyable = Some(arg_from_str(value.unwrap_or("false"), err, "copyable", "boolean")); - }, - "folder-color-rgb" => { - request_last_modifying_user_init(&mut request); - request.folder_color_rgb = Some(value.unwrap_or("").to_string()); - }, - "owner-names" => { - request_last_modifying_user_init(&mut request); - if request.owner_names.is_none() { - request.owner_names = Some(Default::default()); - } - request.owner_names.as_mut().unwrap().push(value.unwrap_or("").to_string()); - }, - "shared-with-me-date" => { - request_last_modifying_user_init(&mut request); - request.shared_with_me_date = Some(value.unwrap_or("").to_string()); - }, - "web-view-link" => { - request_last_modifying_user_init(&mut request); - request.web_view_link = Some(value.unwrap_or("").to_string()); - }, - "version" => { - request_last_modifying_user_init(&mut request); - request.version = Some(value.unwrap_or("").to_string()); - }, - "export-links" => { - request_last_modifying_user_init(&mut request); - if request.export_links.is_none() { - request.export_links = Some(Default::default()); - } - let (key, value) = parse_kv_arg(value.unwrap_or(""), err, true); - request.export_links.as_mut().unwrap().insert(key.to_string(), value.unwrap_or("").to_string()); - }, - "shared" => { - request_last_modifying_user_init(&mut request); - request.shared = Some(arg_from_str(value.unwrap_or("false"), err, "shared", "boolean")); - }, - "thumbnail.mime-type" => { - request_thumbnail_init(&mut request); - request.thumbnail.as_mut().unwrap().mime_type = Some(value.unwrap_or("").to_string()); - }, - "thumbnail.image" => { - request_thumbnail_init(&mut request); - request.thumbnail.as_mut().unwrap().image = Some(value.unwrap_or("").to_string()); - }, - "open-with-links" => { - request_thumbnail_init(&mut request); - if request.open_with_links.is_none() { - request.open_with_links = Some(Default::default()); - } - let (key, value) = parse_kv_arg(value.unwrap_or(""), err, true); - request.open_with_links.as_mut().unwrap().insert(key.to_string(), value.unwrap_or("").to_string()); - }, - "image-media-metadata.exposure-bias" => { - request_image_media_metadata_init(&mut request); - request.image_media_metadata.as_mut().unwrap().exposure_bias = Some(arg_from_str(value.unwrap_or("0.0"), err, "image-media-metadata.exposure-bias", "number")); - }, - "image-media-metadata.exposure-time" => { - request_image_media_metadata_init(&mut request); - request.image_media_metadata.as_mut().unwrap().exposure_time = Some(arg_from_str(value.unwrap_or("0.0"), err, "image-media-metadata.exposure-time", "number")); - }, - "image-media-metadata.max-aperture-value" => { - request_image_media_metadata_init(&mut request); - request.image_media_metadata.as_mut().unwrap().max_aperture_value = Some(arg_from_str(value.unwrap_or("0.0"), err, "image-media-metadata.max-aperture-value", "number")); - }, - "image-media-metadata.width" => { - request_image_media_metadata_init(&mut request); - request.image_media_metadata.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "image-media-metadata.width", "integer")); - }, - "image-media-metadata.focal-length" => { - request_image_media_metadata_init(&mut request); - request.image_media_metadata.as_mut().unwrap().focal_length = Some(arg_from_str(value.unwrap_or("0.0"), err, "image-media-metadata.focal-length", "number")); - }, - "image-media-metadata.camera-make" => { - request_image_media_metadata_init(&mut request); - request.image_media_metadata.as_mut().unwrap().camera_make = Some(value.unwrap_or("").to_string()); - }, - "image-media-metadata.exposure-mode" => { - request_image_media_metadata_init(&mut request); - request.image_media_metadata.as_mut().unwrap().exposure_mode = Some(value.unwrap_or("").to_string()); - }, - "image-media-metadata.color-space" => { - request_image_media_metadata_init(&mut request); - request.image_media_metadata.as_mut().unwrap().color_space = Some(value.unwrap_or("").to_string()); - }, - "image-media-metadata.location.latitude" => { - request_image_media_metadata_location_init(&mut request); - request.image_media_metadata.as_mut().unwrap().location.as_mut().unwrap().latitude = Some(arg_from_str(value.unwrap_or("0.0"), err, "image-media-metadata.location.latitude", "number")); - }, - "image-media-metadata.location.altitude" => { - request_image_media_metadata_location_init(&mut request); - request.image_media_metadata.as_mut().unwrap().location.as_mut().unwrap().altitude = Some(arg_from_str(value.unwrap_or("0.0"), err, "image-media-metadata.location.altitude", "number")); - }, - "image-media-metadata.location.longitude" => { - request_image_media_metadata_location_init(&mut request); - request.image_media_metadata.as_mut().unwrap().location.as_mut().unwrap().longitude = Some(arg_from_str(value.unwrap_or("0.0"), err, "image-media-metadata.location.longitude", "number")); - }, - "image-media-metadata.subject-distance" => { - request_image_media_metadata_location_init(&mut request); - request.image_media_metadata.as_mut().unwrap().subject_distance = Some(arg_from_str(value.unwrap_or("-0"), err, "image-media-metadata.subject-distance", "integer")); - }, - "image-media-metadata.height" => { - request_image_media_metadata_location_init(&mut request); - request.image_media_metadata.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "image-media-metadata.height", "integer")); - }, - "image-media-metadata.lens" => { - request_image_media_metadata_location_init(&mut request); - request.image_media_metadata.as_mut().unwrap().lens = Some(value.unwrap_or("").to_string()); - }, - "image-media-metadata.date" => { - request_image_media_metadata_location_init(&mut request); - request.image_media_metadata.as_mut().unwrap().date = Some(value.unwrap_or("").to_string()); - }, - "image-media-metadata.iso-speed" => { - request_image_media_metadata_location_init(&mut request); - request.image_media_metadata.as_mut().unwrap().iso_speed = Some(arg_from_str(value.unwrap_or("-0"), err, "image-media-metadata.iso-speed", "integer")); - }, - "image-media-metadata.metering-mode" => { - request_image_media_metadata_location_init(&mut request); - request.image_media_metadata.as_mut().unwrap().metering_mode = Some(value.unwrap_or("").to_string()); - }, - "image-media-metadata.flash-used" => { - request_image_media_metadata_location_init(&mut request); - request.image_media_metadata.as_mut().unwrap().flash_used = Some(arg_from_str(value.unwrap_or("false"), err, "image-media-metadata.flash-used", "boolean")); - }, - "image-media-metadata.aperture" => { - request_image_media_metadata_location_init(&mut request); - request.image_media_metadata.as_mut().unwrap().aperture = Some(arg_from_str(value.unwrap_or("0.0"), err, "image-media-metadata.aperture", "number")); - }, - "image-media-metadata.rotation" => { - request_image_media_metadata_location_init(&mut request); - request.image_media_metadata.as_mut().unwrap().rotation = Some(arg_from_str(value.unwrap_or("-0"), err, "image-media-metadata.rotation", "integer")); - }, - "image-media-metadata.sensor" => { - request_image_media_metadata_location_init(&mut request); - request.image_media_metadata.as_mut().unwrap().sensor = Some(value.unwrap_or("").to_string()); - }, - "image-media-metadata.white-balance" => { - request_image_media_metadata_location_init(&mut request); - request.image_media_metadata.as_mut().unwrap().white_balance = Some(value.unwrap_or("").to_string()); - }, - "image-media-metadata.camera-model" => { - request_image_media_metadata_location_init(&mut request); - request.image_media_metadata.as_mut().unwrap().camera_model = Some(value.unwrap_or("").to_string()); - }, - "description" => { - request_image_media_metadata_init(&mut request); - request.description = Some(value.unwrap_or("").to_string()); - }, - "web-content-link" => { - request_image_media_metadata_init(&mut request); - request.web_content_link = Some(value.unwrap_or("").to_string()); - }, - "editable" => { - request_image_media_metadata_init(&mut request); - request.editable = Some(arg_from_str(value.unwrap_or("false"), err, "editable", "boolean")); - }, - "embed-link" => { - request_image_media_metadata_init(&mut request); - request.embed_link = Some(value.unwrap_or("").to_string()); - }, - "marked-viewed-by-me-date" => { - request_image_media_metadata_init(&mut request); - request.marked_viewed_by_me_date = Some(value.unwrap_or("").to_string()); - }, - "quota-bytes-used" => { - request_image_media_metadata_init(&mut request); - request.quota_bytes_used = Some(value.unwrap_or("").to_string()); - }, - "file-size" => { - request_image_media_metadata_init(&mut request); - request.file_size = Some(value.unwrap_or("").to_string()); - }, - "created-date" => { - request_image_media_metadata_init(&mut request); - request.created_date = Some(value.unwrap_or("").to_string()); - }, - "md5-checksum" => { - request_image_media_metadata_init(&mut request); - request.md5_checksum = Some(value.unwrap_or("").to_string()); - }, - "icon-link" => { - request_image_media_metadata_init(&mut request); - request.icon_link = Some(value.unwrap_or("").to_string()); - }, - "default-open-with-link" => { - request_image_media_metadata_init(&mut request); - request.default_open_with_link = Some(value.unwrap_or("").to_string()); - }, - "kind" => { - request_image_media_metadata_init(&mut request); - request.kind = Some(value.unwrap_or("").to_string()); - }, - "alternate-link" => { - request_image_media_metadata_init(&mut request); - request.alternate_link = Some(value.unwrap_or("").to_string()); - }, - "title" => { - request_image_media_metadata_init(&mut request); - request.title = Some(value.unwrap_or("").to_string()); - }, - "modified-by-me-date" => { - request_image_media_metadata_init(&mut request); - request.modified_by_me_date = Some(value.unwrap_or("").to_string()); - }, - "download-url" => { - request_image_media_metadata_init(&mut request); - request.download_url = Some(value.unwrap_or("").to_string()); - }, - "user-permission.with-link" => { - request_user_permission_init(&mut request); - request.user_permission.as_mut().unwrap().with_link = Some(arg_from_str(value.unwrap_or("false"), err, "user-permission.with-link", "boolean")); - }, - "user-permission.domain" => { - request_user_permission_init(&mut request); - request.user_permission.as_mut().unwrap().domain = Some(value.unwrap_or("").to_string()); - }, - "user-permission.name" => { - request_user_permission_init(&mut request); - request.user_permission.as_mut().unwrap().name = Some(value.unwrap_or("").to_string()); - }, - "user-permission.kind" => { - request_user_permission_init(&mut request); - request.user_permission.as_mut().unwrap().kind = Some(value.unwrap_or("").to_string()); - }, - "user-permission.value" => { - request_user_permission_init(&mut request); - request.user_permission.as_mut().unwrap().value = Some(value.unwrap_or("").to_string()); - }, - "user-permission.id" => { - request_user_permission_init(&mut request); - request.user_permission.as_mut().unwrap().id = Some(value.unwrap_or("").to_string()); - }, - "user-permission.auth-key" => { - request_user_permission_init(&mut request); - request.user_permission.as_mut().unwrap().auth_key = Some(value.unwrap_or("").to_string()); - }, - "user-permission.etag" => { - request_user_permission_init(&mut request); - request.user_permission.as_mut().unwrap().etag = Some(value.unwrap_or("").to_string()); - }, - "user-permission.email-address" => { - request_user_permission_init(&mut request); - request.user_permission.as_mut().unwrap().email_address = Some(value.unwrap_or("").to_string()); - }, - "user-permission.photo-link" => { - request_user_permission_init(&mut request); - request.user_permission.as_mut().unwrap().photo_link = Some(value.unwrap_or("").to_string()); - }, - "user-permission.role" => { - request_user_permission_init(&mut request); - request.user_permission.as_mut().unwrap().role = Some(value.unwrap_or("").to_string()); - }, - "user-permission.type" => { - request_user_permission_init(&mut request); - request.user_permission.as_mut().unwrap().type_ = Some(value.unwrap_or("").to_string()); - }, - "user-permission.additional-roles" => { - request_user_permission_init(&mut request); - if request.user_permission.as_mut().unwrap().additional_roles.is_none() { - request.user_permission.as_mut().unwrap().additional_roles = Some(Default::default()); - } - request.user_permission.as_mut().unwrap().additional_roles.as_mut().unwrap().push(value.unwrap_or("").to_string()); - }, - "user-permission.self-link" => { - request_user_permission_init(&mut request); - request.user_permission.as_mut().unwrap().self_link = Some(value.unwrap_or("").to_string()); - }, - "original-filename" => { - request_user_permission_init(&mut request); - request.original_filename = Some(value.unwrap_or("").to_string()); - }, - "file-extension" => { - request_user_permission_init(&mut request); - request.file_extension = Some(value.unwrap_or("").to_string()); - }, - "head-revision-id" => { - request_user_permission_init(&mut request); - request.head_revision_id = Some(value.unwrap_or("").to_string()); - }, - "self-link" => { - request_user_permission_init(&mut request); - request.self_link = Some(value.unwrap_or("").to_string()); - }, - "modified-date" => { - request_user_permission_init(&mut request); - request.modified_date = Some(value.unwrap_or("").to_string()); - }, - _ => { - err.issues.push(CLIError::Field(FieldError::Unknown(temp_cursor.to_string()))); - } - } - } - let mut call = self.hub.files().update(request, &self.opt.arg_file_id); - for parg in self.opt.arg_v.iter() { - let (key, value) = parse_kv_arg(&*parg, err, false); - match key { - "use-content-as-indexable-text" => { - call = call.use_content_as_indexable_text(arg_from_str(value.unwrap_or("false"), err, "use-content-as-indexable-text", "boolean")); - }, - "update-viewed-date" => { - call = call.update_viewed_date(arg_from_str(value.unwrap_or("false"), err, "update-viewed-date", "boolean")); - }, - "timed-text-track-name" => { - call = call.timed_text_track_name(value.unwrap_or("")); - }, - "timed-text-language" => { - call = call.timed_text_language(value.unwrap_or("")); - }, - "set-modified-date" => { - call = call.set_modified_date(arg_from_str(value.unwrap_or("false"), err, "set-modified-date", "boolean")); - }, - "remove-parents" => { - call = call.remove_parents(value.unwrap_or("")); - }, - "pinned" => { - call = call.pinned(arg_from_str(value.unwrap_or("false"), err, "pinned", "boolean")); - }, - "ocr-language" => { - call = call.ocr_language(value.unwrap_or("")); - }, - "ocr" => { - call = call.ocr(arg_from_str(value.unwrap_or("false"), err, "ocr", "boolean")); - }, - "new-revision" => { - call = call.new_revision(arg_from_str(value.unwrap_or("false"), err, "new-revision", "boolean")); - }, - "convert" => { - call = call.convert(arg_from_str(value.unwrap_or("false"), err, "convert", "boolean")); - }, - "add-parents" => { - call = call.add_parents(value.unwrap_or("")); - }, - "alt" - |"fields" - |"key" - |"oauth-token" - |"pretty-print" - |"quota-user" - |"user-ip" => { - let map = [ - ("oauth-token", "oauth_token"), - ("pretty-print", "prettyPrint"), - ("quota-user", "quotaUser"), - ("user-ip", "userIp"), - ]; - call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) - }, - _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), - } - } - let protocol = - if self.opt.cmd_simple { - "simple" - } else if self.opt.cmd_resumable { - "resumable" - } else { - unreachable!() + 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)), }; - let mut input_file = input_file_from_opts(&self.opt.arg_file, err); - let mime_type = input_mime_from_opts(&self.opt.arg_mime, err); - if dry_run { - None - } else { - assert!(err.issues.len() == 0); - if self.opt.flag_scope.len() > 0 { - call = call.add_scope(&self.opt.flag_scope); - } - let mut ostream = writer_from_opts(self.opt.flag_o, &self.opt.arg_out); match match protocol { - "simple" => call.upload(input_file.unwrap(), mime_type.unwrap()), - "resumable" => call.upload_resumable(input_file.unwrap(), mime_type.unwrap()), - _ => unreachable!(), + CallType::Standard => call.doit(), + _ => unreachable!() } { - Err(api_err) => Some(api_err), + Err(api_err) => Err(DoitError::ApiError(api_err)), Ok((mut response, output_schema)) => { serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); - None + Ok(()) } } } } - fn _files_watch(&self, dry_run: bool, err: &mut InvalidOptionsError) - -> Option { + fn _files_patch(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + + let mut request = api::File::default(); + let mut field_cursor = FieldCursor::default(); + for kvarg in opt.values_of("kv").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; + } + fn request_image_media_metadata_init(request: &mut api::File) { + if request.image_media_metadata.is_none() { + request.image_media_metadata = Some(Default::default()); + } + } + + fn request_image_media_metadata_location_init(request: &mut api::File) { + request_image_media_metadata_init(request); + if request.image_media_metadata.as_mut().unwrap().location.is_none() { + request.image_media_metadata.as_mut().unwrap().location = Some(Default::default()); + } + } + + fn request_indexable_text_init(request: &mut api::File) { + if request.indexable_text.is_none() { + request.indexable_text = Some(Default::default()); + } + } + + fn request_labels_init(request: &mut api::File) { + if request.labels.is_none() { + request.labels = Some(Default::default()); + } + } + + fn request_last_modifying_user_init(request: &mut api::File) { + if request.last_modifying_user.is_none() { + request.last_modifying_user = Some(Default::default()); + } + } + + fn request_last_modifying_user_picture_init(request: &mut api::File) { + request_last_modifying_user_init(request); + if request.last_modifying_user.as_mut().unwrap().picture.is_none() { + request.last_modifying_user.as_mut().unwrap().picture = Some(Default::default()); + } + } + + fn request_sharing_user_init(request: &mut api::File) { + if request.sharing_user.is_none() { + request.sharing_user = Some(Default::default()); + } + } + + fn request_sharing_user_picture_init(request: &mut api::File) { + request_sharing_user_init(request); + if request.sharing_user.as_mut().unwrap().picture.is_none() { + request.sharing_user.as_mut().unwrap().picture = Some(Default::default()); + } + } + + fn request_thumbnail_init(request: &mut api::File) { + if request.thumbnail.is_none() { + request.thumbnail = Some(Default::default()); + } + } + + fn request_user_permission_init(request: &mut api::File) { + if request.user_permission.is_none() { + request.user_permission = Some(Default::default()); + } + } + + fn request_video_media_metadata_init(request: &mut api::File) { + if request.video_media_metadata.is_none() { + request.video_media_metadata = Some(Default::default()); + } + } + + match &temp_cursor.to_string()[..] { + "mime-type" => { + request.mime_type = Some(value.unwrap_or("").to_string()); + }, + "last-viewed-by-me-date" => { + request.last_viewed_by_me_date = Some(value.unwrap_or("").to_string()); + }, + "app-data-contents" => { + request.app_data_contents = Some(arg_from_str(value.unwrap_or("false"), err, "app-data-contents", "boolean")); + }, + "thumbnail-link" => { + request.thumbnail_link = Some(value.unwrap_or("").to_string()); + }, + "labels.restricted" => { + request_labels_init(&mut request); + request.labels.as_mut().unwrap().restricted = Some(arg_from_str(value.unwrap_or("false"), err, "labels.restricted", "boolean")); + }, + "labels.hidden" => { + request_labels_init(&mut request); + request.labels.as_mut().unwrap().hidden = Some(arg_from_str(value.unwrap_or("false"), err, "labels.hidden", "boolean")); + }, + "labels.viewed" => { + request_labels_init(&mut request); + request.labels.as_mut().unwrap().viewed = Some(arg_from_str(value.unwrap_or("false"), err, "labels.viewed", "boolean")); + }, + "labels.starred" => { + request_labels_init(&mut request); + request.labels.as_mut().unwrap().starred = Some(arg_from_str(value.unwrap_or("false"), err, "labels.starred", "boolean")); + }, + "labels.trashed" => { + request_labels_init(&mut request); + request.labels.as_mut().unwrap().trashed = Some(arg_from_str(value.unwrap_or("false"), err, "labels.trashed", "boolean")); + }, + "indexable-text.text" => { + request_indexable_text_init(&mut request); + request.indexable_text.as_mut().unwrap().text = Some(value.unwrap_or("").to_string()); + }, + "explicitly-trashed" => { + request_indexable_text_init(&mut request); + request.explicitly_trashed = Some(arg_from_str(value.unwrap_or("false"), err, "explicitly-trashed", "boolean")); + }, + "etag" => { + request_indexable_text_init(&mut request); + request.etag = Some(value.unwrap_or("").to_string()); + }, + "last-modifying-user-name" => { + request_indexable_text_init(&mut request); + request.last_modifying_user_name = Some(value.unwrap_or("").to_string()); + }, + "writers-can-share" => { + request_indexable_text_init(&mut request); + request.writers_can_share = Some(arg_from_str(value.unwrap_or("false"), err, "writers-can-share", "boolean")); + }, + "id" => { + request_indexable_text_init(&mut request); + request.id = Some(value.unwrap_or("").to_string()); + }, + "sharing-user.picture.url" => { + request_sharing_user_picture_init(&mut request); + request.sharing_user.as_mut().unwrap().picture.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); + }, + "sharing-user.kind" => { + request_sharing_user_picture_init(&mut request); + request.sharing_user.as_mut().unwrap().kind = Some(value.unwrap_or("").to_string()); + }, + "sharing-user.display-name" => { + request_sharing_user_picture_init(&mut request); + request.sharing_user.as_mut().unwrap().display_name = Some(value.unwrap_or("").to_string()); + }, + "sharing-user.permission-id" => { + request_sharing_user_picture_init(&mut request); + request.sharing_user.as_mut().unwrap().permission_id = Some(value.unwrap_or("").to_string()); + }, + "sharing-user.is-authenticated-user" => { + request_sharing_user_picture_init(&mut request); + request.sharing_user.as_mut().unwrap().is_authenticated_user = Some(arg_from_str(value.unwrap_or("false"), err, "sharing-user.is-authenticated-user", "boolean")); + }, + "sharing-user.email-address" => { + request_sharing_user_picture_init(&mut request); + request.sharing_user.as_mut().unwrap().email_address = Some(value.unwrap_or("").to_string()); + }, + "video-media-metadata.width" => { + request_video_media_metadata_init(&mut request); + request.video_media_metadata.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "video-media-metadata.width", "integer")); + }, + "video-media-metadata.duration-millis" => { + request_video_media_metadata_init(&mut request); + request.video_media_metadata.as_mut().unwrap().duration_millis = Some(value.unwrap_or("").to_string()); + }, + "video-media-metadata.height" => { + request_video_media_metadata_init(&mut request); + request.video_media_metadata.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "video-media-metadata.height", "integer")); + }, + "last-modifying-user.picture.url" => { + request_last_modifying_user_picture_init(&mut request); + request.last_modifying_user.as_mut().unwrap().picture.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); + }, + "last-modifying-user.kind" => { + request_last_modifying_user_picture_init(&mut request); + request.last_modifying_user.as_mut().unwrap().kind = Some(value.unwrap_or("").to_string()); + }, + "last-modifying-user.display-name" => { + request_last_modifying_user_picture_init(&mut request); + request.last_modifying_user.as_mut().unwrap().display_name = Some(value.unwrap_or("").to_string()); + }, + "last-modifying-user.permission-id" => { + request_last_modifying_user_picture_init(&mut request); + request.last_modifying_user.as_mut().unwrap().permission_id = Some(value.unwrap_or("").to_string()); + }, + "last-modifying-user.is-authenticated-user" => { + request_last_modifying_user_picture_init(&mut request); + request.last_modifying_user.as_mut().unwrap().is_authenticated_user = Some(arg_from_str(value.unwrap_or("false"), err, "last-modifying-user.is-authenticated-user", "boolean")); + }, + "last-modifying-user.email-address" => { + request_last_modifying_user_picture_init(&mut request); + request.last_modifying_user.as_mut().unwrap().email_address = Some(value.unwrap_or("").to_string()); + }, + "copyable" => { + request_last_modifying_user_init(&mut request); + request.copyable = Some(arg_from_str(value.unwrap_or("false"), err, "copyable", "boolean")); + }, + "folder-color-rgb" => { + request_last_modifying_user_init(&mut request); + request.folder_color_rgb = Some(value.unwrap_or("").to_string()); + }, + "owner-names" => { + request_last_modifying_user_init(&mut request); + if request.owner_names.is_none() { + request.owner_names = Some(Default::default()); + } + request.owner_names.as_mut().unwrap().push(value.unwrap_or("").to_string()); + }, + "shared-with-me-date" => { + request_last_modifying_user_init(&mut request); + request.shared_with_me_date = Some(value.unwrap_or("").to_string()); + }, + "web-view-link" => { + request_last_modifying_user_init(&mut request); + request.web_view_link = Some(value.unwrap_or("").to_string()); + }, + "version" => { + request_last_modifying_user_init(&mut request); + request.version = Some(value.unwrap_or("").to_string()); + }, + "export-links" => { + request_last_modifying_user_init(&mut request); + if request.export_links.is_none() { + request.export_links = Some(Default::default()); + } + let (key, value) = parse_kv_arg(value.unwrap_or(""), err, true); + request.export_links.as_mut().unwrap().insert(key.to_string(), value.unwrap_or("").to_string()); + }, + "shared" => { + request_last_modifying_user_init(&mut request); + request.shared = Some(arg_from_str(value.unwrap_or("false"), err, "shared", "boolean")); + }, + "thumbnail.mime-type" => { + request_thumbnail_init(&mut request); + request.thumbnail.as_mut().unwrap().mime_type = Some(value.unwrap_or("").to_string()); + }, + "thumbnail.image" => { + request_thumbnail_init(&mut request); + request.thumbnail.as_mut().unwrap().image = Some(value.unwrap_or("").to_string()); + }, + "open-with-links" => { + request_thumbnail_init(&mut request); + if request.open_with_links.is_none() { + request.open_with_links = Some(Default::default()); + } + let (key, value) = parse_kv_arg(value.unwrap_or(""), err, true); + request.open_with_links.as_mut().unwrap().insert(key.to_string(), value.unwrap_or("").to_string()); + }, + "image-media-metadata.exposure-bias" => { + request_image_media_metadata_init(&mut request); + request.image_media_metadata.as_mut().unwrap().exposure_bias = Some(arg_from_str(value.unwrap_or("0.0"), err, "image-media-metadata.exposure-bias", "number")); + }, + "image-media-metadata.exposure-time" => { + request_image_media_metadata_init(&mut request); + request.image_media_metadata.as_mut().unwrap().exposure_time = Some(arg_from_str(value.unwrap_or("0.0"), err, "image-media-metadata.exposure-time", "number")); + }, + "image-media-metadata.max-aperture-value" => { + request_image_media_metadata_init(&mut request); + request.image_media_metadata.as_mut().unwrap().max_aperture_value = Some(arg_from_str(value.unwrap_or("0.0"), err, "image-media-metadata.max-aperture-value", "number")); + }, + "image-media-metadata.width" => { + request_image_media_metadata_init(&mut request); + request.image_media_metadata.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "image-media-metadata.width", "integer")); + }, + "image-media-metadata.focal-length" => { + request_image_media_metadata_init(&mut request); + request.image_media_metadata.as_mut().unwrap().focal_length = Some(arg_from_str(value.unwrap_or("0.0"), err, "image-media-metadata.focal-length", "number")); + }, + "image-media-metadata.camera-make" => { + request_image_media_metadata_init(&mut request); + request.image_media_metadata.as_mut().unwrap().camera_make = Some(value.unwrap_or("").to_string()); + }, + "image-media-metadata.exposure-mode" => { + request_image_media_metadata_init(&mut request); + request.image_media_metadata.as_mut().unwrap().exposure_mode = Some(value.unwrap_or("").to_string()); + }, + "image-media-metadata.color-space" => { + request_image_media_metadata_init(&mut request); + request.image_media_metadata.as_mut().unwrap().color_space = Some(value.unwrap_or("").to_string()); + }, + "image-media-metadata.location.latitude" => { + request_image_media_metadata_location_init(&mut request); + request.image_media_metadata.as_mut().unwrap().location.as_mut().unwrap().latitude = Some(arg_from_str(value.unwrap_or("0.0"), err, "image-media-metadata.location.latitude", "number")); + }, + "image-media-metadata.location.altitude" => { + request_image_media_metadata_location_init(&mut request); + request.image_media_metadata.as_mut().unwrap().location.as_mut().unwrap().altitude = Some(arg_from_str(value.unwrap_or("0.0"), err, "image-media-metadata.location.altitude", "number")); + }, + "image-media-metadata.location.longitude" => { + request_image_media_metadata_location_init(&mut request); + request.image_media_metadata.as_mut().unwrap().location.as_mut().unwrap().longitude = Some(arg_from_str(value.unwrap_or("0.0"), err, "image-media-metadata.location.longitude", "number")); + }, + "image-media-metadata.subject-distance" => { + request_image_media_metadata_location_init(&mut request); + request.image_media_metadata.as_mut().unwrap().subject_distance = Some(arg_from_str(value.unwrap_or("-0"), err, "image-media-metadata.subject-distance", "integer")); + }, + "image-media-metadata.height" => { + request_image_media_metadata_location_init(&mut request); + request.image_media_metadata.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "image-media-metadata.height", "integer")); + }, + "image-media-metadata.lens" => { + request_image_media_metadata_location_init(&mut request); + request.image_media_metadata.as_mut().unwrap().lens = Some(value.unwrap_or("").to_string()); + }, + "image-media-metadata.date" => { + request_image_media_metadata_location_init(&mut request); + request.image_media_metadata.as_mut().unwrap().date = Some(value.unwrap_or("").to_string()); + }, + "image-media-metadata.iso-speed" => { + request_image_media_metadata_location_init(&mut request); + request.image_media_metadata.as_mut().unwrap().iso_speed = Some(arg_from_str(value.unwrap_or("-0"), err, "image-media-metadata.iso-speed", "integer")); + }, + "image-media-metadata.metering-mode" => { + request_image_media_metadata_location_init(&mut request); + request.image_media_metadata.as_mut().unwrap().metering_mode = Some(value.unwrap_or("").to_string()); + }, + "image-media-metadata.flash-used" => { + request_image_media_metadata_location_init(&mut request); + request.image_media_metadata.as_mut().unwrap().flash_used = Some(arg_from_str(value.unwrap_or("false"), err, "image-media-metadata.flash-used", "boolean")); + }, + "image-media-metadata.aperture" => { + request_image_media_metadata_location_init(&mut request); + request.image_media_metadata.as_mut().unwrap().aperture = Some(arg_from_str(value.unwrap_or("0.0"), err, "image-media-metadata.aperture", "number")); + }, + "image-media-metadata.rotation" => { + request_image_media_metadata_location_init(&mut request); + request.image_media_metadata.as_mut().unwrap().rotation = Some(arg_from_str(value.unwrap_or("-0"), err, "image-media-metadata.rotation", "integer")); + }, + "image-media-metadata.sensor" => { + request_image_media_metadata_location_init(&mut request); + request.image_media_metadata.as_mut().unwrap().sensor = Some(value.unwrap_or("").to_string()); + }, + "image-media-metadata.white-balance" => { + request_image_media_metadata_location_init(&mut request); + request.image_media_metadata.as_mut().unwrap().white_balance = Some(value.unwrap_or("").to_string()); + }, + "image-media-metadata.camera-model" => { + request_image_media_metadata_location_init(&mut request); + request.image_media_metadata.as_mut().unwrap().camera_model = Some(value.unwrap_or("").to_string()); + }, + "description" => { + request_image_media_metadata_init(&mut request); + request.description = Some(value.unwrap_or("").to_string()); + }, + "web-content-link" => { + request_image_media_metadata_init(&mut request); + request.web_content_link = Some(value.unwrap_or("").to_string()); + }, + "editable" => { + request_image_media_metadata_init(&mut request); + request.editable = Some(arg_from_str(value.unwrap_or("false"), err, "editable", "boolean")); + }, + "embed-link" => { + request_image_media_metadata_init(&mut request); + request.embed_link = Some(value.unwrap_or("").to_string()); + }, + "marked-viewed-by-me-date" => { + request_image_media_metadata_init(&mut request); + request.marked_viewed_by_me_date = Some(value.unwrap_or("").to_string()); + }, + "quota-bytes-used" => { + request_image_media_metadata_init(&mut request); + request.quota_bytes_used = Some(value.unwrap_or("").to_string()); + }, + "file-size" => { + request_image_media_metadata_init(&mut request); + request.file_size = Some(value.unwrap_or("").to_string()); + }, + "created-date" => { + request_image_media_metadata_init(&mut request); + request.created_date = Some(value.unwrap_or("").to_string()); + }, + "md5-checksum" => { + request_image_media_metadata_init(&mut request); + request.md5_checksum = Some(value.unwrap_or("").to_string()); + }, + "icon-link" => { + request_image_media_metadata_init(&mut request); + request.icon_link = Some(value.unwrap_or("").to_string()); + }, + "default-open-with-link" => { + request_image_media_metadata_init(&mut request); + request.default_open_with_link = Some(value.unwrap_or("").to_string()); + }, + "kind" => { + request_image_media_metadata_init(&mut request); + request.kind = Some(value.unwrap_or("").to_string()); + }, + "alternate-link" => { + request_image_media_metadata_init(&mut request); + request.alternate_link = Some(value.unwrap_or("").to_string()); + }, + "title" => { + request_image_media_metadata_init(&mut request); + request.title = Some(value.unwrap_or("").to_string()); + }, + "modified-by-me-date" => { + request_image_media_metadata_init(&mut request); + request.modified_by_me_date = Some(value.unwrap_or("").to_string()); + }, + "download-url" => { + request_image_media_metadata_init(&mut request); + request.download_url = Some(value.unwrap_or("").to_string()); + }, + "user-permission.with-link" => { + request_user_permission_init(&mut request); + request.user_permission.as_mut().unwrap().with_link = Some(arg_from_str(value.unwrap_or("false"), err, "user-permission.with-link", "boolean")); + }, + "user-permission.domain" => { + request_user_permission_init(&mut request); + request.user_permission.as_mut().unwrap().domain = Some(value.unwrap_or("").to_string()); + }, + "user-permission.name" => { + request_user_permission_init(&mut request); + request.user_permission.as_mut().unwrap().name = Some(value.unwrap_or("").to_string()); + }, + "user-permission.kind" => { + request_user_permission_init(&mut request); + request.user_permission.as_mut().unwrap().kind = Some(value.unwrap_or("").to_string()); + }, + "user-permission.value" => { + request_user_permission_init(&mut request); + request.user_permission.as_mut().unwrap().value = Some(value.unwrap_or("").to_string()); + }, + "user-permission.id" => { + request_user_permission_init(&mut request); + request.user_permission.as_mut().unwrap().id = Some(value.unwrap_or("").to_string()); + }, + "user-permission.auth-key" => { + request_user_permission_init(&mut request); + request.user_permission.as_mut().unwrap().auth_key = Some(value.unwrap_or("").to_string()); + }, + "user-permission.etag" => { + request_user_permission_init(&mut request); + request.user_permission.as_mut().unwrap().etag = Some(value.unwrap_or("").to_string()); + }, + "user-permission.email-address" => { + request_user_permission_init(&mut request); + request.user_permission.as_mut().unwrap().email_address = Some(value.unwrap_or("").to_string()); + }, + "user-permission.photo-link" => { + request_user_permission_init(&mut request); + request.user_permission.as_mut().unwrap().photo_link = Some(value.unwrap_or("").to_string()); + }, + "user-permission.role" => { + request_user_permission_init(&mut request); + request.user_permission.as_mut().unwrap().role = Some(value.unwrap_or("").to_string()); + }, + "user-permission.type" => { + request_user_permission_init(&mut request); + request.user_permission.as_mut().unwrap().type_ = Some(value.unwrap_or("").to_string()); + }, + "user-permission.additional-roles" => { + request_user_permission_init(&mut request); + if request.user_permission.as_mut().unwrap().additional_roles.is_none() { + request.user_permission.as_mut().unwrap().additional_roles = Some(Default::default()); + } + request.user_permission.as_mut().unwrap().additional_roles.as_mut().unwrap().push(value.unwrap_or("").to_string()); + }, + "user-permission.self-link" => { + request_user_permission_init(&mut request); + request.user_permission.as_mut().unwrap().self_link = Some(value.unwrap_or("").to_string()); + }, + "original-filename" => { + request_user_permission_init(&mut request); + request.original_filename = Some(value.unwrap_or("").to_string()); + }, + "file-extension" => { + request_user_permission_init(&mut request); + request.file_extension = Some(value.unwrap_or("").to_string()); + }, + "head-revision-id" => { + request_user_permission_init(&mut request); + request.head_revision_id = Some(value.unwrap_or("").to_string()); + }, + "self-link" => { + request_user_permission_init(&mut request); + request.self_link = Some(value.unwrap_or("").to_string()); + }, + "modified-date" => { + request_user_permission_init(&mut request); + request.modified_date = Some(value.unwrap_or("").to_string()); + }, + _ => { + err.issues.push(CLIError::Field(FieldError::Unknown(temp_cursor.to_string()))); + } + } + } + let mut call = self.hub.files().patch(request, opt.value_of("file-id").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { + let (key, value) = parse_kv_arg(&*parg, err, false); + match key { + "use-content-as-indexable-text" => { + call = call.use_content_as_indexable_text(arg_from_str(value.unwrap_or("false"), err, "use-content-as-indexable-text", "boolean")); + }, + "update-viewed-date" => { + call = call.update_viewed_date(arg_from_str(value.unwrap_or("false"), err, "update-viewed-date", "boolean")); + }, + "timed-text-track-name" => { + call = call.timed_text_track_name(value.unwrap_or("")); + }, + "timed-text-language" => { + call = call.timed_text_language(value.unwrap_or("")); + }, + "set-modified-date" => { + call = call.set_modified_date(arg_from_str(value.unwrap_or("false"), err, "set-modified-date", "boolean")); + }, + "remove-parents" => { + call = call.remove_parents(value.unwrap_or("")); + }, + "pinned" => { + call = call.pinned(arg_from_str(value.unwrap_or("false"), err, "pinned", "boolean")); + }, + "ocr-language" => { + call = call.ocr_language(value.unwrap_or("")); + }, + "ocr" => { + call = call.ocr(arg_from_str(value.unwrap_or("false"), err, "ocr", "boolean")); + }, + "new-revision" => { + call = call.new_revision(arg_from_str(value.unwrap_or("false"), err, "new-revision", "boolean")); + }, + "convert" => { + call = call.convert(arg_from_str(value.unwrap_or("false"), err, "convert", "boolean")); + }, + "add-parents" => { + call = call.add_parents(value.unwrap_or("")); + }, + "alt" + |"fields" + |"key" + |"oauth-token" + |"pretty-print" + |"quota-user" + |"user-ip" => { + let map = [ + ("oauth-token", "oauth_token"), + ("pretty-print", "prettyPrint"), + ("quota-user", "quotaUser"), + ("user-ip", "userIp"), + ]; + call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) + }, + _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), + } + } + let protocol = CallType::Standard; + if dry_run { + Ok(()) + } else { + assert!(err.issues.len() == 0); + for scope in self.opt.values_of("url").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(), + _ => unreachable!() + } { + Err(api_err) => Err(DoitError::ApiError(api_err)), + Ok((mut response, output_schema)) => { + serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); + Ok(()) + } + } + } + } + + fn _files_touch(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + let mut call = self.hub.files().touch(opt.value_of("file-id").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { + let (key, value) = parse_kv_arg(&*parg, err, false); + match key { + "alt" + |"fields" + |"key" + |"oauth-token" + |"pretty-print" + |"quota-user" + |"user-ip" => { + let map = [ + ("oauth-token", "oauth_token"), + ("pretty-print", "prettyPrint"), + ("quota-user", "quotaUser"), + ("user-ip", "userIp"), + ]; + call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) + }, + _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), + } + } + let protocol = CallType::Standard; + if dry_run { + Ok(()) + } else { + assert!(err.issues.len() == 0); + for scope in self.opt.values_of("url").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(), + _ => unreachable!() + } { + Err(api_err) => Err(DoitError::ApiError(api_err)), + Ok((mut response, output_schema)) => { + serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); + Ok(()) + } + } + } + } + + fn _files_trash(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + let mut call = self.hub.files().trash(opt.value_of("file-id").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { + let (key, value) = parse_kv_arg(&*parg, err, false); + match key { + "alt" + |"fields" + |"key" + |"oauth-token" + |"pretty-print" + |"quota-user" + |"user-ip" => { + let map = [ + ("oauth-token", "oauth_token"), + ("pretty-print", "prettyPrint"), + ("quota-user", "quotaUser"), + ("user-ip", "userIp"), + ]; + call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) + }, + _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), + } + } + let protocol = CallType::Standard; + if dry_run { + Ok(()) + } else { + assert!(err.issues.len() == 0); + for scope in self.opt.values_of("url").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(), + _ => unreachable!() + } { + Err(api_err) => Err(DoitError::ApiError(api_err)), + Ok((mut response, output_schema)) => { + serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); + Ok(()) + } + } + } + } + + fn _files_untrash(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + let mut call = self.hub.files().untrash(opt.value_of("file-id").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { + let (key, value) = parse_kv_arg(&*parg, err, false); + match key { + "alt" + |"fields" + |"key" + |"oauth-token" + |"pretty-print" + |"quota-user" + |"user-ip" => { + let map = [ + ("oauth-token", "oauth_token"), + ("pretty-print", "prettyPrint"), + ("quota-user", "quotaUser"), + ("user-ip", "userIp"), + ]; + call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) + }, + _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), + } + } + let protocol = CallType::Standard; + if dry_run { + Ok(()) + } else { + assert!(err.issues.len() == 0); + for scope in self.opt.values_of("url").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(), + _ => unreachable!() + } { + Err(api_err) => Err(DoitError::ApiError(api_err)), + Ok((mut response, output_schema)) => { + serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); + Ok(()) + } + } + } + } + + fn _files_update(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + + let mut request = api::File::default(); + let mut field_cursor = FieldCursor::default(); + for kvarg in opt.values_of("kv").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; + } + fn request_image_media_metadata_init(request: &mut api::File) { + if request.image_media_metadata.is_none() { + request.image_media_metadata = Some(Default::default()); + } + } + + fn request_image_media_metadata_location_init(request: &mut api::File) { + request_image_media_metadata_init(request); + if request.image_media_metadata.as_mut().unwrap().location.is_none() { + request.image_media_metadata.as_mut().unwrap().location = Some(Default::default()); + } + } + + fn request_indexable_text_init(request: &mut api::File) { + if request.indexable_text.is_none() { + request.indexable_text = Some(Default::default()); + } + } + + fn request_labels_init(request: &mut api::File) { + if request.labels.is_none() { + request.labels = Some(Default::default()); + } + } + + fn request_last_modifying_user_init(request: &mut api::File) { + if request.last_modifying_user.is_none() { + request.last_modifying_user = Some(Default::default()); + } + } + + fn request_last_modifying_user_picture_init(request: &mut api::File) { + request_last_modifying_user_init(request); + if request.last_modifying_user.as_mut().unwrap().picture.is_none() { + request.last_modifying_user.as_mut().unwrap().picture = Some(Default::default()); + } + } + + fn request_sharing_user_init(request: &mut api::File) { + if request.sharing_user.is_none() { + request.sharing_user = Some(Default::default()); + } + } + + fn request_sharing_user_picture_init(request: &mut api::File) { + request_sharing_user_init(request); + if request.sharing_user.as_mut().unwrap().picture.is_none() { + request.sharing_user.as_mut().unwrap().picture = Some(Default::default()); + } + } + + fn request_thumbnail_init(request: &mut api::File) { + if request.thumbnail.is_none() { + request.thumbnail = Some(Default::default()); + } + } + + fn request_user_permission_init(request: &mut api::File) { + if request.user_permission.is_none() { + request.user_permission = Some(Default::default()); + } + } + + fn request_video_media_metadata_init(request: &mut api::File) { + if request.video_media_metadata.is_none() { + request.video_media_metadata = Some(Default::default()); + } + } + + match &temp_cursor.to_string()[..] { + "mime-type" => { + request.mime_type = Some(value.unwrap_or("").to_string()); + }, + "last-viewed-by-me-date" => { + request.last_viewed_by_me_date = Some(value.unwrap_or("").to_string()); + }, + "app-data-contents" => { + request.app_data_contents = Some(arg_from_str(value.unwrap_or("false"), err, "app-data-contents", "boolean")); + }, + "thumbnail-link" => { + request.thumbnail_link = Some(value.unwrap_or("").to_string()); + }, + "labels.restricted" => { + request_labels_init(&mut request); + request.labels.as_mut().unwrap().restricted = Some(arg_from_str(value.unwrap_or("false"), err, "labels.restricted", "boolean")); + }, + "labels.hidden" => { + request_labels_init(&mut request); + request.labels.as_mut().unwrap().hidden = Some(arg_from_str(value.unwrap_or("false"), err, "labels.hidden", "boolean")); + }, + "labels.viewed" => { + request_labels_init(&mut request); + request.labels.as_mut().unwrap().viewed = Some(arg_from_str(value.unwrap_or("false"), err, "labels.viewed", "boolean")); + }, + "labels.starred" => { + request_labels_init(&mut request); + request.labels.as_mut().unwrap().starred = Some(arg_from_str(value.unwrap_or("false"), err, "labels.starred", "boolean")); + }, + "labels.trashed" => { + request_labels_init(&mut request); + request.labels.as_mut().unwrap().trashed = Some(arg_from_str(value.unwrap_or("false"), err, "labels.trashed", "boolean")); + }, + "indexable-text.text" => { + request_indexable_text_init(&mut request); + request.indexable_text.as_mut().unwrap().text = Some(value.unwrap_or("").to_string()); + }, + "explicitly-trashed" => { + request_indexable_text_init(&mut request); + request.explicitly_trashed = Some(arg_from_str(value.unwrap_or("false"), err, "explicitly-trashed", "boolean")); + }, + "etag" => { + request_indexable_text_init(&mut request); + request.etag = Some(value.unwrap_or("").to_string()); + }, + "last-modifying-user-name" => { + request_indexable_text_init(&mut request); + request.last_modifying_user_name = Some(value.unwrap_or("").to_string()); + }, + "writers-can-share" => { + request_indexable_text_init(&mut request); + request.writers_can_share = Some(arg_from_str(value.unwrap_or("false"), err, "writers-can-share", "boolean")); + }, + "id" => { + request_indexable_text_init(&mut request); + request.id = Some(value.unwrap_or("").to_string()); + }, + "sharing-user.picture.url" => { + request_sharing_user_picture_init(&mut request); + request.sharing_user.as_mut().unwrap().picture.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); + }, + "sharing-user.kind" => { + request_sharing_user_picture_init(&mut request); + request.sharing_user.as_mut().unwrap().kind = Some(value.unwrap_or("").to_string()); + }, + "sharing-user.display-name" => { + request_sharing_user_picture_init(&mut request); + request.sharing_user.as_mut().unwrap().display_name = Some(value.unwrap_or("").to_string()); + }, + "sharing-user.permission-id" => { + request_sharing_user_picture_init(&mut request); + request.sharing_user.as_mut().unwrap().permission_id = Some(value.unwrap_or("").to_string()); + }, + "sharing-user.is-authenticated-user" => { + request_sharing_user_picture_init(&mut request); + request.sharing_user.as_mut().unwrap().is_authenticated_user = Some(arg_from_str(value.unwrap_or("false"), err, "sharing-user.is-authenticated-user", "boolean")); + }, + "sharing-user.email-address" => { + request_sharing_user_picture_init(&mut request); + request.sharing_user.as_mut().unwrap().email_address = Some(value.unwrap_or("").to_string()); + }, + "video-media-metadata.width" => { + request_video_media_metadata_init(&mut request); + request.video_media_metadata.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "video-media-metadata.width", "integer")); + }, + "video-media-metadata.duration-millis" => { + request_video_media_metadata_init(&mut request); + request.video_media_metadata.as_mut().unwrap().duration_millis = Some(value.unwrap_or("").to_string()); + }, + "video-media-metadata.height" => { + request_video_media_metadata_init(&mut request); + request.video_media_metadata.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "video-media-metadata.height", "integer")); + }, + "last-modifying-user.picture.url" => { + request_last_modifying_user_picture_init(&mut request); + request.last_modifying_user.as_mut().unwrap().picture.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); + }, + "last-modifying-user.kind" => { + request_last_modifying_user_picture_init(&mut request); + request.last_modifying_user.as_mut().unwrap().kind = Some(value.unwrap_or("").to_string()); + }, + "last-modifying-user.display-name" => { + request_last_modifying_user_picture_init(&mut request); + request.last_modifying_user.as_mut().unwrap().display_name = Some(value.unwrap_or("").to_string()); + }, + "last-modifying-user.permission-id" => { + request_last_modifying_user_picture_init(&mut request); + request.last_modifying_user.as_mut().unwrap().permission_id = Some(value.unwrap_or("").to_string()); + }, + "last-modifying-user.is-authenticated-user" => { + request_last_modifying_user_picture_init(&mut request); + request.last_modifying_user.as_mut().unwrap().is_authenticated_user = Some(arg_from_str(value.unwrap_or("false"), err, "last-modifying-user.is-authenticated-user", "boolean")); + }, + "last-modifying-user.email-address" => { + request_last_modifying_user_picture_init(&mut request); + request.last_modifying_user.as_mut().unwrap().email_address = Some(value.unwrap_or("").to_string()); + }, + "copyable" => { + request_last_modifying_user_init(&mut request); + request.copyable = Some(arg_from_str(value.unwrap_or("false"), err, "copyable", "boolean")); + }, + "folder-color-rgb" => { + request_last_modifying_user_init(&mut request); + request.folder_color_rgb = Some(value.unwrap_or("").to_string()); + }, + "owner-names" => { + request_last_modifying_user_init(&mut request); + if request.owner_names.is_none() { + request.owner_names = Some(Default::default()); + } + request.owner_names.as_mut().unwrap().push(value.unwrap_or("").to_string()); + }, + "shared-with-me-date" => { + request_last_modifying_user_init(&mut request); + request.shared_with_me_date = Some(value.unwrap_or("").to_string()); + }, + "web-view-link" => { + request_last_modifying_user_init(&mut request); + request.web_view_link = Some(value.unwrap_or("").to_string()); + }, + "version" => { + request_last_modifying_user_init(&mut request); + request.version = Some(value.unwrap_or("").to_string()); + }, + "export-links" => { + request_last_modifying_user_init(&mut request); + if request.export_links.is_none() { + request.export_links = Some(Default::default()); + } + let (key, value) = parse_kv_arg(value.unwrap_or(""), err, true); + request.export_links.as_mut().unwrap().insert(key.to_string(), value.unwrap_or("").to_string()); + }, + "shared" => { + request_last_modifying_user_init(&mut request); + request.shared = Some(arg_from_str(value.unwrap_or("false"), err, "shared", "boolean")); + }, + "thumbnail.mime-type" => { + request_thumbnail_init(&mut request); + request.thumbnail.as_mut().unwrap().mime_type = Some(value.unwrap_or("").to_string()); + }, + "thumbnail.image" => { + request_thumbnail_init(&mut request); + request.thumbnail.as_mut().unwrap().image = Some(value.unwrap_or("").to_string()); + }, + "open-with-links" => { + request_thumbnail_init(&mut request); + if request.open_with_links.is_none() { + request.open_with_links = Some(Default::default()); + } + let (key, value) = parse_kv_arg(value.unwrap_or(""), err, true); + request.open_with_links.as_mut().unwrap().insert(key.to_string(), value.unwrap_or("").to_string()); + }, + "image-media-metadata.exposure-bias" => { + request_image_media_metadata_init(&mut request); + request.image_media_metadata.as_mut().unwrap().exposure_bias = Some(arg_from_str(value.unwrap_or("0.0"), err, "image-media-metadata.exposure-bias", "number")); + }, + "image-media-metadata.exposure-time" => { + request_image_media_metadata_init(&mut request); + request.image_media_metadata.as_mut().unwrap().exposure_time = Some(arg_from_str(value.unwrap_or("0.0"), err, "image-media-metadata.exposure-time", "number")); + }, + "image-media-metadata.max-aperture-value" => { + request_image_media_metadata_init(&mut request); + request.image_media_metadata.as_mut().unwrap().max_aperture_value = Some(arg_from_str(value.unwrap_or("0.0"), err, "image-media-metadata.max-aperture-value", "number")); + }, + "image-media-metadata.width" => { + request_image_media_metadata_init(&mut request); + request.image_media_metadata.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "image-media-metadata.width", "integer")); + }, + "image-media-metadata.focal-length" => { + request_image_media_metadata_init(&mut request); + request.image_media_metadata.as_mut().unwrap().focal_length = Some(arg_from_str(value.unwrap_or("0.0"), err, "image-media-metadata.focal-length", "number")); + }, + "image-media-metadata.camera-make" => { + request_image_media_metadata_init(&mut request); + request.image_media_metadata.as_mut().unwrap().camera_make = Some(value.unwrap_or("").to_string()); + }, + "image-media-metadata.exposure-mode" => { + request_image_media_metadata_init(&mut request); + request.image_media_metadata.as_mut().unwrap().exposure_mode = Some(value.unwrap_or("").to_string()); + }, + "image-media-metadata.color-space" => { + request_image_media_metadata_init(&mut request); + request.image_media_metadata.as_mut().unwrap().color_space = Some(value.unwrap_or("").to_string()); + }, + "image-media-metadata.location.latitude" => { + request_image_media_metadata_location_init(&mut request); + request.image_media_metadata.as_mut().unwrap().location.as_mut().unwrap().latitude = Some(arg_from_str(value.unwrap_or("0.0"), err, "image-media-metadata.location.latitude", "number")); + }, + "image-media-metadata.location.altitude" => { + request_image_media_metadata_location_init(&mut request); + request.image_media_metadata.as_mut().unwrap().location.as_mut().unwrap().altitude = Some(arg_from_str(value.unwrap_or("0.0"), err, "image-media-metadata.location.altitude", "number")); + }, + "image-media-metadata.location.longitude" => { + request_image_media_metadata_location_init(&mut request); + request.image_media_metadata.as_mut().unwrap().location.as_mut().unwrap().longitude = Some(arg_from_str(value.unwrap_or("0.0"), err, "image-media-metadata.location.longitude", "number")); + }, + "image-media-metadata.subject-distance" => { + request_image_media_metadata_location_init(&mut request); + request.image_media_metadata.as_mut().unwrap().subject_distance = Some(arg_from_str(value.unwrap_or("-0"), err, "image-media-metadata.subject-distance", "integer")); + }, + "image-media-metadata.height" => { + request_image_media_metadata_location_init(&mut request); + request.image_media_metadata.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "image-media-metadata.height", "integer")); + }, + "image-media-metadata.lens" => { + request_image_media_metadata_location_init(&mut request); + request.image_media_metadata.as_mut().unwrap().lens = Some(value.unwrap_or("").to_string()); + }, + "image-media-metadata.date" => { + request_image_media_metadata_location_init(&mut request); + request.image_media_metadata.as_mut().unwrap().date = Some(value.unwrap_or("").to_string()); + }, + "image-media-metadata.iso-speed" => { + request_image_media_metadata_location_init(&mut request); + request.image_media_metadata.as_mut().unwrap().iso_speed = Some(arg_from_str(value.unwrap_or("-0"), err, "image-media-metadata.iso-speed", "integer")); + }, + "image-media-metadata.metering-mode" => { + request_image_media_metadata_location_init(&mut request); + request.image_media_metadata.as_mut().unwrap().metering_mode = Some(value.unwrap_or("").to_string()); + }, + "image-media-metadata.flash-used" => { + request_image_media_metadata_location_init(&mut request); + request.image_media_metadata.as_mut().unwrap().flash_used = Some(arg_from_str(value.unwrap_or("false"), err, "image-media-metadata.flash-used", "boolean")); + }, + "image-media-metadata.aperture" => { + request_image_media_metadata_location_init(&mut request); + request.image_media_metadata.as_mut().unwrap().aperture = Some(arg_from_str(value.unwrap_or("0.0"), err, "image-media-metadata.aperture", "number")); + }, + "image-media-metadata.rotation" => { + request_image_media_metadata_location_init(&mut request); + request.image_media_metadata.as_mut().unwrap().rotation = Some(arg_from_str(value.unwrap_or("-0"), err, "image-media-metadata.rotation", "integer")); + }, + "image-media-metadata.sensor" => { + request_image_media_metadata_location_init(&mut request); + request.image_media_metadata.as_mut().unwrap().sensor = Some(value.unwrap_or("").to_string()); + }, + "image-media-metadata.white-balance" => { + request_image_media_metadata_location_init(&mut request); + request.image_media_metadata.as_mut().unwrap().white_balance = Some(value.unwrap_or("").to_string()); + }, + "image-media-metadata.camera-model" => { + request_image_media_metadata_location_init(&mut request); + request.image_media_metadata.as_mut().unwrap().camera_model = Some(value.unwrap_or("").to_string()); + }, + "description" => { + request_image_media_metadata_init(&mut request); + request.description = Some(value.unwrap_or("").to_string()); + }, + "web-content-link" => { + request_image_media_metadata_init(&mut request); + request.web_content_link = Some(value.unwrap_or("").to_string()); + }, + "editable" => { + request_image_media_metadata_init(&mut request); + request.editable = Some(arg_from_str(value.unwrap_or("false"), err, "editable", "boolean")); + }, + "embed-link" => { + request_image_media_metadata_init(&mut request); + request.embed_link = Some(value.unwrap_or("").to_string()); + }, + "marked-viewed-by-me-date" => { + request_image_media_metadata_init(&mut request); + request.marked_viewed_by_me_date = Some(value.unwrap_or("").to_string()); + }, + "quota-bytes-used" => { + request_image_media_metadata_init(&mut request); + request.quota_bytes_used = Some(value.unwrap_or("").to_string()); + }, + "file-size" => { + request_image_media_metadata_init(&mut request); + request.file_size = Some(value.unwrap_or("").to_string()); + }, + "created-date" => { + request_image_media_metadata_init(&mut request); + request.created_date = Some(value.unwrap_or("").to_string()); + }, + "md5-checksum" => { + request_image_media_metadata_init(&mut request); + request.md5_checksum = Some(value.unwrap_or("").to_string()); + }, + "icon-link" => { + request_image_media_metadata_init(&mut request); + request.icon_link = Some(value.unwrap_or("").to_string()); + }, + "default-open-with-link" => { + request_image_media_metadata_init(&mut request); + request.default_open_with_link = Some(value.unwrap_or("").to_string()); + }, + "kind" => { + request_image_media_metadata_init(&mut request); + request.kind = Some(value.unwrap_or("").to_string()); + }, + "alternate-link" => { + request_image_media_metadata_init(&mut request); + request.alternate_link = Some(value.unwrap_or("").to_string()); + }, + "title" => { + request_image_media_metadata_init(&mut request); + request.title = Some(value.unwrap_or("").to_string()); + }, + "modified-by-me-date" => { + request_image_media_metadata_init(&mut request); + request.modified_by_me_date = Some(value.unwrap_or("").to_string()); + }, + "download-url" => { + request_image_media_metadata_init(&mut request); + request.download_url = Some(value.unwrap_or("").to_string()); + }, + "user-permission.with-link" => { + request_user_permission_init(&mut request); + request.user_permission.as_mut().unwrap().with_link = Some(arg_from_str(value.unwrap_or("false"), err, "user-permission.with-link", "boolean")); + }, + "user-permission.domain" => { + request_user_permission_init(&mut request); + request.user_permission.as_mut().unwrap().domain = Some(value.unwrap_or("").to_string()); + }, + "user-permission.name" => { + request_user_permission_init(&mut request); + request.user_permission.as_mut().unwrap().name = Some(value.unwrap_or("").to_string()); + }, + "user-permission.kind" => { + request_user_permission_init(&mut request); + request.user_permission.as_mut().unwrap().kind = Some(value.unwrap_or("").to_string()); + }, + "user-permission.value" => { + request_user_permission_init(&mut request); + request.user_permission.as_mut().unwrap().value = Some(value.unwrap_or("").to_string()); + }, + "user-permission.id" => { + request_user_permission_init(&mut request); + request.user_permission.as_mut().unwrap().id = Some(value.unwrap_or("").to_string()); + }, + "user-permission.auth-key" => { + request_user_permission_init(&mut request); + request.user_permission.as_mut().unwrap().auth_key = Some(value.unwrap_or("").to_string()); + }, + "user-permission.etag" => { + request_user_permission_init(&mut request); + request.user_permission.as_mut().unwrap().etag = Some(value.unwrap_or("").to_string()); + }, + "user-permission.email-address" => { + request_user_permission_init(&mut request); + request.user_permission.as_mut().unwrap().email_address = Some(value.unwrap_or("").to_string()); + }, + "user-permission.photo-link" => { + request_user_permission_init(&mut request); + request.user_permission.as_mut().unwrap().photo_link = Some(value.unwrap_or("").to_string()); + }, + "user-permission.role" => { + request_user_permission_init(&mut request); + request.user_permission.as_mut().unwrap().role = Some(value.unwrap_or("").to_string()); + }, + "user-permission.type" => { + request_user_permission_init(&mut request); + request.user_permission.as_mut().unwrap().type_ = Some(value.unwrap_or("").to_string()); + }, + "user-permission.additional-roles" => { + request_user_permission_init(&mut request); + if request.user_permission.as_mut().unwrap().additional_roles.is_none() { + request.user_permission.as_mut().unwrap().additional_roles = Some(Default::default()); + } + request.user_permission.as_mut().unwrap().additional_roles.as_mut().unwrap().push(value.unwrap_or("").to_string()); + }, + "user-permission.self-link" => { + request_user_permission_init(&mut request); + request.user_permission.as_mut().unwrap().self_link = Some(value.unwrap_or("").to_string()); + }, + "original-filename" => { + request_user_permission_init(&mut request); + request.original_filename = Some(value.unwrap_or("").to_string()); + }, + "file-extension" => { + request_user_permission_init(&mut request); + request.file_extension = Some(value.unwrap_or("").to_string()); + }, + "head-revision-id" => { + request_user_permission_init(&mut request); + request.head_revision_id = Some(value.unwrap_or("").to_string()); + }, + "self-link" => { + request_user_permission_init(&mut request); + request.self_link = Some(value.unwrap_or("").to_string()); + }, + "modified-date" => { + request_user_permission_init(&mut request); + request.modified_date = Some(value.unwrap_or("").to_string()); + }, + _ => { + err.issues.push(CLIError::Field(FieldError::Unknown(temp_cursor.to_string()))); + } + } + } + let mut call = self.hub.files().update(request, opt.value_of("file-id").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { + let (key, value) = parse_kv_arg(&*parg, err, false); + match key { + "use-content-as-indexable-text" => { + call = call.use_content_as_indexable_text(arg_from_str(value.unwrap_or("false"), err, "use-content-as-indexable-text", "boolean")); + }, + "update-viewed-date" => { + call = call.update_viewed_date(arg_from_str(value.unwrap_or("false"), err, "update-viewed-date", "boolean")); + }, + "timed-text-track-name" => { + call = call.timed_text_track_name(value.unwrap_or("")); + }, + "timed-text-language" => { + call = call.timed_text_language(value.unwrap_or("")); + }, + "set-modified-date" => { + call = call.set_modified_date(arg_from_str(value.unwrap_or("false"), err, "set-modified-date", "boolean")); + }, + "remove-parents" => { + call = call.remove_parents(value.unwrap_or("")); + }, + "pinned" => { + call = call.pinned(arg_from_str(value.unwrap_or("false"), err, "pinned", "boolean")); + }, + "ocr-language" => { + call = call.ocr_language(value.unwrap_or("")); + }, + "ocr" => { + call = call.ocr(arg_from_str(value.unwrap_or("false"), err, "ocr", "boolean")); + }, + "new-revision" => { + call = call.new_revision(arg_from_str(value.unwrap_or("false"), err, "new-revision", "boolean")); + }, + "convert" => { + call = call.convert(arg_from_str(value.unwrap_or("false"), err, "convert", "boolean")); + }, + "add-parents" => { + call = call.add_parents(value.unwrap_or("")); + }, + "alt" + |"fields" + |"key" + |"oauth-token" + |"pretty-print" + |"quota-user" + |"user-ip" => { + let map = [ + ("oauth-token", "oauth_token"), + ("pretty-print", "prettyPrint"), + ("quota-user", "quotaUser"), + ("user-ip", "userIp"), + ]; + call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) + }, + _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), + } + } + let vals = opt.values_of("mode").unwrap(); + let protocol = protocol_from_str(vals[0], ["simple", "resumable"].iter().map(|&v| v.to_string()).collect(), err); + let mut input_file = input_file_from_opts(vals[1], err); + let mime_type = input_mime_from_opts(opt.value_of("mime").unwrap_or("application/octet-stream"), err); + if dry_run { + Ok(()) + } else { + assert!(err.issues.len() == 0); + for scope in self.opt.values_of("url").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::Upload(UploadProtocol::Simple) => call.upload(input_file.unwrap(), mime_type.unwrap()), + CallType::Upload(UploadProtocol::Resumable) => call.upload_resumable(input_file.unwrap(), mime_type.unwrap()), + CallType::Standard => unreachable!() + } { + Err(api_err) => Err(DoitError::ApiError(api_err)), + Ok((mut response, output_schema)) => { + serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); + Ok(()) + } + } + } + } + + fn _files_watch(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { let mut request = api::Channel::default(); let mut field_cursor = FieldCursor::default(); - for kvarg in self.opt.arg_kv.iter() { + for kvarg in opt.values_of("kv").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(); @@ -4200,8 +4181,8 @@ impl Engine { } } let mut download_mode = false; - let mut call = self.hub.files().watch(request, &self.opt.arg_file_id); - for parg in self.opt.arg_v.iter() { + let mut call = self.hub.files().watch(request, opt.value_of("file-id").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { let (key, value) = parse_kv_arg(&*parg, err, false); match key { "update-viewed-date" => { @@ -4237,36 +4218,39 @@ impl Engine { _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), } } - let protocol = "standard-request"; + let protocol = CallType::Standard; if dry_run { - None + Ok(()) } else { assert!(err.issues.len() == 0); - if self.opt.flag_scope.len() > 0 { - call = call.add_scope(&self.opt.flag_scope); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); } - let mut ostream = writer_from_opts(self.opt.flag_o, &self.opt.arg_out); + 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 { - "standard-request" => call.doit(), - _ => unreachable!(), + CallType::Standard => call.doit(), + _ => unreachable!() } { - Err(api_err) => Some(api_err), + Err(api_err) => Err(DoitError::ApiError(api_err)), Ok((mut response, output_schema)) => { if !download_mode { serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); } else { io::copy(&mut response, &mut ostream).unwrap(); } - None + Ok(()) } } } } - fn _parents_delete(&self, dry_run: bool, err: &mut InvalidOptionsError) - -> Option { - let mut call = self.hub.parents().delete(&self.opt.arg_file_id, &self.opt.arg_parent_id); - for parg in self.opt.arg_v.iter() { + fn _parents_delete(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + let mut call = self.hub.parents().delete(opt.value_of("file-id").unwrap_or(""), opt.value_of("parent-id").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { let (key, value) = parse_kv_arg(&*parg, err, false); match key { "alt" @@ -4287,30 +4271,30 @@ impl Engine { _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), } } - let protocol = "standard-request"; + let protocol = CallType::Standard; if dry_run { - None + Ok(()) } else { assert!(err.issues.len() == 0); - if self.opt.flag_scope.len() > 0 { - call = call.add_scope(&self.opt.flag_scope); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); } match match protocol { - "standard-request" => call.doit(), - _ => unreachable!(), + CallType::Standard => call.doit(), + _ => unreachable!() } { - Err(api_err) => Some(api_err), + Err(api_err) => Err(DoitError::ApiError(api_err)), Ok(mut response) => { - None + Ok(()) } } } } - fn _parents_get(&self, dry_run: bool, err: &mut InvalidOptionsError) - -> Option { - let mut call = self.hub.parents().get(&self.opt.arg_file_id, &self.opt.arg_parent_id); - for parg in self.opt.arg_v.iter() { + fn _parents_get(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + let mut call = self.hub.parents().get(opt.value_of("file-id").unwrap_or(""), opt.value_of("parent-id").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { let (key, value) = parse_kv_arg(&*parg, err, false); match key { "alt" @@ -4331,34 +4315,37 @@ impl Engine { _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), } } - let protocol = "standard-request"; + let protocol = CallType::Standard; if dry_run { - None + Ok(()) } else { assert!(err.issues.len() == 0); - if self.opt.flag_scope.len() > 0 { - call = call.add_scope(&self.opt.flag_scope); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); } - let mut ostream = writer_from_opts(self.opt.flag_o, &self.opt.arg_out); + 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 { - "standard-request" => call.doit(), - _ => unreachable!(), + CallType::Standard => call.doit(), + _ => unreachable!() } { - Err(api_err) => Some(api_err), + Err(api_err) => Err(DoitError::ApiError(api_err)), Ok((mut response, output_schema)) => { serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); - None + Ok(()) } } } } - fn _parents_insert(&self, dry_run: bool, err: &mut InvalidOptionsError) - -> Option { + fn _parents_insert(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { let mut request = api::ParentReference::default(); let mut field_cursor = FieldCursor::default(); - for kvarg in self.opt.arg_kv.iter() { + for kvarg in opt.values_of("kv").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(); @@ -4393,8 +4380,8 @@ impl Engine { } } } - let mut call = self.hub.parents().insert(request, &self.opt.arg_file_id); - for parg in self.opt.arg_v.iter() { + let mut call = self.hub.parents().insert(request, opt.value_of("file-id").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { let (key, value) = parse_kv_arg(&*parg, err, false); match key { "alt" @@ -4415,32 +4402,35 @@ impl Engine { _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), } } - let protocol = "standard-request"; + let protocol = CallType::Standard; if dry_run { - None + Ok(()) } else { assert!(err.issues.len() == 0); - if self.opt.flag_scope.len() > 0 { - call = call.add_scope(&self.opt.flag_scope); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); } - let mut ostream = writer_from_opts(self.opt.flag_o, &self.opt.arg_out); + 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 { - "standard-request" => call.doit(), - _ => unreachable!(), + CallType::Standard => call.doit(), + _ => unreachable!() } { - Err(api_err) => Some(api_err), + Err(api_err) => Err(DoitError::ApiError(api_err)), Ok((mut response, output_schema)) => { serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); - None + Ok(()) } } } } - fn _parents_list(&self, dry_run: bool, err: &mut InvalidOptionsError) - -> Option { - let mut call = self.hub.parents().list(&self.opt.arg_file_id); - for parg in self.opt.arg_v.iter() { + fn _parents_list(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + let mut call = self.hub.parents().list(opt.value_of("file-id").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { let (key, value) = parse_kv_arg(&*parg, err, false); match key { "alt" @@ -4461,32 +4451,35 @@ impl Engine { _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), } } - let protocol = "standard-request"; + let protocol = CallType::Standard; if dry_run { - None + Ok(()) } else { assert!(err.issues.len() == 0); - if self.opt.flag_scope.len() > 0 { - call = call.add_scope(&self.opt.flag_scope); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); } - let mut ostream = writer_from_opts(self.opt.flag_o, &self.opt.arg_out); + 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 { - "standard-request" => call.doit(), - _ => unreachable!(), + CallType::Standard => call.doit(), + _ => unreachable!() } { - Err(api_err) => Some(api_err), + Err(api_err) => Err(DoitError::ApiError(api_err)), Ok((mut response, output_schema)) => { serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); - None + Ok(()) } } } } - fn _permissions_delete(&self, dry_run: bool, err: &mut InvalidOptionsError) - -> Option { - let mut call = self.hub.permissions().delete(&self.opt.arg_file_id, &self.opt.arg_permission_id); - for parg in self.opt.arg_v.iter() { + fn _permissions_delete(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + let mut call = self.hub.permissions().delete(opt.value_of("file-id").unwrap_or(""), opt.value_of("permission-id").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { let (key, value) = parse_kv_arg(&*parg, err, false); match key { "alt" @@ -4507,30 +4500,30 @@ impl Engine { _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), } } - let protocol = "standard-request"; + let protocol = CallType::Standard; if dry_run { - None + Ok(()) } else { assert!(err.issues.len() == 0); - if self.opt.flag_scope.len() > 0 { - call = call.add_scope(&self.opt.flag_scope); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); } match match protocol { - "standard-request" => call.doit(), - _ => unreachable!(), + CallType::Standard => call.doit(), + _ => unreachable!() } { - Err(api_err) => Some(api_err), + Err(api_err) => Err(DoitError::ApiError(api_err)), Ok(mut response) => { - None + Ok(()) } } } } - fn _permissions_get(&self, dry_run: bool, err: &mut InvalidOptionsError) - -> Option { - let mut call = self.hub.permissions().get(&self.opt.arg_file_id, &self.opt.arg_permission_id); - for parg in self.opt.arg_v.iter() { + fn _permissions_get(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + let mut call = self.hub.permissions().get(opt.value_of("file-id").unwrap_or(""), opt.value_of("permission-id").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { let (key, value) = parse_kv_arg(&*parg, err, false); match key { "alt" @@ -4551,32 +4544,35 @@ impl Engine { _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), } } - let protocol = "standard-request"; + let protocol = CallType::Standard; if dry_run { - None + Ok(()) } else { assert!(err.issues.len() == 0); - if self.opt.flag_scope.len() > 0 { - call = call.add_scope(&self.opt.flag_scope); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); } - let mut ostream = writer_from_opts(self.opt.flag_o, &self.opt.arg_out); + 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 { - "standard-request" => call.doit(), - _ => unreachable!(), + CallType::Standard => call.doit(), + _ => unreachable!() } { - Err(api_err) => Some(api_err), + Err(api_err) => Err(DoitError::ApiError(api_err)), Ok((mut response, output_schema)) => { serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); - None + Ok(()) } } } } - fn _permissions_get_id_for_email(&self, dry_run: bool, err: &mut InvalidOptionsError) - -> Option { - let mut call = self.hub.permissions().get_id_for_email(&self.opt.arg_email); - for parg in self.opt.arg_v.iter() { + fn _permissions_get_id_for_email(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + let mut call = self.hub.permissions().get_id_for_email(opt.value_of("email").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { let (key, value) = parse_kv_arg(&*parg, err, false); match key { "alt" @@ -4597,34 +4593,37 @@ impl Engine { _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), } } - let protocol = "standard-request"; + let protocol = CallType::Standard; if dry_run { - None + Ok(()) } else { assert!(err.issues.len() == 0); - if self.opt.flag_scope.len() > 0 { - call = call.add_scope(&self.opt.flag_scope); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); } - let mut ostream = writer_from_opts(self.opt.flag_o, &self.opt.arg_out); + 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 { - "standard-request" => call.doit(), - _ => unreachable!(), + CallType::Standard => call.doit(), + _ => unreachable!() } { - Err(api_err) => Some(api_err), + Err(api_err) => Err(DoitError::ApiError(api_err)), Ok((mut response, output_schema)) => { serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); - None + Ok(()) } } } } - fn _permissions_insert(&self, dry_run: bool, err: &mut InvalidOptionsError) - -> Option { + fn _permissions_insert(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { let mut request = api::Permission::default(); let mut field_cursor = FieldCursor::default(); - for kvarg in self.opt.arg_kv.iter() { + for kvarg in opt.values_of("kv").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(); @@ -4689,8 +4688,8 @@ impl Engine { } } } - let mut call = self.hub.permissions().insert(request, &self.opt.arg_file_id); - for parg in self.opt.arg_v.iter() { + let mut call = self.hub.permissions().insert(request, opt.value_of("file-id").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { let (key, value) = parse_kv_arg(&*parg, err, false); match key { "send-notification-emails" => { @@ -4717,32 +4716,35 @@ impl Engine { _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), } } - let protocol = "standard-request"; + let protocol = CallType::Standard; if dry_run { - None + Ok(()) } else { assert!(err.issues.len() == 0); - if self.opt.flag_scope.len() > 0 { - call = call.add_scope(&self.opt.flag_scope); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); } - let mut ostream = writer_from_opts(self.opt.flag_o, &self.opt.arg_out); + 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 { - "standard-request" => call.doit(), - _ => unreachable!(), + CallType::Standard => call.doit(), + _ => unreachable!() } { - Err(api_err) => Some(api_err), + Err(api_err) => Err(DoitError::ApiError(api_err)), Ok((mut response, output_schema)) => { serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); - None + Ok(()) } } } } - fn _permissions_list(&self, dry_run: bool, err: &mut InvalidOptionsError) - -> Option { - let mut call = self.hub.permissions().list(&self.opt.arg_file_id); - for parg in self.opt.arg_v.iter() { + fn _permissions_list(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + let mut call = self.hub.permissions().list(opt.value_of("file-id").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { let (key, value) = parse_kv_arg(&*parg, err, false); match key { "alt" @@ -4763,34 +4765,37 @@ impl Engine { _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), } } - let protocol = "standard-request"; + let protocol = CallType::Standard; if dry_run { - None + Ok(()) } else { assert!(err.issues.len() == 0); - if self.opt.flag_scope.len() > 0 { - call = call.add_scope(&self.opt.flag_scope); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); } - let mut ostream = writer_from_opts(self.opt.flag_o, &self.opt.arg_out); + 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 { - "standard-request" => call.doit(), - _ => unreachable!(), + CallType::Standard => call.doit(), + _ => unreachable!() } { - Err(api_err) => Some(api_err), + Err(api_err) => Err(DoitError::ApiError(api_err)), Ok((mut response, output_schema)) => { serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); - None + Ok(()) } } } } - fn _permissions_patch(&self, dry_run: bool, err: &mut InvalidOptionsError) - -> Option { + fn _permissions_patch(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { let mut request = api::Permission::default(); let mut field_cursor = FieldCursor::default(); - for kvarg in self.opt.arg_kv.iter() { + for kvarg in opt.values_of("kv").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(); @@ -4855,8 +4860,8 @@ impl Engine { } } } - let mut call = self.hub.permissions().patch(request, &self.opt.arg_file_id, &self.opt.arg_permission_id); - for parg in self.opt.arg_v.iter() { + let mut call = self.hub.permissions().patch(request, opt.value_of("file-id").unwrap_or(""), opt.value_of("permission-id").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { let (key, value) = parse_kv_arg(&*parg, err, false); match key { "transfer-ownership" => { @@ -4880,34 +4885,37 @@ impl Engine { _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), } } - let protocol = "standard-request"; + let protocol = CallType::Standard; if dry_run { - None + Ok(()) } else { assert!(err.issues.len() == 0); - if self.opt.flag_scope.len() > 0 { - call = call.add_scope(&self.opt.flag_scope); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); } - let mut ostream = writer_from_opts(self.opt.flag_o, &self.opt.arg_out); + 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 { - "standard-request" => call.doit(), - _ => unreachable!(), + CallType::Standard => call.doit(), + _ => unreachable!() } { - Err(api_err) => Some(api_err), + Err(api_err) => Err(DoitError::ApiError(api_err)), Ok((mut response, output_schema)) => { serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); - None + Ok(()) } } } } - fn _permissions_update(&self, dry_run: bool, err: &mut InvalidOptionsError) - -> Option { + fn _permissions_update(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { let mut request = api::Permission::default(); let mut field_cursor = FieldCursor::default(); - for kvarg in self.opt.arg_kv.iter() { + for kvarg in opt.values_of("kv").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(); @@ -4972,8 +4980,8 @@ impl Engine { } } } - let mut call = self.hub.permissions().update(request, &self.opt.arg_file_id, &self.opt.arg_permission_id); - for parg in self.opt.arg_v.iter() { + let mut call = self.hub.permissions().update(request, opt.value_of("file-id").unwrap_or(""), opt.value_of("permission-id").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { let (key, value) = parse_kv_arg(&*parg, err, false); match key { "transfer-ownership" => { @@ -4997,32 +5005,35 @@ impl Engine { _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), } } - let protocol = "standard-request"; + let protocol = CallType::Standard; if dry_run { - None + Ok(()) } else { assert!(err.issues.len() == 0); - if self.opt.flag_scope.len() > 0 { - call = call.add_scope(&self.opt.flag_scope); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); } - let mut ostream = writer_from_opts(self.opt.flag_o, &self.opt.arg_out); + 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 { - "standard-request" => call.doit(), - _ => unreachable!(), + CallType::Standard => call.doit(), + _ => unreachable!() } { - Err(api_err) => Some(api_err), + Err(api_err) => Err(DoitError::ApiError(api_err)), Ok((mut response, output_schema)) => { serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); - None + Ok(()) } } } } - fn _properties_delete(&self, dry_run: bool, err: &mut InvalidOptionsError) - -> Option { - let mut call = self.hub.properties().delete(&self.opt.arg_file_id, &self.opt.arg_property_key); - for parg in self.opt.arg_v.iter() { + fn _properties_delete(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + let mut call = self.hub.properties().delete(opt.value_of("file-id").unwrap_or(""), opt.value_of("property-key").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { let (key, value) = parse_kv_arg(&*parg, err, false); match key { "visibility" => { @@ -5046,30 +5057,30 @@ impl Engine { _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), } } - let protocol = "standard-request"; + let protocol = CallType::Standard; if dry_run { - None + Ok(()) } else { assert!(err.issues.len() == 0); - if self.opt.flag_scope.len() > 0 { - call = call.add_scope(&self.opt.flag_scope); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); } match match protocol { - "standard-request" => call.doit(), - _ => unreachable!(), + CallType::Standard => call.doit(), + _ => unreachable!() } { - Err(api_err) => Some(api_err), + Err(api_err) => Err(DoitError::ApiError(api_err)), Ok(mut response) => { - None + Ok(()) } } } } - fn _properties_get(&self, dry_run: bool, err: &mut InvalidOptionsError) - -> Option { - let mut call = self.hub.properties().get(&self.opt.arg_file_id, &self.opt.arg_property_key); - for parg in self.opt.arg_v.iter() { + fn _properties_get(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + let mut call = self.hub.properties().get(opt.value_of("file-id").unwrap_or(""), opt.value_of("property-key").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { let (key, value) = parse_kv_arg(&*parg, err, false); match key { "visibility" => { @@ -5093,34 +5104,37 @@ impl Engine { _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), } } - let protocol = "standard-request"; + let protocol = CallType::Standard; if dry_run { - None + Ok(()) } else { assert!(err.issues.len() == 0); - if self.opt.flag_scope.len() > 0 { - call = call.add_scope(&self.opt.flag_scope); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); } - let mut ostream = writer_from_opts(self.opt.flag_o, &self.opt.arg_out); + 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 { - "standard-request" => call.doit(), - _ => unreachable!(), + CallType::Standard => call.doit(), + _ => unreachable!() } { - Err(api_err) => Some(api_err), + Err(api_err) => Err(DoitError::ApiError(api_err)), Ok((mut response, output_schema)) => { serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); - None + Ok(()) } } } } - fn _properties_insert(&self, dry_run: bool, err: &mut InvalidOptionsError) - -> Option { + fn _properties_insert(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { let mut request = api::Property::default(); let mut field_cursor = FieldCursor::default(); - for kvarg in self.opt.arg_kv.iter() { + for kvarg in opt.values_of("kv").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(); @@ -5158,8 +5172,8 @@ impl Engine { } } } - let mut call = self.hub.properties().insert(request, &self.opt.arg_file_id); - for parg in self.opt.arg_v.iter() { + let mut call = self.hub.properties().insert(request, opt.value_of("file-id").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { let (key, value) = parse_kv_arg(&*parg, err, false); match key { "alt" @@ -5180,32 +5194,35 @@ impl Engine { _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), } } - let protocol = "standard-request"; + let protocol = CallType::Standard; if dry_run { - None + Ok(()) } else { assert!(err.issues.len() == 0); - if self.opt.flag_scope.len() > 0 { - call = call.add_scope(&self.opt.flag_scope); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); } - let mut ostream = writer_from_opts(self.opt.flag_o, &self.opt.arg_out); + 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 { - "standard-request" => call.doit(), - _ => unreachable!(), + CallType::Standard => call.doit(), + _ => unreachable!() } { - Err(api_err) => Some(api_err), + Err(api_err) => Err(DoitError::ApiError(api_err)), Ok((mut response, output_schema)) => { serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); - None + Ok(()) } } } } - fn _properties_list(&self, dry_run: bool, err: &mut InvalidOptionsError) - -> Option { - let mut call = self.hub.properties().list(&self.opt.arg_file_id); - for parg in self.opt.arg_v.iter() { + fn _properties_list(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + let mut call = self.hub.properties().list(opt.value_of("file-id").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { let (key, value) = parse_kv_arg(&*parg, err, false); match key { "alt" @@ -5226,34 +5243,37 @@ impl Engine { _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), } } - let protocol = "standard-request"; + let protocol = CallType::Standard; if dry_run { - None + Ok(()) } else { assert!(err.issues.len() == 0); - if self.opt.flag_scope.len() > 0 { - call = call.add_scope(&self.opt.flag_scope); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); } - let mut ostream = writer_from_opts(self.opt.flag_o, &self.opt.arg_out); + 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 { - "standard-request" => call.doit(), - _ => unreachable!(), + CallType::Standard => call.doit(), + _ => unreachable!() } { - Err(api_err) => Some(api_err), + Err(api_err) => Err(DoitError::ApiError(api_err)), Ok((mut response, output_schema)) => { serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); - None + Ok(()) } } } } - fn _properties_patch(&self, dry_run: bool, err: &mut InvalidOptionsError) - -> Option { + fn _properties_patch(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { let mut request = api::Property::default(); let mut field_cursor = FieldCursor::default(); - for kvarg in self.opt.arg_kv.iter() { + for kvarg in opt.values_of("kv").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(); @@ -5291,8 +5311,8 @@ impl Engine { } } } - let mut call = self.hub.properties().patch(request, &self.opt.arg_file_id, &self.opt.arg_property_key); - for parg in self.opt.arg_v.iter() { + let mut call = self.hub.properties().patch(request, opt.value_of("file-id").unwrap_or(""), opt.value_of("property-key").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { let (key, value) = parse_kv_arg(&*parg, err, false); match key { "visibility" => { @@ -5316,34 +5336,37 @@ impl Engine { _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), } } - let protocol = "standard-request"; + let protocol = CallType::Standard; if dry_run { - None + Ok(()) } else { assert!(err.issues.len() == 0); - if self.opt.flag_scope.len() > 0 { - call = call.add_scope(&self.opt.flag_scope); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); } - let mut ostream = writer_from_opts(self.opt.flag_o, &self.opt.arg_out); + 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 { - "standard-request" => call.doit(), - _ => unreachable!(), + CallType::Standard => call.doit(), + _ => unreachable!() } { - Err(api_err) => Some(api_err), + Err(api_err) => Err(DoitError::ApiError(api_err)), Ok((mut response, output_schema)) => { serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); - None + Ok(()) } } } } - fn _properties_update(&self, dry_run: bool, err: &mut InvalidOptionsError) - -> Option { + fn _properties_update(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { let mut request = api::Property::default(); let mut field_cursor = FieldCursor::default(); - for kvarg in self.opt.arg_kv.iter() { + for kvarg in opt.values_of("kv").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(); @@ -5381,8 +5404,8 @@ impl Engine { } } } - let mut call = self.hub.properties().update(request, &self.opt.arg_file_id, &self.opt.arg_property_key); - for parg in self.opt.arg_v.iter() { + let mut call = self.hub.properties().update(request, opt.value_of("file-id").unwrap_or(""), opt.value_of("property-key").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { let (key, value) = parse_kv_arg(&*parg, err, false); match key { "visibility" => { @@ -5406,33 +5429,36 @@ impl Engine { _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), } } - let protocol = "standard-request"; + let protocol = CallType::Standard; if dry_run { - None + Ok(()) } else { assert!(err.issues.len() == 0); - if self.opt.flag_scope.len() > 0 { - call = call.add_scope(&self.opt.flag_scope); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); } - let mut ostream = writer_from_opts(self.opt.flag_o, &self.opt.arg_out); + 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 { - "standard-request" => call.doit(), - _ => unreachable!(), + CallType::Standard => call.doit(), + _ => unreachable!() } { - Err(api_err) => Some(api_err), + Err(api_err) => Err(DoitError::ApiError(api_err)), Ok((mut response, output_schema)) => { serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); - None + Ok(()) } } } } - fn _realtime_get(&self, dry_run: bool, err: &mut InvalidOptionsError) - -> Option { + fn _realtime_get(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { let mut download_mode = false; - let mut call = self.hub.realtime().get(&self.opt.arg_file_id); - for parg in self.opt.arg_v.iter() { + let mut call = self.hub.realtime().get(opt.value_of("file-id").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { let (key, value) = parse_kv_arg(&*parg, err, false); match key { "revision" => { @@ -5459,35 +5485,38 @@ impl Engine { _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), } } - let protocol = "standard-request"; + let protocol = CallType::Standard; if dry_run { - None + Ok(()) } else { assert!(err.issues.len() == 0); - if self.opt.flag_scope.len() > 0 { - call = call.add_scope(&self.opt.flag_scope); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); } - let mut ostream = writer_from_opts(self.opt.flag_o, &self.opt.arg_out); + 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 { - "standard-request" => call.doit(), - _ => unreachable!(), + CallType::Standard => call.doit(), + _ => unreachable!() } { - Err(api_err) => Some(api_err), + Err(api_err) => Err(DoitError::ApiError(api_err)), Ok(mut response) => { if !download_mode { } else { io::copy(&mut response, &mut ostream).unwrap(); } - None + Ok(()) } } } } - fn _realtime_update(&self, dry_run: bool, err: &mut InvalidOptionsError) - -> Option { - let mut call = self.hub.realtime().update(&self.opt.arg_file_id); - for parg in self.opt.arg_v.iter() { + fn _realtime_update(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + let mut call = self.hub.realtime().update(opt.value_of("file-id").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { let (key, value) = parse_kv_arg(&*parg, err, false); match key { "base-revision" => { @@ -5511,40 +5540,34 @@ impl Engine { _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), } } - let protocol = - if self.opt.cmd_simple { - "simple" - } else if self.opt.cmd_resumable { - "resumable" - } else { - unreachable!() - }; - let mut input_file = input_file_from_opts(&self.opt.arg_file, err); - let mime_type = input_mime_from_opts(&self.opt.arg_mime, err); + let vals = opt.values_of("mode").unwrap(); + let protocol = protocol_from_str(vals[0], ["simple", "resumable"].iter().map(|&v| v.to_string()).collect(), err); + let mut input_file = input_file_from_opts(vals[1], err); + let mime_type = input_mime_from_opts(opt.value_of("mime").unwrap_or("application/octet-stream"), err); if dry_run { - None + Ok(()) } else { assert!(err.issues.len() == 0); - if self.opt.flag_scope.len() > 0 { - call = call.add_scope(&self.opt.flag_scope); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); } match match protocol { - "simple" => call.upload(input_file.unwrap(), mime_type.unwrap()), - "resumable" => call.upload_resumable(input_file.unwrap(), mime_type.unwrap()), - _ => unreachable!(), + CallType::Upload(UploadProtocol::Simple) => call.upload(input_file.unwrap(), mime_type.unwrap()), + CallType::Upload(UploadProtocol::Resumable) => call.upload_resumable(input_file.unwrap(), mime_type.unwrap()), + CallType::Standard => unreachable!() } { - Err(api_err) => Some(api_err), + Err(api_err) => Err(DoitError::ApiError(api_err)), Ok(mut response) => { - None + Ok(()) } } } } - fn _replies_delete(&self, dry_run: bool, err: &mut InvalidOptionsError) - -> Option { - let mut call = self.hub.replies().delete(&self.opt.arg_file_id, &self.opt.arg_comment_id, &self.opt.arg_reply_id); - for parg in self.opt.arg_v.iter() { + fn _replies_delete(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + let mut call = self.hub.replies().delete(opt.value_of("file-id").unwrap_or(""), opt.value_of("comment-id").unwrap_or(""), opt.value_of("reply-id").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { let (key, value) = parse_kv_arg(&*parg, err, false); match key { "alt" @@ -5565,30 +5588,30 @@ impl Engine { _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), } } - let protocol = "standard-request"; + let protocol = CallType::Standard; if dry_run { - None + Ok(()) } else { assert!(err.issues.len() == 0); - if self.opt.flag_scope.len() > 0 { - call = call.add_scope(&self.opt.flag_scope); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); } match match protocol { - "standard-request" => call.doit(), - _ => unreachable!(), + CallType::Standard => call.doit(), + _ => unreachable!() } { - Err(api_err) => Some(api_err), + Err(api_err) => Err(DoitError::ApiError(api_err)), Ok(mut response) => { - None + Ok(()) } } } } - fn _replies_get(&self, dry_run: bool, err: &mut InvalidOptionsError) - -> Option { - let mut call = self.hub.replies().get(&self.opt.arg_file_id, &self.opt.arg_comment_id, &self.opt.arg_reply_id); - for parg in self.opt.arg_v.iter() { + fn _replies_get(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + let mut call = self.hub.replies().get(opt.value_of("file-id").unwrap_or(""), opt.value_of("comment-id").unwrap_or(""), opt.value_of("reply-id").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { let (key, value) = parse_kv_arg(&*parg, err, false); match key { "include-deleted" => { @@ -5612,34 +5635,37 @@ impl Engine { _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), } } - let protocol = "standard-request"; + let protocol = CallType::Standard; if dry_run { - None + Ok(()) } else { assert!(err.issues.len() == 0); - if self.opt.flag_scope.len() > 0 { - call = call.add_scope(&self.opt.flag_scope); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); } - let mut ostream = writer_from_opts(self.opt.flag_o, &self.opt.arg_out); + 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 { - "standard-request" => call.doit(), - _ => unreachable!(), + CallType::Standard => call.doit(), + _ => unreachable!() } { - Err(api_err) => Some(api_err), + Err(api_err) => Err(DoitError::ApiError(api_err)), Ok((mut response, output_schema)) => { serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); - None + Ok(()) } } } } - fn _replies_insert(&self, dry_run: bool, err: &mut InvalidOptionsError) - -> Option { + fn _replies_insert(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { let mut request = api::CommentReply::default(); let mut field_cursor = FieldCursor::default(); - for kvarg in self.opt.arg_kv.iter() { + for kvarg in opt.values_of("kv").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(); @@ -5727,8 +5753,8 @@ impl Engine { } } } - let mut call = self.hub.replies().insert(request, &self.opt.arg_file_id, &self.opt.arg_comment_id); - for parg in self.opt.arg_v.iter() { + let mut call = self.hub.replies().insert(request, opt.value_of("file-id").unwrap_or(""), opt.value_of("comment-id").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { let (key, value) = parse_kv_arg(&*parg, err, false); match key { "alt" @@ -5749,32 +5775,35 @@ impl Engine { _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), } } - let protocol = "standard-request"; + let protocol = CallType::Standard; if dry_run { - None + Ok(()) } else { assert!(err.issues.len() == 0); - if self.opt.flag_scope.len() > 0 { - call = call.add_scope(&self.opt.flag_scope); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); } - let mut ostream = writer_from_opts(self.opt.flag_o, &self.opt.arg_out); + 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 { - "standard-request" => call.doit(), - _ => unreachable!(), + CallType::Standard => call.doit(), + _ => unreachable!() } { - Err(api_err) => Some(api_err), + Err(api_err) => Err(DoitError::ApiError(api_err)), Ok((mut response, output_schema)) => { serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); - None + Ok(()) } } } } - fn _replies_list(&self, dry_run: bool, err: &mut InvalidOptionsError) - -> Option { - let mut call = self.hub.replies().list(&self.opt.arg_file_id, &self.opt.arg_comment_id); - for parg in self.opt.arg_v.iter() { + fn _replies_list(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + let mut call = self.hub.replies().list(opt.value_of("file-id").unwrap_or(""), opt.value_of("comment-id").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { let (key, value) = parse_kv_arg(&*parg, err, false); match key { "page-token" => { @@ -5804,34 +5833,37 @@ impl Engine { _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), } } - let protocol = "standard-request"; + let protocol = CallType::Standard; if dry_run { - None + Ok(()) } else { assert!(err.issues.len() == 0); - if self.opt.flag_scope.len() > 0 { - call = call.add_scope(&self.opt.flag_scope); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); } - let mut ostream = writer_from_opts(self.opt.flag_o, &self.opt.arg_out); + 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 { - "standard-request" => call.doit(), - _ => unreachable!(), + CallType::Standard => call.doit(), + _ => unreachable!() } { - Err(api_err) => Some(api_err), + Err(api_err) => Err(DoitError::ApiError(api_err)), Ok((mut response, output_schema)) => { serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); - None + Ok(()) } } } } - fn _replies_patch(&self, dry_run: bool, err: &mut InvalidOptionsError) - -> Option { + fn _replies_patch(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { let mut request = api::CommentReply::default(); let mut field_cursor = FieldCursor::default(); - for kvarg in self.opt.arg_kv.iter() { + for kvarg in opt.values_of("kv").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(); @@ -5919,8 +5951,8 @@ impl Engine { } } } - let mut call = self.hub.replies().patch(request, &self.opt.arg_file_id, &self.opt.arg_comment_id, &self.opt.arg_reply_id); - for parg in self.opt.arg_v.iter() { + let mut call = self.hub.replies().patch(request, opt.value_of("file-id").unwrap_or(""), opt.value_of("comment-id").unwrap_or(""), opt.value_of("reply-id").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { let (key, value) = parse_kv_arg(&*parg, err, false); match key { "alt" @@ -5941,34 +5973,37 @@ impl Engine { _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), } } - let protocol = "standard-request"; + let protocol = CallType::Standard; if dry_run { - None + Ok(()) } else { assert!(err.issues.len() == 0); - if self.opt.flag_scope.len() > 0 { - call = call.add_scope(&self.opt.flag_scope); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); } - let mut ostream = writer_from_opts(self.opt.flag_o, &self.opt.arg_out); + 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 { - "standard-request" => call.doit(), - _ => unreachable!(), + CallType::Standard => call.doit(), + _ => unreachable!() } { - Err(api_err) => Some(api_err), + Err(api_err) => Err(DoitError::ApiError(api_err)), Ok((mut response, output_schema)) => { serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); - None + Ok(()) } } } } - fn _replies_update(&self, dry_run: bool, err: &mut InvalidOptionsError) - -> Option { + fn _replies_update(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { let mut request = api::CommentReply::default(); let mut field_cursor = FieldCursor::default(); - for kvarg in self.opt.arg_kv.iter() { + for kvarg in opt.values_of("kv").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(); @@ -6056,8 +6091,8 @@ impl Engine { } } } - let mut call = self.hub.replies().update(request, &self.opt.arg_file_id, &self.opt.arg_comment_id, &self.opt.arg_reply_id); - for parg in self.opt.arg_v.iter() { + let mut call = self.hub.replies().update(request, opt.value_of("file-id").unwrap_or(""), opt.value_of("comment-id").unwrap_or(""), opt.value_of("reply-id").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { let (key, value) = parse_kv_arg(&*parg, err, false); match key { "alt" @@ -6078,32 +6113,35 @@ impl Engine { _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), } } - let protocol = "standard-request"; + let protocol = CallType::Standard; if dry_run { - None + Ok(()) } else { assert!(err.issues.len() == 0); - if self.opt.flag_scope.len() > 0 { - call = call.add_scope(&self.opt.flag_scope); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); } - let mut ostream = writer_from_opts(self.opt.flag_o, &self.opt.arg_out); + 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 { - "standard-request" => call.doit(), - _ => unreachable!(), + CallType::Standard => call.doit(), + _ => unreachable!() } { - Err(api_err) => Some(api_err), + Err(api_err) => Err(DoitError::ApiError(api_err)), Ok((mut response, output_schema)) => { serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); - None + Ok(()) } } } } - fn _revisions_delete(&self, dry_run: bool, err: &mut InvalidOptionsError) - -> Option { - let mut call = self.hub.revisions().delete(&self.opt.arg_file_id, &self.opt.arg_revision_id); - for parg in self.opt.arg_v.iter() { + fn _revisions_delete(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + let mut call = self.hub.revisions().delete(opt.value_of("file-id").unwrap_or(""), opt.value_of("revision-id").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { let (key, value) = parse_kv_arg(&*parg, err, false); match key { "alt" @@ -6124,30 +6162,30 @@ impl Engine { _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), } } - let protocol = "standard-request"; + let protocol = CallType::Standard; if dry_run { - None + Ok(()) } else { assert!(err.issues.len() == 0); - if self.opt.flag_scope.len() > 0 { - call = call.add_scope(&self.opt.flag_scope); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); } match match protocol { - "standard-request" => call.doit(), - _ => unreachable!(), + CallType::Standard => call.doit(), + _ => unreachable!() } { - Err(api_err) => Some(api_err), + Err(api_err) => Err(DoitError::ApiError(api_err)), Ok(mut response) => { - None + Ok(()) } } } } - fn _revisions_get(&self, dry_run: bool, err: &mut InvalidOptionsError) - -> Option { - let mut call = self.hub.revisions().get(&self.opt.arg_file_id, &self.opt.arg_revision_id); - for parg in self.opt.arg_v.iter() { + fn _revisions_get(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + let mut call = self.hub.revisions().get(opt.value_of("file-id").unwrap_or(""), opt.value_of("revision-id").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { let (key, value) = parse_kv_arg(&*parg, err, false); match key { "alt" @@ -6168,32 +6206,35 @@ impl Engine { _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), } } - let protocol = "standard-request"; + let protocol = CallType::Standard; if dry_run { - None + Ok(()) } else { assert!(err.issues.len() == 0); - if self.opt.flag_scope.len() > 0 { - call = call.add_scope(&self.opt.flag_scope); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); } - let mut ostream = writer_from_opts(self.opt.flag_o, &self.opt.arg_out); + 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 { - "standard-request" => call.doit(), - _ => unreachable!(), + CallType::Standard => call.doit(), + _ => unreachable!() } { - Err(api_err) => Some(api_err), + Err(api_err) => Err(DoitError::ApiError(api_err)), Ok((mut response, output_schema)) => { serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); - None + Ok(()) } } } } - fn _revisions_list(&self, dry_run: bool, err: &mut InvalidOptionsError) - -> Option { - let mut call = self.hub.revisions().list(&self.opt.arg_file_id); - for parg in self.opt.arg_v.iter() { + fn _revisions_list(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + let mut call = self.hub.revisions().list(opt.value_of("file-id").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { let (key, value) = parse_kv_arg(&*parg, err, false); match key { "alt" @@ -6214,34 +6255,37 @@ impl Engine { _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), } } - let protocol = "standard-request"; + let protocol = CallType::Standard; if dry_run { - None + Ok(()) } else { assert!(err.issues.len() == 0); - if self.opt.flag_scope.len() > 0 { - call = call.add_scope(&self.opt.flag_scope); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); } - let mut ostream = writer_from_opts(self.opt.flag_o, &self.opt.arg_out); + 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 { - "standard-request" => call.doit(), - _ => unreachable!(), + CallType::Standard => call.doit(), + _ => unreachable!() } { - Err(api_err) => Some(api_err), + Err(api_err) => Err(DoitError::ApiError(api_err)), Ok((mut response, output_schema)) => { serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); - None + Ok(()) } } } } - fn _revisions_patch(&self, dry_run: bool, err: &mut InvalidOptionsError) - -> Option { + fn _revisions_patch(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { let mut request = api::Revision::default(); let mut field_cursor = FieldCursor::default(); - for kvarg in self.opt.arg_kv.iter() { + for kvarg in opt.values_of("kv").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(); @@ -6365,8 +6409,8 @@ impl Engine { } } } - let mut call = self.hub.revisions().patch(request, &self.opt.arg_file_id, &self.opt.arg_revision_id); - for parg in self.opt.arg_v.iter() { + let mut call = self.hub.revisions().patch(request, opt.value_of("file-id").unwrap_or(""), opt.value_of("revision-id").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { let (key, value) = parse_kv_arg(&*parg, err, false); match key { "alt" @@ -6387,34 +6431,37 @@ impl Engine { _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), } } - let protocol = "standard-request"; + let protocol = CallType::Standard; if dry_run { - None + Ok(()) } else { assert!(err.issues.len() == 0); - if self.opt.flag_scope.len() > 0 { - call = call.add_scope(&self.opt.flag_scope); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); } - let mut ostream = writer_from_opts(self.opt.flag_o, &self.opt.arg_out); + 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 { - "standard-request" => call.doit(), - _ => unreachable!(), + CallType::Standard => call.doit(), + _ => unreachable!() } { - Err(api_err) => Some(api_err), + Err(api_err) => Err(DoitError::ApiError(api_err)), Ok((mut response, output_schema)) => { serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); - None + Ok(()) } } } } - fn _revisions_update(&self, dry_run: bool, err: &mut InvalidOptionsError) - -> Option { + fn _revisions_update(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { let mut request = api::Revision::default(); let mut field_cursor = FieldCursor::default(); - for kvarg in self.opt.arg_kv.iter() { + for kvarg in opt.values_of("kv").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(); @@ -6538,8 +6585,8 @@ impl Engine { } } } - let mut call = self.hub.revisions().update(request, &self.opt.arg_file_id, &self.opt.arg_revision_id); - for parg in self.opt.arg_v.iter() { + let mut call = self.hub.revisions().update(request, opt.value_of("file-id").unwrap_or(""), opt.value_of("revision-id").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { let (key, value) = parse_kv_arg(&*parg, err, false); match key { "alt" @@ -6560,231 +6607,337 @@ impl Engine { _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), } } - let protocol = "standard-request"; + let protocol = CallType::Standard; if dry_run { - None + Ok(()) } else { assert!(err.issues.len() == 0); - if self.opt.flag_scope.len() > 0 { - call = call.add_scope(&self.opt.flag_scope); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); } - let mut ostream = writer_from_opts(self.opt.flag_o, &self.opt.arg_out); + 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 { - "standard-request" => call.doit(), - _ => unreachable!(), + CallType::Standard => call.doit(), + _ => unreachable!() } { - Err(api_err) => Some(api_err), + Err(api_err) => Err(DoitError::ApiError(api_err)), Ok((mut response, output_schema)) => { serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); - None + Ok(()) } } } } - fn _doit(&self, dry_run: bool) -> (Option, Option) { + fn _doit(&self, dry_run: bool) -> Result, Option> { let mut err = InvalidOptionsError::new(); - let mut call_result: Option; + let mut call_result: Result<(), DoitError> = Ok(()); let mut err_opt: Option = None; - - if self.opt.cmd_about { - if self.opt.cmd_get { - call_result = self._about_get(dry_run, &mut err); - } else { - unreachable!(); + match self.opt.subcommand() { + ("about", Some(opt)) => { + match opt.subcommand() { + ("get", Some(opt)) => { + call_result = self._about_get(opt, dry_run, &mut err); + }, + _ => { + err.issues.push(CLIError::MissingMethodError("about".to_string())); + writeln!(io::stderr(), "{}\n", opt.usage()).ok(); + } + } + }, + ("apps", Some(opt)) => { + match opt.subcommand() { + ("get", Some(opt)) => { + call_result = self._apps_get(opt, dry_run, &mut err); + }, + ("list", Some(opt)) => { + call_result = self._apps_list(opt, dry_run, &mut err); + }, + _ => { + err.issues.push(CLIError::MissingMethodError("apps".to_string())); + writeln!(io::stderr(), "{}\n", opt.usage()).ok(); + } + } + }, + ("changes", Some(opt)) => { + match opt.subcommand() { + ("get", Some(opt)) => { + call_result = self._changes_get(opt, dry_run, &mut err); + }, + ("list", Some(opt)) => { + call_result = self._changes_list(opt, dry_run, &mut err); + }, + ("watch", Some(opt)) => { + call_result = self._changes_watch(opt, dry_run, &mut err); + }, + _ => { + err.issues.push(CLIError::MissingMethodError("changes".to_string())); + writeln!(io::stderr(), "{}\n", opt.usage()).ok(); + } + } + }, + ("channels", Some(opt)) => { + match opt.subcommand() { + ("stop", Some(opt)) => { + call_result = self._channels_stop(opt, dry_run, &mut err); + }, + _ => { + err.issues.push(CLIError::MissingMethodError("channels".to_string())); + writeln!(io::stderr(), "{}\n", opt.usage()).ok(); + } + } + }, + ("children", Some(opt)) => { + match opt.subcommand() { + ("delete", Some(opt)) => { + call_result = self._children_delete(opt, dry_run, &mut err); + }, + ("get", Some(opt)) => { + call_result = self._children_get(opt, dry_run, &mut err); + }, + ("insert", Some(opt)) => { + call_result = self._children_insert(opt, dry_run, &mut err); + }, + ("list", Some(opt)) => { + call_result = self._children_list(opt, dry_run, &mut err); + }, + _ => { + err.issues.push(CLIError::MissingMethodError("children".to_string())); + writeln!(io::stderr(), "{}\n", opt.usage()).ok(); + } + } + }, + ("comments", Some(opt)) => { + match opt.subcommand() { + ("delete", Some(opt)) => { + call_result = self._comments_delete(opt, dry_run, &mut err); + }, + ("get", Some(opt)) => { + call_result = self._comments_get(opt, dry_run, &mut err); + }, + ("insert", Some(opt)) => { + call_result = self._comments_insert(opt, dry_run, &mut err); + }, + ("list", Some(opt)) => { + call_result = self._comments_list(opt, dry_run, &mut err); + }, + ("patch", Some(opt)) => { + call_result = self._comments_patch(opt, dry_run, &mut err); + }, + ("update", Some(opt)) => { + call_result = self._comments_update(opt, dry_run, &mut err); + }, + _ => { + err.issues.push(CLIError::MissingMethodError("comments".to_string())); + writeln!(io::stderr(), "{}\n", opt.usage()).ok(); + } + } + }, + ("files", Some(opt)) => { + match opt.subcommand() { + ("copy", Some(opt)) => { + call_result = self._files_copy(opt, dry_run, &mut err); + }, + ("delete", Some(opt)) => { + call_result = self._files_delete(opt, dry_run, &mut err); + }, + ("empty-trash", Some(opt)) => { + call_result = self._files_empty_trash(opt, dry_run, &mut err); + }, + ("get", Some(opt)) => { + call_result = self._files_get(opt, dry_run, &mut err); + }, + ("insert", Some(opt)) => { + call_result = self._files_insert(opt, dry_run, &mut err); + }, + ("list", Some(opt)) => { + call_result = self._files_list(opt, dry_run, &mut err); + }, + ("patch", Some(opt)) => { + call_result = self._files_patch(opt, dry_run, &mut err); + }, + ("touch", Some(opt)) => { + call_result = self._files_touch(opt, dry_run, &mut err); + }, + ("trash", Some(opt)) => { + call_result = self._files_trash(opt, dry_run, &mut err); + }, + ("untrash", Some(opt)) => { + call_result = self._files_untrash(opt, dry_run, &mut err); + }, + ("update", Some(opt)) => { + call_result = self._files_update(opt, dry_run, &mut err); + }, + ("watch", Some(opt)) => { + call_result = self._files_watch(opt, dry_run, &mut err); + }, + _ => { + err.issues.push(CLIError::MissingMethodError("files".to_string())); + writeln!(io::stderr(), "{}\n", opt.usage()).ok(); + } + } + }, + ("parents", Some(opt)) => { + match opt.subcommand() { + ("delete", Some(opt)) => { + call_result = self._parents_delete(opt, dry_run, &mut err); + }, + ("get", Some(opt)) => { + call_result = self._parents_get(opt, dry_run, &mut err); + }, + ("insert", Some(opt)) => { + call_result = self._parents_insert(opt, dry_run, &mut err); + }, + ("list", Some(opt)) => { + call_result = self._parents_list(opt, dry_run, &mut err); + }, + _ => { + err.issues.push(CLIError::MissingMethodError("parents".to_string())); + writeln!(io::stderr(), "{}\n", opt.usage()).ok(); + } + } + }, + ("permissions", Some(opt)) => { + match opt.subcommand() { + ("delete", Some(opt)) => { + call_result = self._permissions_delete(opt, dry_run, &mut err); + }, + ("get", Some(opt)) => { + call_result = self._permissions_get(opt, dry_run, &mut err); + }, + ("get-id-for-email", Some(opt)) => { + call_result = self._permissions_get_id_for_email(opt, dry_run, &mut err); + }, + ("insert", Some(opt)) => { + call_result = self._permissions_insert(opt, dry_run, &mut err); + }, + ("list", Some(opt)) => { + call_result = self._permissions_list(opt, dry_run, &mut err); + }, + ("patch", Some(opt)) => { + call_result = self._permissions_patch(opt, dry_run, &mut err); + }, + ("update", Some(opt)) => { + call_result = self._permissions_update(opt, dry_run, &mut err); + }, + _ => { + err.issues.push(CLIError::MissingMethodError("permissions".to_string())); + writeln!(io::stderr(), "{}\n", opt.usage()).ok(); + } + } + }, + ("properties", Some(opt)) => { + match opt.subcommand() { + ("delete", Some(opt)) => { + call_result = self._properties_delete(opt, dry_run, &mut err); + }, + ("get", Some(opt)) => { + call_result = self._properties_get(opt, dry_run, &mut err); + }, + ("insert", Some(opt)) => { + call_result = self._properties_insert(opt, dry_run, &mut err); + }, + ("list", Some(opt)) => { + call_result = self._properties_list(opt, dry_run, &mut err); + }, + ("patch", Some(opt)) => { + call_result = self._properties_patch(opt, dry_run, &mut err); + }, + ("update", Some(opt)) => { + call_result = self._properties_update(opt, dry_run, &mut err); + }, + _ => { + err.issues.push(CLIError::MissingMethodError("properties".to_string())); + writeln!(io::stderr(), "{}\n", opt.usage()).ok(); + } + } + }, + ("realtime", Some(opt)) => { + match opt.subcommand() { + ("get", Some(opt)) => { + call_result = self._realtime_get(opt, dry_run, &mut err); + }, + ("update", Some(opt)) => { + call_result = self._realtime_update(opt, dry_run, &mut err); + }, + _ => { + err.issues.push(CLIError::MissingMethodError("realtime".to_string())); + writeln!(io::stderr(), "{}\n", opt.usage()).ok(); + } + } + }, + ("replies", Some(opt)) => { + match opt.subcommand() { + ("delete", Some(opt)) => { + call_result = self._replies_delete(opt, dry_run, &mut err); + }, + ("get", Some(opt)) => { + call_result = self._replies_get(opt, dry_run, &mut err); + }, + ("insert", Some(opt)) => { + call_result = self._replies_insert(opt, dry_run, &mut err); + }, + ("list", Some(opt)) => { + call_result = self._replies_list(opt, dry_run, &mut err); + }, + ("patch", Some(opt)) => { + call_result = self._replies_patch(opt, dry_run, &mut err); + }, + ("update", Some(opt)) => { + call_result = self._replies_update(opt, dry_run, &mut err); + }, + _ => { + err.issues.push(CLIError::MissingMethodError("replies".to_string())); + writeln!(io::stderr(), "{}\n", opt.usage()).ok(); + } + } + }, + ("revisions", Some(opt)) => { + match opt.subcommand() { + ("delete", Some(opt)) => { + call_result = self._revisions_delete(opt, dry_run, &mut err); + }, + ("get", Some(opt)) => { + call_result = self._revisions_get(opt, dry_run, &mut err); + }, + ("list", Some(opt)) => { + call_result = self._revisions_list(opt, dry_run, &mut err); + }, + ("patch", Some(opt)) => { + call_result = self._revisions_patch(opt, dry_run, &mut err); + }, + ("update", Some(opt)) => { + call_result = self._revisions_update(opt, dry_run, &mut err); + }, + _ => { + err.issues.push(CLIError::MissingMethodError("revisions".to_string())); + writeln!(io::stderr(), "{}\n", opt.usage()).ok(); + } + } + }, + _ => { + err.issues.push(CLIError::MissingCommandError); + writeln!(io::stderr(), "{}\n", self.opt.usage()).ok(); } } - else if self.opt.cmd_apps { - if self.opt.cmd_get { - call_result = self._apps_get(dry_run, &mut err); - } else if self.opt.cmd_list { - call_result = self._apps_list(dry_run, &mut err); - } else { - unreachable!(); - } - } - else if self.opt.cmd_changes { - if self.opt.cmd_get { - call_result = self._changes_get(dry_run, &mut err); - } else if self.opt.cmd_list { - call_result = self._changes_list(dry_run, &mut err); - } else if self.opt.cmd_watch { - call_result = self._changes_watch(dry_run, &mut err); - } else { - unreachable!(); - } - } - else if self.opt.cmd_channels { - if self.opt.cmd_stop { - call_result = self._channels_stop(dry_run, &mut err); - } else { - unreachable!(); - } - } - else if self.opt.cmd_children { - if self.opt.cmd_delete { - call_result = self._children_delete(dry_run, &mut err); - } else if self.opt.cmd_get { - call_result = self._children_get(dry_run, &mut err); - } else if self.opt.cmd_insert { - call_result = self._children_insert(dry_run, &mut err); - } else if self.opt.cmd_list { - call_result = self._children_list(dry_run, &mut err); - } else { - unreachable!(); - } - } - else if self.opt.cmd_comments { - if self.opt.cmd_delete { - call_result = self._comments_delete(dry_run, &mut err); - } else if self.opt.cmd_get { - call_result = self._comments_get(dry_run, &mut err); - } else if self.opt.cmd_insert { - call_result = self._comments_insert(dry_run, &mut err); - } else if self.opt.cmd_list { - call_result = self._comments_list(dry_run, &mut err); - } else if self.opt.cmd_patch { - call_result = self._comments_patch(dry_run, &mut err); - } else if self.opt.cmd_update { - call_result = self._comments_update(dry_run, &mut err); - } else { - unreachable!(); - } - } - else if self.opt.cmd_files { - if self.opt.cmd_copy { - call_result = self._files_copy(dry_run, &mut err); - } else if self.opt.cmd_delete { - call_result = self._files_delete(dry_run, &mut err); - } else if self.opt.cmd_empty_trash { - call_result = self._files_empty_trash(dry_run, &mut err); - } else if self.opt.cmd_get { - call_result = self._files_get(dry_run, &mut err); - } else if self.opt.cmd_insert { - call_result = self._files_insert(dry_run, &mut err); - } else if self.opt.cmd_list { - call_result = self._files_list(dry_run, &mut err); - } else if self.opt.cmd_patch { - call_result = self._files_patch(dry_run, &mut err); - } else if self.opt.cmd_touch { - call_result = self._files_touch(dry_run, &mut err); - } else if self.opt.cmd_trash { - call_result = self._files_trash(dry_run, &mut err); - } else if self.opt.cmd_untrash { - call_result = self._files_untrash(dry_run, &mut err); - } else if self.opt.cmd_update { - call_result = self._files_update(dry_run, &mut err); - } else if self.opt.cmd_watch { - call_result = self._files_watch(dry_run, &mut err); - } else { - unreachable!(); - } - } - else if self.opt.cmd_parents { - if self.opt.cmd_delete { - call_result = self._parents_delete(dry_run, &mut err); - } else if self.opt.cmd_get { - call_result = self._parents_get(dry_run, &mut err); - } else if self.opt.cmd_insert { - call_result = self._parents_insert(dry_run, &mut err); - } else if self.opt.cmd_list { - call_result = self._parents_list(dry_run, &mut err); - } else { - unreachable!(); - } - } - else if self.opt.cmd_permissions { - if self.opt.cmd_delete { - call_result = self._permissions_delete(dry_run, &mut err); - } else if self.opt.cmd_get { - call_result = self._permissions_get(dry_run, &mut err); - } else if self.opt.cmd_get_id_for_email { - call_result = self._permissions_get_id_for_email(dry_run, &mut err); - } else if self.opt.cmd_insert { - call_result = self._permissions_insert(dry_run, &mut err); - } else if self.opt.cmd_list { - call_result = self._permissions_list(dry_run, &mut err); - } else if self.opt.cmd_patch { - call_result = self._permissions_patch(dry_run, &mut err); - } else if self.opt.cmd_update { - call_result = self._permissions_update(dry_run, &mut err); - } else { - unreachable!(); - } - } - else if self.opt.cmd_properties { - if self.opt.cmd_delete { - call_result = self._properties_delete(dry_run, &mut err); - } else if self.opt.cmd_get { - call_result = self._properties_get(dry_run, &mut err); - } else if self.opt.cmd_insert { - call_result = self._properties_insert(dry_run, &mut err); - } else if self.opt.cmd_list { - call_result = self._properties_list(dry_run, &mut err); - } else if self.opt.cmd_patch { - call_result = self._properties_patch(dry_run, &mut err); - } else if self.opt.cmd_update { - call_result = self._properties_update(dry_run, &mut err); - } else { - unreachable!(); - } - } - else if self.opt.cmd_realtime { - if self.opt.cmd_get { - call_result = self._realtime_get(dry_run, &mut err); - } else if self.opt.cmd_update { - call_result = self._realtime_update(dry_run, &mut err); - } else { - unreachable!(); - } - } - else if self.opt.cmd_replies { - if self.opt.cmd_delete { - call_result = self._replies_delete(dry_run, &mut err); - } else if self.opt.cmd_get { - call_result = self._replies_get(dry_run, &mut err); - } else if self.opt.cmd_insert { - call_result = self._replies_insert(dry_run, &mut err); - } else if self.opt.cmd_list { - call_result = self._replies_list(dry_run, &mut err); - } else if self.opt.cmd_patch { - call_result = self._replies_patch(dry_run, &mut err); - } else if self.opt.cmd_update { - call_result = self._replies_update(dry_run, &mut err); - } else { - unreachable!(); - } - } - else if self.opt.cmd_revisions { - if self.opt.cmd_delete { - call_result = self._revisions_delete(dry_run, &mut err); - } else if self.opt.cmd_get { - call_result = self._revisions_get(dry_run, &mut err); - } else if self.opt.cmd_list { - call_result = self._revisions_list(dry_run, &mut err); - } else if self.opt.cmd_patch { - call_result = self._revisions_patch(dry_run, &mut err); - } else if self.opt.cmd_update { - call_result = self._revisions_update(dry_run, &mut err); - } else { - unreachable!(); - } - } else { - unreachable!(); - } if dry_run { if err.issues.len() > 0 { err_opt = Some(err); } + Err(err_opt) + } else { + Ok(call_result) } - (call_result, err_opt) } // Please note that this call will fail if any part of the opt can't be handled - fn new(opt: Options) -> Result { + fn new(opt: ArgMatches<'a, 'n>) -> Result, InvalidOptionsError> { let (config_dir, secret) = { - let config_dir = match cmn::assure_config_dir_exists(&opt.flag_config_dir) { + let config_dir = match cmn::assure_config_dir_exists(opt.value_of("folder").unwrap_or("~/.google-service-cli")) { Err(e) => return Err(InvalidOptionsError::single(e, 3)), Ok(p) => p, }; @@ -6797,7 +6950,7 @@ impl Engine { }; let auth = Authenticator::new( &secret, DefaultAuthenticatorDelegate, - if opt.flag_debug_auth { + if opt.is_present("debug-auth") { hyper::Client::with_connector(mock::TeeConnector { connector: hyper::net::HttpConnector(None) }) @@ -6810,7 +6963,7 @@ impl Engine { }, None); let client = - if opt.flag_debug { + if opt.is_present("debug") { hyper::Client::with_connector(mock::TeeConnector { connector: hyper::net::HttpConnector(None) }) @@ -6823,34 +6976,1565 @@ impl Engine { }; match engine._doit(true) { - (_, Some(err)) => Err(err), - _ => Ok(engine), + Err(Some(err)) => Err(err), + Err(None) => Ok(engine), + Ok(_) => unreachable!(), } } - // Execute the call with all the bells and whistles, informing the caller only if there was an error. - // The absense of one indicates success. - fn doit(&self) -> Option { - self._doit(false).0 + fn doit(&self) -> Result<(), DoitError> { + match self._doit(false) { + Ok(res) => res, + Err(_) => unreachable!(), + } } } fn main() { - let opts: Options = Options::docopt().decode().unwrap_or_else(|e| e.exit()); - let debug = opts.flag_debug; - match Engine::new(opts) { + let upload_value_names = ["mode", "file"]; + let arg_data = [ + ("about", "methods: 'get'", vec![ + ("get", Some("Gets the information about the current user along with Drive API settings"), + vec![ + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ]), + + ("apps", "methods: 'get' and 'list'", vec![ + ("get", Some("Gets a specific app."), + vec![ + (Some("app-id"), + None, + Some("The ID of the app."), + Some(true), + Some(false)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ("list", Some("Lists a user's installed apps."), + vec![ + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ]), + + ("changes", "methods: 'get', 'list' and 'watch'", vec![ + ("get", Some("Gets a specific change."), + vec![ + (Some("change-id"), + None, + Some("The ID of the change."), + Some(true), + Some(false)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ("list", Some("Lists the changes for a user."), + vec![ + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ("watch", Some("Subscribe to changes for a user."), + vec![ + (Some("kv"), + Some("r"), + Some("Set various fields of the request structure"), + Some(true), + Some(true)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ]), + + ("channels", "methods: 'stop'", vec![ + ("stop", Some("Stop watching resources through this channel"), + vec![ + (Some("kv"), + Some("r"), + Some("Set various fields of the request structure"), + Some(true), + Some(true)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + ]), + ]), + + ("children", "methods: 'delete', 'get', 'insert' and 'list'", vec![ + ("delete", Some("Removes a child from a folder."), + vec![ + (Some("folder-id"), + None, + Some("The ID of the folder."), + Some(true), + Some(false)), + + (Some("child-id"), + None, + Some("The ID of the child."), + Some(true), + Some(false)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + ]), + ("get", Some("Gets a specific child reference."), + vec![ + (Some("folder-id"), + None, + Some("The ID of the folder."), + Some(true), + Some(false)), + + (Some("child-id"), + None, + Some("The ID of the child."), + Some(true), + Some(false)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ("insert", Some("Inserts a file into a folder."), + vec![ + (Some("folder-id"), + None, + Some("The ID of the folder."), + Some(true), + Some(false)), + + (Some("kv"), + Some("r"), + Some("Set various fields of the request structure"), + Some(true), + Some(true)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ("list", Some("Lists a folder's children."), + vec![ + (Some("folder-id"), + None, + Some("The ID of the folder."), + Some(true), + Some(false)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ]), + + ("comments", "methods: 'delete', 'get', 'insert', 'list', 'patch' and 'update'", vec![ + ("delete", Some("Deletes a comment."), + vec![ + (Some("file-id"), + None, + Some("The ID of the file."), + Some(true), + Some(false)), + + (Some("comment-id"), + None, + Some("The ID of the comment."), + Some(true), + Some(false)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + ]), + ("get", Some("Gets a comment by ID."), + vec![ + (Some("file-id"), + None, + Some("The ID of the file."), + Some(true), + Some(false)), + + (Some("comment-id"), + None, + Some("The ID of the comment."), + Some(true), + Some(false)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ("insert", Some("Creates a new comment on the given file."), + vec![ + (Some("file-id"), + None, + Some("The ID of the file."), + Some(true), + Some(false)), + + (Some("kv"), + Some("r"), + Some("Set various fields of the request structure"), + Some(true), + Some(true)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ("list", Some("Lists a file's comments."), + vec![ + (Some("file-id"), + None, + Some("The ID of the file."), + Some(true), + Some(false)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ("patch", Some("Updates an existing comment. This method supports patch semantics."), + vec![ + (Some("file-id"), + None, + Some("The ID of the file."), + Some(true), + Some(false)), + + (Some("comment-id"), + None, + Some("The ID of the comment."), + Some(true), + Some(false)), + + (Some("kv"), + Some("r"), + Some("Set various fields of the request structure"), + Some(true), + Some(true)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ("update", Some("Updates an existing comment."), + vec![ + (Some("file-id"), + None, + Some("The ID of the file."), + Some(true), + Some(false)), + + (Some("comment-id"), + None, + Some("The ID of the comment."), + Some(true), + Some(false)), + + (Some("kv"), + Some("r"), + Some("Set various fields of the request structure"), + Some(true), + Some(true)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ]), + + ("files", "methods: 'copy', 'delete', 'empty-trash', 'get', 'insert', 'list', 'patch', 'touch', 'trash', 'untrash', 'update' and 'watch'", vec![ + ("copy", Some("Creates a copy of the specified file."), + vec![ + (Some("file-id"), + None, + Some("The ID of the file to copy."), + Some(true), + Some(false)), + + (Some("kv"), + Some("r"), + Some("Set various fields of the request structure"), + Some(true), + Some(true)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ("delete", Some("Permanently deletes a file by ID. Skips the trash. The currently authenticated user must own the file."), + vec![ + (Some("file-id"), + None, + Some("The ID of the file to delete."), + Some(true), + Some(false)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + ]), + ("empty-trash", Some("Permanently deletes all of the user's trashed files."), + vec![ + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + ]), + ("get", Some("Gets a file's metadata by ID."), + vec![ + (Some("file-id"), + None, + Some("The ID for the file in question."), + Some(true), + Some(false)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ("insert", Some("Insert a new file."), + vec![ + (Some("kv"), + Some("r"), + Some("Set various fields of the request structure"), + Some(true), + Some(true)), + + (Some("mode"), + Some("u"), + Some("Specify the upload protocol (simple|resumable) and the file to upload"), + Some(true), + Some(true)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ("list", Some("Lists the user's files."), + vec![ + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ("patch", Some("Updates file metadata and/or content. This method supports patch semantics."), + vec![ + (Some("file-id"), + None, + Some("The ID of the file to update."), + Some(true), + Some(false)), + + (Some("kv"), + Some("r"), + Some("Set various fields of the request structure"), + Some(true), + Some(true)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ("touch", Some("Set the file's updated time to the current server time."), + vec![ + (Some("file-id"), + None, + Some("The ID of the file to update."), + Some(true), + Some(false)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ("trash", Some("Moves a file to the trash."), + vec![ + (Some("file-id"), + None, + Some("The ID of the file to trash."), + Some(true), + Some(false)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ("untrash", Some("Restores a file from the trash."), + vec![ + (Some("file-id"), + None, + Some("The ID of the file to untrash."), + Some(true), + Some(false)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ("update", Some("Updates file metadata and/or content."), + vec![ + (Some("file-id"), + None, + Some("The ID of the file to update."), + Some(true), + Some(false)), + + (Some("kv"), + Some("r"), + Some("Set various fields of the request structure"), + Some(true), + Some(true)), + + (Some("mode"), + Some("u"), + Some("Specify the upload protocol (simple|resumable) and the file to upload"), + Some(true), + Some(true)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ("watch", Some("Subscribe to changes on a file"), + vec![ + (Some("file-id"), + None, + Some("The ID for the file in question."), + Some(true), + Some(false)), + + (Some("kv"), + Some("r"), + Some("Set various fields of the request structure"), + Some(true), + Some(true)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ]), + + ("parents", "methods: 'delete', 'get', 'insert' and 'list'", vec![ + ("delete", Some("Removes a parent from a file."), + vec![ + (Some("file-id"), + None, + Some("The ID of the file."), + Some(true), + Some(false)), + + (Some("parent-id"), + None, + Some("The ID of the parent."), + Some(true), + Some(false)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + ]), + ("get", Some("Gets a specific parent reference."), + vec![ + (Some("file-id"), + None, + Some("The ID of the file."), + Some(true), + Some(false)), + + (Some("parent-id"), + None, + Some("The ID of the parent."), + Some(true), + Some(false)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ("insert", Some("Adds a parent folder for a file."), + vec![ + (Some("file-id"), + None, + Some("The ID of the file."), + Some(true), + Some(false)), + + (Some("kv"), + Some("r"), + Some("Set various fields of the request structure"), + Some(true), + Some(true)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ("list", Some("Lists a file's parents."), + vec![ + (Some("file-id"), + None, + Some("The ID of the file."), + Some(true), + Some(false)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ]), + + ("permissions", "methods: 'delete', 'get', 'get-id-for-email', 'insert', 'list', 'patch' and 'update'", vec![ + ("delete", Some("Deletes a permission from a file."), + vec![ + (Some("file-id"), + None, + Some("The ID for the file."), + Some(true), + Some(false)), + + (Some("permission-id"), + None, + Some("The ID for the permission."), + Some(true), + Some(false)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + ]), + ("get", Some("Gets a permission by ID."), + vec![ + (Some("file-id"), + None, + Some("The ID for the file."), + Some(true), + Some(false)), + + (Some("permission-id"), + None, + Some("The ID for the permission."), + Some(true), + Some(false)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ("get-id-for-email", Some("Returns the permission ID for an email address."), + vec![ + (Some("email"), + None, + Some("The email address for which to return a permission ID"), + Some(true), + Some(false)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ("insert", Some("Inserts a permission for a file."), + vec![ + (Some("file-id"), + None, + Some("The ID for the file."), + Some(true), + Some(false)), + + (Some("kv"), + Some("r"), + Some("Set various fields of the request structure"), + Some(true), + Some(true)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ("list", Some("Lists a file's permissions."), + vec![ + (Some("file-id"), + None, + Some("The ID for the file."), + Some(true), + Some(false)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ("patch", Some("Updates a permission. This method supports patch semantics."), + vec![ + (Some("file-id"), + None, + Some("The ID for the file."), + Some(true), + Some(false)), + + (Some("permission-id"), + None, + Some("The ID for the permission."), + Some(true), + Some(false)), + + (Some("kv"), + Some("r"), + Some("Set various fields of the request structure"), + Some(true), + Some(true)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ("update", Some("Updates a permission."), + vec![ + (Some("file-id"), + None, + Some("The ID for the file."), + Some(true), + Some(false)), + + (Some("permission-id"), + None, + Some("The ID for the permission."), + Some(true), + Some(false)), + + (Some("kv"), + Some("r"), + Some("Set various fields of the request structure"), + Some(true), + Some(true)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ]), + + ("properties", "methods: 'delete', 'get', 'insert', 'list', 'patch' and 'update'", vec![ + ("delete", Some("Deletes a property."), + vec![ + (Some("file-id"), + None, + Some("The ID of the file."), + Some(true), + Some(false)), + + (Some("property-key"), + None, + Some("The key of the property."), + Some(true), + Some(false)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + ]), + ("get", Some("Gets a property by its key."), + vec![ + (Some("file-id"), + None, + Some("The ID of the file."), + Some(true), + Some(false)), + + (Some("property-key"), + None, + Some("The key of the property."), + Some(true), + Some(false)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ("insert", Some("Adds a property to a file."), + vec![ + (Some("file-id"), + None, + Some("The ID of the file."), + Some(true), + Some(false)), + + (Some("kv"), + Some("r"), + Some("Set various fields of the request structure"), + Some(true), + Some(true)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ("list", Some("Lists a file's properties."), + vec![ + (Some("file-id"), + None, + Some("The ID of the file."), + Some(true), + Some(false)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ("patch", Some("Updates a property. This method supports patch semantics."), + vec![ + (Some("file-id"), + None, + Some("The ID of the file."), + Some(true), + Some(false)), + + (Some("property-key"), + None, + Some("The key of the property."), + Some(true), + Some(false)), + + (Some("kv"), + Some("r"), + Some("Set various fields of the request structure"), + Some(true), + Some(true)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ("update", Some("Updates a property."), + vec![ + (Some("file-id"), + None, + Some("The ID of the file."), + Some(true), + Some(false)), + + (Some("property-key"), + None, + Some("The key of the property."), + Some(true), + Some(false)), + + (Some("kv"), + Some("r"), + Some("Set various fields of the request structure"), + Some(true), + Some(true)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ]), + + ("realtime", "methods: 'get' and 'update'", vec![ + ("get", Some("Exports the contents of the Realtime API data model associated with this file as JSON."), + vec![ + (Some("file-id"), + None, + Some("The ID of the file that the Realtime API data model is associated with."), + Some(true), + Some(false)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ("update", Some("Overwrites the Realtime API data model associated with this file with the provided JSON data model."), + vec![ + (Some("file-id"), + None, + Some("The ID of the file that the Realtime API data model is associated with."), + Some(true), + Some(false)), + + (Some("mode"), + Some("u"), + Some("Specify the upload protocol (simple|resumable) and the file to upload"), + Some(true), + Some(true)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + ]), + ]), + + ("replies", "methods: 'delete', 'get', 'insert', 'list', 'patch' and 'update'", vec![ + ("delete", Some("Deletes a reply."), + vec![ + (Some("file-id"), + None, + Some("The ID of the file."), + Some(true), + Some(false)), + + (Some("comment-id"), + None, + Some("The ID of the comment."), + Some(true), + Some(false)), + + (Some("reply-id"), + None, + Some("The ID of the reply."), + Some(true), + Some(false)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + ]), + ("get", Some("Gets a reply."), + vec![ + (Some("file-id"), + None, + Some("The ID of the file."), + Some(true), + Some(false)), + + (Some("comment-id"), + None, + Some("The ID of the comment."), + Some(true), + Some(false)), + + (Some("reply-id"), + None, + Some("The ID of the reply."), + Some(true), + Some(false)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ("insert", Some("Creates a new reply to the given comment."), + vec![ + (Some("file-id"), + None, + Some("The ID of the file."), + Some(true), + Some(false)), + + (Some("comment-id"), + None, + Some("The ID of the comment."), + Some(true), + Some(false)), + + (Some("kv"), + Some("r"), + Some("Set various fields of the request structure"), + Some(true), + Some(true)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ("list", Some("Lists all of the replies to a comment."), + vec![ + (Some("file-id"), + None, + Some("The ID of the file."), + Some(true), + Some(false)), + + (Some("comment-id"), + None, + Some("The ID of the comment."), + Some(true), + Some(false)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ("patch", Some("Updates an existing reply. This method supports patch semantics."), + vec![ + (Some("file-id"), + None, + Some("The ID of the file."), + Some(true), + Some(false)), + + (Some("comment-id"), + None, + Some("The ID of the comment."), + Some(true), + Some(false)), + + (Some("reply-id"), + None, + Some("The ID of the reply."), + Some(true), + Some(false)), + + (Some("kv"), + Some("r"), + Some("Set various fields of the request structure"), + Some(true), + Some(true)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ("update", Some("Updates an existing reply."), + vec![ + (Some("file-id"), + None, + Some("The ID of the file."), + Some(true), + Some(false)), + + (Some("comment-id"), + None, + Some("The ID of the comment."), + Some(true), + Some(false)), + + (Some("reply-id"), + None, + Some("The ID of the reply."), + Some(true), + Some(false)), + + (Some("kv"), + Some("r"), + Some("Set various fields of the request structure"), + Some(true), + Some(true)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ]), + + ("revisions", "methods: 'delete', 'get', 'list', 'patch' and 'update'", vec![ + ("delete", Some("Removes a revision."), + vec![ + (Some("file-id"), + None, + Some("The ID of the file."), + Some(true), + Some(false)), + + (Some("revision-id"), + None, + Some("The ID of the revision."), + Some(true), + Some(false)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + ]), + ("get", Some("Gets a specific revision."), + vec![ + (Some("file-id"), + None, + Some("The ID of the file."), + Some(true), + Some(false)), + + (Some("revision-id"), + None, + Some("The ID of the revision."), + Some(true), + Some(false)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ("list", Some("Lists a file's revisions."), + vec![ + (Some("file-id"), + None, + Some("The ID of the file."), + Some(true), + Some(false)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ("patch", Some("Updates a revision. This method supports patch semantics."), + vec![ + (Some("file-id"), + None, + Some("The ID for the file."), + Some(true), + Some(false)), + + (Some("revision-id"), + None, + Some("The ID for the revision."), + Some(true), + Some(false)), + + (Some("kv"), + Some("r"), + Some("Set various fields of the request structure"), + Some(true), + Some(true)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ("update", Some("Updates a revision."), + vec![ + (Some("file-id"), + None, + Some("The ID for the file."), + Some(true), + Some(false)), + + (Some("revision-id"), + None, + Some("The ID for the revision."), + Some(true), + Some(false)), + + (Some("kv"), + Some("r"), + Some("Set various fields of the request structure"), + Some(true), + Some(true)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ]), + + ]; + + let mut app = App::new("drive2") + .author("Sebastian Thiel ") + .version("0.2.0+20150326") + .about("The API to interact with Drive.") + .after_help("All documentation details can be found at http://byron.github.io/google-apis-rs/google_drive2_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("Output all server communication to standard error. `tx` and `rx` are placed into the same stream.") + .multiple(false) + .takes_value(false)) + .arg(Arg::with_name("debug-auth") + .long("debug-auth") + .help("Output all communication related to authentication to standard error. `tx` and `rx` are placed into the same stream.") + .multiple(false) + .takes_value(false)); + + for &(main_command_name, ref about, ref subcommands) in arg_data.iter() { + let mut mcmd = SubCommand::new(main_command_name).about(about); + + for &(sub_command_name, ref desc, ref args) in subcommands { + let mut scmd = SubCommand::new(sub_command_name); + if let &Some(desc) = desc { + scmd = scmd.about(desc); + } + + 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); + 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); + } + if arg_name_str == "mode" { + arg = arg.number_of_values(2); + arg = arg.value_names(&upload_value_names); + + scmd = scmd.arg(Arg::with_name("mime") + .short("m") + .requires("mode") + .required(false) + .help("The file's mime time, like 'application/octet-stream'") + .takes_value(true)); + } + scmd = scmd.arg(arg); + } + mcmd = mcmd.subcommand(scmd); + } + app = app.subcommand(mcmd); + } + + let matches = app.get_matches(); + + let debug = matches.is_present("debug"); + match Engine::new(matches) { Err(err) => { - writeln!(io::stderr(), "{}", err).ok(); env::set_exit_status(err.exit_code); + writeln!(io::stderr(), "{}", err).ok(); }, Ok(engine) => { - if let Some(err) = engine.doit() { - if debug { - writeln!(io::stderr(), "{:?}", err).ok(); - } else { - writeln!(io::stderr(), "{}", err).ok(); - } + if let Err(doit_err) = engine.doit() { env::set_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(); + } + } + } } } } diff --git a/gen/drive2/Cargo.toml b/gen/drive2/Cargo.toml index d7dab1d66d..66802b4126 100644 --- a/gen/drive2/Cargo.toml +++ b/gen/drive2/Cargo.toml @@ -4,7 +4,7 @@ [package] name = "google-drive2" -version = "0.1.6+20150326" +version = "0.1.7+20150326" authors = ["Sebastian Thiel "] description = "A complete library to interact with drive (protocol v2)" repository = "https://github.com/Byron/google-apis-rs/tree/master/gen/drive2" diff --git a/gen/drive2/README.md b/gen/drive2/README.md index f6ef1fdfeb..8fef03a88d 100644 --- a/gen/drive2/README.md +++ b/gen/drive2/README.md @@ -5,7 +5,7 @@ DO NOT EDIT ! --> The `google-drive2` library allows access to all features of the *Google drive* service. -This documentation was generated from *drive* crate version *0.1.6+20150326*, where *20150326* is the exact revision of the *drive:v2* schema built by the [mako](http://www.makotemplates.org/) code generator *v0.1.6*. +This documentation was generated from *drive* crate version *0.1.7+20150326*, where *20150326* is the exact revision of the *drive:v2* schema built by the [mako](http://www.makotemplates.org/) code generator *v0.1.7*. Everything else about the *drive* *v2* API can be found at the [official documentation site](https://developers.google.com/drive/). @@ -230,7 +230,7 @@ These will always take a single argument, for which the following statements are * [PODs][wiki-pod] are handed by copy * strings are passed as `&str` -* [request values](http://byron.github.io/google-apis-rs/google_drive2/trait.RequestValue.html) are borrowed +* [request values](http://byron.github.io/google-apis-rs/google_drive2/trait.RequestValue.html) are moved Arguments will always be copied or cloned into the builder, to make them independent of their original life times. diff --git a/gen/drive2/src/cmn.rs b/gen/drive2/src/cmn.rs index b7665b194b..b65c5301bb 100644 --- a/gen/drive2/src/cmn.rs +++ b/gen/drive2/src/cmn.rs @@ -173,7 +173,10 @@ pub trait Delegate { /// Called after we have retrieved a new upload URL for a resumable upload to store it /// in case we fail or cancel. That way, we can attempt to resume the upload later, /// see `upload_url()`. - fn store_upload_url(&mut self, url: &str) { + /// It will also be called with None after a successful upload, which allows the delegate + /// to forget the URL. That way, we will not attempt to resume an upload that has already + /// finished. + fn store_upload_url(&mut self, url: Option<&str>) { let _ = url; } @@ -459,6 +462,16 @@ impl<'a> Read for MultiPartReader<'a> { header!{ #[doc="The `X-Upload-Content-Type` header."] (XUploadContentType, "X-Upload-Content-Type") => [Mime] + + xupload_content_type { + test_header!( + test1, + vec![b"text/plain"], + Some(HeaderField( + vec![Mime(TopLevel::Text, SubLevel::Plain, Vec::new())] + ))); + + } } #[derive(Clone, PartialEq, Debug)] diff --git a/gen/drive2/src/lib.rs b/gen/drive2/src/lib.rs index e9bee16c78..911cc3e2b9 100644 --- a/gen/drive2/src/lib.rs +++ b/gen/drive2/src/lib.rs @@ -2,7 +2,7 @@ // This file was generated automatically from 'src/mako/api/lib.rs.mako' // DO NOT EDIT ! -//! This documentation was generated from *drive* crate version *0.1.6+20150326*, where *20150326* is the exact revision of the *drive:v2* schema built by the [mako](http://www.makotemplates.org/) code generator *v0.1.6*. +//! This documentation was generated from *drive* crate version *0.1.7+20150326*, where *20150326* is the exact revision of the *drive:v2* schema built by the [mako](http://www.makotemplates.org/) code generator *v0.1.7*. //! //! Everything else about the *drive* *v2* API can be found at the //! [official documentation site](https://developers.google.com/drive/). @@ -231,7 +231,7 @@ //! //! * [PODs][wiki-pod] are handed by copy //! * strings are passed as `&str` -//! * [request values](trait.RequestValue.html) are borrowed +//! * [request values](trait.RequestValue.html) are moved //! //! Arguments will always be copied or cloned into the builder, to make them independent of their original life times. //! @@ -240,7 +240,6 @@ //! [google-go-api]: https://github.com/google/google-api-go-client //! //! -#![feature(std_misc)] // Unused attributes happen thanks to defined, but unused structures // We don't warn about this, as depending on the API, some data structures or facilities are never used. // Instead of pre-determining this, we just disable the lint. It's manually tuned to not have any @@ -418,7 +417,7 @@ impl<'a, C, A> Drive Drive { client: RefCell::new(client), auth: RefCell::new(authenticator), - _user_agent: "google-api-rust-client/0.1.6".to_string(), + _user_agent: "google-api-rust-client/0.1.7".to_string(), } } @@ -463,7 +462,7 @@ impl<'a, C, A> Drive } /// Set the user-agent header field to use in all requests to the server. - /// It defaults to `google-api-rust-client/0.1.6`. + /// It defaults to `google-api-rust-client/0.1.7`. /// /// Returns the previously set user-agent. pub fn user_agent(&mut self, agent_name: String) -> String { @@ -3782,7 +3781,7 @@ impl<'a, C, A> FileWatchCall<'a, C, A> where C: BorrowMut, A: oau request_value_reader.seek(io::SeekFrom::Start(0)).unwrap(); let mut req_result = { let mut client = &mut *self.hub.client.borrow_mut(); - let mut req = client.borrow_mut().request(hyper::method::Method::Post, url.as_ref()) + let mut req = client.borrow_mut().request(hyper::method::Method::Post, &url) .header(UserAgent(self.hub._user_agent.clone())) .header(auth_header.clone()) .header(ContentType(json_mime_type.clone())) @@ -4129,7 +4128,7 @@ impl<'a, C, A> FileInsertCall<'a, C, A> where C: BorrowMut, A: oa _ => (&mut request_value_reader as &mut io::Read, ContentType(json_mime_type.clone())), }; let mut client = &mut *self.hub.client.borrow_mut(); - let mut req = client.borrow_mut().request(hyper::method::Method::Post, url.as_ref()) + let mut req = client.borrow_mut().request(hyper::method::Method::Post, &url) .header(UserAgent(self.hub._user_agent.clone())) .header(auth_header.clone()) .header(content_type) @@ -4179,7 +4178,7 @@ impl<'a, C, A> FileInsertCall<'a, C, A> where C: BorrowMut, A: oa let upload_result = { let url_str = &res.headers.get::().expect("Location header is part of protocol").0; if upload_url_from_server { - dlg.store_upload_url(url_str); + dlg.store_upload_url(Some(url_str)); } cmn::ResumableUploadHelper { @@ -4207,6 +4206,7 @@ impl<'a, C, A> FileInsertCall<'a, C, A> where C: BorrowMut, A: oa Some(Ok(upload_result)) => { res = upload_result; if !res.status.is_success() { + dlg.store_upload_url(None); dlg.finished(false); return Err(Error::Failure(res)) } @@ -4500,7 +4500,7 @@ impl<'a, C, A> FileUntrashCall<'a, C, A> where C: BorrowMut, A: o access_token: token.access_token }); let mut req_result = { let mut client = &mut *self.hub.client.borrow_mut(); - let mut req = client.borrow_mut().request(hyper::method::Method::Post, url.as_ref()) + let mut req = client.borrow_mut().request(hyper::method::Method::Post, &url) .header(UserAgent(self.hub._user_agent.clone())) .header(auth_header.clone()); @@ -4786,7 +4786,7 @@ impl<'a, C, A> FileCopyCall<'a, C, A> where C: BorrowMut, A: oaut request_value_reader.seek(io::SeekFrom::Start(0)).unwrap(); let mut req_result = { let mut client = &mut *self.hub.client.borrow_mut(); - let mut req = client.borrow_mut().request(hyper::method::Method::Post, url.as_ref()) + let mut req = client.borrow_mut().request(hyper::method::Method::Post, &url) .header(UserAgent(self.hub._user_agent.clone())) .header(auth_header.clone()) .header(ContentType(json_mime_type.clone())) @@ -5086,7 +5086,7 @@ impl<'a, C, A> FileTrashCall<'a, C, A> where C: BorrowMut, A: oau access_token: token.access_token }); let mut req_result = { let mut client = &mut *self.hub.client.borrow_mut(); - let mut req = client.borrow_mut().request(hyper::method::Method::Post, url.as_ref()) + let mut req = client.borrow_mut().request(hyper::method::Method::Post, &url) .header(UserAgent(self.hub._user_agent.clone())) .header(auth_header.clone()); @@ -5298,7 +5298,7 @@ impl<'a, C, A> FileEmptyTrashCall<'a, C, A> where C: BorrowMut, A access_token: token.access_token }); let mut req_result = { let mut client = &mut *self.hub.client.borrow_mut(); - let mut req = client.borrow_mut().request(hyper::method::Method::Delete, url.as_ref()) + let mut req = client.borrow_mut().request(hyper::method::Method::Delete, &url) .header(UserAgent(self.hub._user_agent.clone())) .header(auth_header.clone()); @@ -5516,7 +5516,7 @@ impl<'a, C, A> FileListCall<'a, C, A> where C: BorrowMut, A: oaut access_token: token.access_token }); let mut req_result = { let mut client = &mut *self.hub.client.borrow_mut(); - let mut req = client.borrow_mut().request(hyper::method::Method::Get, url.as_ref()) + let mut req = client.borrow_mut().request(hyper::method::Method::Get, &url) .header(UserAgent(self.hub._user_agent.clone())) .header(auth_header.clone()); @@ -5780,7 +5780,7 @@ impl<'a, C, A> FileTouchCall<'a, C, A> where C: BorrowMut, A: oau access_token: token.access_token }); let mut req_result = { let mut client = &mut *self.hub.client.borrow_mut(); - let mut req = client.borrow_mut().request(hyper::method::Method::Post, url.as_ref()) + let mut req = client.borrow_mut().request(hyper::method::Method::Post, &url) .header(UserAgent(self.hub._user_agent.clone())) .header(auth_header.clone()); @@ -6133,7 +6133,7 @@ impl<'a, C, A> FileUpdateCall<'a, C, A> where C: BorrowMut, A: oa _ => (&mut request_value_reader as &mut io::Read, ContentType(json_mime_type.clone())), }; let mut client = &mut *self.hub.client.borrow_mut(); - let mut req = client.borrow_mut().request(hyper::method::Method::Put, url.as_ref()) + let mut req = client.borrow_mut().request(hyper::method::Method::Put, &url) .header(UserAgent(self.hub._user_agent.clone())) .header(auth_header.clone()) .header(content_type) @@ -6183,7 +6183,7 @@ impl<'a, C, A> FileUpdateCall<'a, C, A> where C: BorrowMut, A: oa let upload_result = { let url_str = &res.headers.get::().expect("Location header is part of protocol").0; if upload_url_from_server { - dlg.store_upload_url(url_str); + dlg.store_upload_url(Some(url_str)); } cmn::ResumableUploadHelper { @@ -6211,6 +6211,7 @@ impl<'a, C, A> FileUpdateCall<'a, C, A> where C: BorrowMut, A: oa Some(Ok(upload_result)) => { res = upload_result; if !res.status.is_success() { + dlg.store_upload_url(None); dlg.finished(false); return Err(Error::Failure(res)) } @@ -6541,7 +6542,7 @@ impl<'a, C, A> FileDeleteCall<'a, C, A> where C: BorrowMut, A: oa access_token: token.access_token }); let mut req_result = { let mut client = &mut *self.hub.client.borrow_mut(); - let mut req = client.borrow_mut().request(hyper::method::Method::Delete, url.as_ref()) + let mut req = client.borrow_mut().request(hyper::method::Method::Delete, &url) .header(UserAgent(self.hub._user_agent.clone())) .header(auth_header.clone()); @@ -6842,7 +6843,7 @@ impl<'a, C, A> FilePatchCall<'a, C, A> where C: BorrowMut, A: oau request_value_reader.seek(io::SeekFrom::Start(0)).unwrap(); let mut req_result = { let mut client = &mut *self.hub.client.borrow_mut(); - let mut req = client.borrow_mut().request(hyper::method::Method::Patch, url.as_ref()) + let mut req = client.borrow_mut().request(hyper::method::Method::Patch, &url) .header(UserAgent(self.hub._user_agent.clone())) .header(auth_header.clone()) .header(ContentType(json_mime_type.clone())) @@ -7218,7 +7219,7 @@ impl<'a, C, A> FileGetCall<'a, C, A> where C: BorrowMut, A: oauth access_token: token.access_token }); let mut req_result = { let mut client = &mut *self.hub.client.borrow_mut(); - let mut req = client.borrow_mut().request(hyper::method::Method::Get, url.as_ref()) + let mut req = client.borrow_mut().request(hyper::method::Method::Get, &url) .header(UserAgent(self.hub._user_agent.clone())) .header(auth_header.clone()); @@ -7474,7 +7475,7 @@ impl<'a, C, A> AboutGetCall<'a, C, A> where C: BorrowMut, A: oaut access_token: token.access_token }); let mut req_result = { let mut client = &mut *self.hub.client.borrow_mut(); - let mut req = client.borrow_mut().request(hyper::method::Method::Get, url.as_ref()) + let mut req = client.borrow_mut().request(hyper::method::Method::Get, &url) .header(UserAgent(self.hub._user_agent.clone())) .header(auth_header.clone()); @@ -7754,7 +7755,7 @@ impl<'a, C, A> RealtimeUpdateCall<'a, C, A> where C: BorrowMut, A response } else { let mut client = &mut *self.hub.client.borrow_mut(); - let mut req = client.borrow_mut().request(hyper::method::Method::Put, url.as_ref()) + let mut req = client.borrow_mut().request(hyper::method::Method::Put, &url) .header(UserAgent(self.hub._user_agent.clone())) .header(auth_header.clone()); if protocol == "simple" { @@ -7812,7 +7813,7 @@ impl<'a, C, A> RealtimeUpdateCall<'a, C, A> where C: BorrowMut, A let upload_result = { let url_str = &res.headers.get::().expect("Location header is part of protocol").0; if upload_url_from_server { - dlg.store_upload_url(url_str); + dlg.store_upload_url(Some(url_str)); } cmn::ResumableUploadHelper { @@ -7840,6 +7841,7 @@ impl<'a, C, A> RealtimeUpdateCall<'a, C, A> where C: BorrowMut, A Some(Ok(upload_result)) => { res = upload_result; if !res.status.is_success() { + dlg.store_upload_url(None); dlg.finished(false); return Err(Error::Failure(res)) } @@ -8082,7 +8084,7 @@ impl<'a, C, A> RealtimeGetCall<'a, C, A> where C: BorrowMut, A: o access_token: token.access_token }); let mut req_result = { let mut client = &mut *self.hub.client.borrow_mut(); - let mut req = client.borrow_mut().request(hyper::method::Method::Get, url.as_ref()) + let mut req = client.borrow_mut().request(hyper::method::Method::Get, &url) .header(UserAgent(self.hub._user_agent.clone())) .header(auth_header.clone()); @@ -8318,7 +8320,7 @@ impl<'a, C, A> AppGetCall<'a, C, A> where C: BorrowMut, A: oauth2 access_token: token.access_token }); let mut req_result = { let mut client = &mut *self.hub.client.borrow_mut(); - let mut req = client.borrow_mut().request(hyper::method::Method::Get, url.as_ref()) + let mut req = client.borrow_mut().request(hyper::method::Method::Get, &url) .header(UserAgent(self.hub._user_agent.clone())) .header(auth_header.clone()); @@ -8546,7 +8548,7 @@ impl<'a, C, A> AppListCall<'a, C, A> where C: BorrowMut, A: oauth access_token: token.access_token }); let mut req_result = { let mut client = &mut *self.hub.client.borrow_mut(); - let mut req = client.borrow_mut().request(hyper::method::Method::Get, url.as_ref()) + let mut req = client.borrow_mut().request(hyper::method::Method::Get, &url) .header(UserAgent(self.hub._user_agent.clone())) .header(auth_header.clone()); @@ -8797,7 +8799,7 @@ impl<'a, C, A> CommentDeleteCall<'a, C, A> where C: BorrowMut, A: access_token: token.access_token }); let mut req_result = { let mut client = &mut *self.hub.client.borrow_mut(); - let mut req = client.borrow_mut().request(hyper::method::Method::Delete, url.as_ref()) + let mut req = client.borrow_mut().request(hyper::method::Method::Delete, &url) .header(UserAgent(self.hub._user_agent.clone())) .header(auth_header.clone()); @@ -9043,7 +9045,7 @@ impl<'a, C, A> CommentGetCall<'a, C, A> where C: BorrowMut, A: oa access_token: token.access_token }); let mut req_result = { let mut client = &mut *self.hub.client.borrow_mut(); - let mut req = client.borrow_mut().request(hyper::method::Method::Get, url.as_ref()) + let mut req = client.borrow_mut().request(hyper::method::Method::Get, &url) .header(UserAgent(self.hub._user_agent.clone())) .header(auth_header.clone()); @@ -9311,7 +9313,7 @@ impl<'a, C, A> CommentInsertCall<'a, C, A> where C: BorrowMut, A: request_value_reader.seek(io::SeekFrom::Start(0)).unwrap(); let mut req_result = { let mut client = &mut *self.hub.client.borrow_mut(); - let mut req = client.borrow_mut().request(hyper::method::Method::Post, url.as_ref()) + let mut req = client.borrow_mut().request(hyper::method::Method::Post, &url) .header(UserAgent(self.hub._user_agent.clone())) .header(auth_header.clone()) .header(ContentType(json_mime_type.clone())) @@ -9576,7 +9578,7 @@ impl<'a, C, A> CommentPatchCall<'a, C, A> where C: BorrowMut, A: request_value_reader.seek(io::SeekFrom::Start(0)).unwrap(); let mut req_result = { let mut client = &mut *self.hub.client.borrow_mut(); - let mut req = client.borrow_mut().request(hyper::method::Method::Patch, url.as_ref()) + let mut req = client.borrow_mut().request(hyper::method::Method::Patch, &url) .header(UserAgent(self.hub._user_agent.clone())) .header(auth_header.clone()) .header(ContentType(json_mime_type.clone())) @@ -9851,7 +9853,7 @@ impl<'a, C, A> CommentUpdateCall<'a, C, A> where C: BorrowMut, A: request_value_reader.seek(io::SeekFrom::Start(0)).unwrap(); let mut req_result = { let mut client = &mut *self.hub.client.borrow_mut(); - let mut req = client.borrow_mut().request(hyper::method::Method::Put, url.as_ref()) + let mut req = client.borrow_mut().request(hyper::method::Method::Put, &url) .header(UserAgent(self.hub._user_agent.clone())) .header(auth_header.clone()) .header(ContentType(json_mime_type.clone())) @@ -10132,7 +10134,7 @@ impl<'a, C, A> CommentListCall<'a, C, A> where C: BorrowMut, A: o access_token: token.access_token }); let mut req_result = { let mut client = &mut *self.hub.client.borrow_mut(); - let mut req = client.borrow_mut().request(hyper::method::Method::Get, url.as_ref()) + let mut req = client.borrow_mut().request(hyper::method::Method::Get, &url) .header(UserAgent(self.hub._user_agent.clone())) .header(auth_header.clone()); @@ -10414,7 +10416,7 @@ impl<'a, C, A> ChildrenListCall<'a, C, A> where C: BorrowMut, A: access_token: token.access_token }); let mut req_result = { let mut client = &mut *self.hub.client.borrow_mut(); - let mut req = client.borrow_mut().request(hyper::method::Method::Get, url.as_ref()) + let mut req = client.borrow_mut().request(hyper::method::Method::Get, &url) .header(UserAgent(self.hub._user_agent.clone())) .header(auth_header.clone()); @@ -10676,7 +10678,7 @@ impl<'a, C, A> ChildrenGetCall<'a, C, A> where C: BorrowMut, A: o access_token: token.access_token }); let mut req_result = { let mut client = &mut *self.hub.client.borrow_mut(); - let mut req = client.borrow_mut().request(hyper::method::Method::Get, url.as_ref()) + let mut req = client.borrow_mut().request(hyper::method::Method::Get, &url) .header(UserAgent(self.hub._user_agent.clone())) .header(auth_header.clone()); @@ -10926,7 +10928,7 @@ impl<'a, C, A> ChildrenDeleteCall<'a, C, A> where C: BorrowMut, A access_token: token.access_token }); let mut req_result = { let mut client = &mut *self.hub.client.borrow_mut(); - let mut req = client.borrow_mut().request(hyper::method::Method::Delete, url.as_ref()) + let mut req = client.borrow_mut().request(hyper::method::Method::Delete, &url) .header(UserAgent(self.hub._user_agent.clone())) .header(auth_header.clone()); @@ -11177,7 +11179,7 @@ impl<'a, C, A> ChildrenInsertCall<'a, C, A> where C: BorrowMut, A request_value_reader.seek(io::SeekFrom::Start(0)).unwrap(); let mut req_result = { let mut client = &mut *self.hub.client.borrow_mut(); - let mut req = client.borrow_mut().request(hyper::method::Method::Post, url.as_ref()) + let mut req = client.borrow_mut().request(hyper::method::Method::Post, &url) .header(UserAgent(self.hub._user_agent.clone())) .header(auth_header.clone()) .header(ContentType(json_mime_type.clone())) @@ -11413,7 +11415,7 @@ impl<'a, C, A> ChannelStopCall<'a, C, A> where C: BorrowMut, A: o request_value_reader.seek(io::SeekFrom::Start(0)).unwrap(); let mut req_result = { let mut client = &mut *self.hub.client.borrow_mut(); - let mut req = client.borrow_mut().request(hyper::method::Method::Post, url.as_ref()) + let mut req = client.borrow_mut().request(hyper::method::Method::Post, &url) .header(UserAgent(self.hub._user_agent.clone())) .header(auth_header.clone()) .header(ContentType(json_mime_type.clone())) @@ -11644,7 +11646,7 @@ impl<'a, C, A> ParentListCall<'a, C, A> where C: BorrowMut, A: oa access_token: token.access_token }); let mut req_result = { let mut client = &mut *self.hub.client.borrow_mut(); - let mut req = client.borrow_mut().request(hyper::method::Method::Get, url.as_ref()) + let mut req = client.borrow_mut().request(hyper::method::Method::Get, &url) .header(UserAgent(self.hub._user_agent.clone())) .header(auth_header.clone()); @@ -11884,7 +11886,7 @@ impl<'a, C, A> ParentDeleteCall<'a, C, A> where C: BorrowMut, A: access_token: token.access_token }); let mut req_result = { let mut client = &mut *self.hub.client.borrow_mut(); - let mut req = client.borrow_mut().request(hyper::method::Method::Delete, url.as_ref()) + let mut req = client.borrow_mut().request(hyper::method::Method::Delete, &url) .header(UserAgent(self.hub._user_agent.clone())) .header(auth_header.clone()); @@ -12135,7 +12137,7 @@ impl<'a, C, A> ParentInsertCall<'a, C, A> where C: BorrowMut, A: request_value_reader.seek(io::SeekFrom::Start(0)).unwrap(); let mut req_result = { let mut client = &mut *self.hub.client.borrow_mut(); - let mut req = client.borrow_mut().request(hyper::method::Method::Post, url.as_ref()) + let mut req = client.borrow_mut().request(hyper::method::Method::Post, &url) .header(UserAgent(self.hub._user_agent.clone())) .header(auth_header.clone()) .header(ContentType(json_mime_type.clone())) @@ -12388,7 +12390,7 @@ impl<'a, C, A> ParentGetCall<'a, C, A> where C: BorrowMut, A: oau access_token: token.access_token }); let mut req_result = { let mut client = &mut *self.hub.client.borrow_mut(); - let mut req = client.borrow_mut().request(hyper::method::Method::Get, url.as_ref()) + let mut req = client.borrow_mut().request(hyper::method::Method::Get, &url) .header(UserAgent(self.hub._user_agent.clone())) .header(auth_header.clone()); @@ -12653,7 +12655,7 @@ impl<'a, C, A> ReplyPatchCall<'a, C, A> where C: BorrowMut, A: oa request_value_reader.seek(io::SeekFrom::Start(0)).unwrap(); let mut req_result = { let mut client = &mut *self.hub.client.borrow_mut(); - let mut req = client.borrow_mut().request(hyper::method::Method::Patch, url.as_ref()) + let mut req = client.borrow_mut().request(hyper::method::Method::Patch, &url) .header(UserAgent(self.hub._user_agent.clone())) .header(auth_header.clone()) .header(ContentType(json_mime_type.clone())) @@ -12941,7 +12943,7 @@ impl<'a, C, A> ReplyListCall<'a, C, A> where C: BorrowMut, A: oau access_token: token.access_token }); let mut req_result = { let mut client = &mut *self.hub.client.borrow_mut(); - let mut req = client.borrow_mut().request(hyper::method::Method::Get, url.as_ref()) + let mut req = client.borrow_mut().request(hyper::method::Method::Get, &url) .header(UserAgent(self.hub._user_agent.clone())) .header(auth_header.clone()); @@ -13220,7 +13222,7 @@ impl<'a, C, A> ReplyGetCall<'a, C, A> where C: BorrowMut, A: oaut access_token: token.access_token }); let mut req_result = { let mut client = &mut *self.hub.client.borrow_mut(); - let mut req = client.borrow_mut().request(hyper::method::Method::Get, url.as_ref()) + let mut req = client.borrow_mut().request(hyper::method::Method::Get, &url) .header(UserAgent(self.hub._user_agent.clone())) .header(auth_header.clone()); @@ -13500,7 +13502,7 @@ impl<'a, C, A> ReplyInsertCall<'a, C, A> where C: BorrowMut, A: o request_value_reader.seek(io::SeekFrom::Start(0)).unwrap(); let mut req_result = { let mut client = &mut *self.hub.client.borrow_mut(); - let mut req = client.borrow_mut().request(hyper::method::Method::Post, url.as_ref()) + let mut req = client.borrow_mut().request(hyper::method::Method::Post, &url) .header(UserAgent(self.hub._user_agent.clone())) .header(auth_header.clone()) .header(ContentType(json_mime_type.clone())) @@ -13764,7 +13766,7 @@ impl<'a, C, A> ReplyDeleteCall<'a, C, A> where C: BorrowMut, A: o access_token: token.access_token }); let mut req_result = { let mut client = &mut *self.hub.client.borrow_mut(); - let mut req = client.borrow_mut().request(hyper::method::Method::Delete, url.as_ref()) + let mut req = client.borrow_mut().request(hyper::method::Method::Delete, &url) .header(UserAgent(self.hub._user_agent.clone())) .header(auth_header.clone()); @@ -14029,7 +14031,7 @@ impl<'a, C, A> ReplyUpdateCall<'a, C, A> where C: BorrowMut, A: o request_value_reader.seek(io::SeekFrom::Start(0)).unwrap(); let mut req_result = { let mut client = &mut *self.hub.client.borrow_mut(); - let mut req = client.borrow_mut().request(hyper::method::Method::Put, url.as_ref()) + let mut req = client.borrow_mut().request(hyper::method::Method::Put, &url) .header(UserAgent(self.hub._user_agent.clone())) .header(auth_header.clone()) .header(ContentType(json_mime_type.clone())) @@ -14301,7 +14303,7 @@ impl<'a, C, A> PermissionDeleteCall<'a, C, A> where C: BorrowMut, access_token: token.access_token }); let mut req_result = { let mut client = &mut *self.hub.client.borrow_mut(); - let mut req = client.borrow_mut().request(hyper::method::Method::Delete, url.as_ref()) + let mut req = client.borrow_mut().request(hyper::method::Method::Delete, &url) .header(UserAgent(self.hub._user_agent.clone())) .header(auth_header.clone()); @@ -14562,7 +14564,7 @@ impl<'a, C, A> PermissionInsertCall<'a, C, A> where C: BorrowMut, request_value_reader.seek(io::SeekFrom::Start(0)).unwrap(); let mut req_result = { let mut client = &mut *self.hub.client.borrow_mut(); - let mut req = client.borrow_mut().request(hyper::method::Method::Post, url.as_ref()) + let mut req = client.borrow_mut().request(hyper::method::Method::Post, &url) .header(UserAgent(self.hub._user_agent.clone())) .header(auth_header.clone()) .header(ContentType(json_mime_type.clone())) @@ -14846,7 +14848,7 @@ impl<'a, C, A> PermissionUpdateCall<'a, C, A> where C: BorrowMut, request_value_reader.seek(io::SeekFrom::Start(0)).unwrap(); let mut req_result = { let mut client = &mut *self.hub.client.borrow_mut(); - let mut req = client.borrow_mut().request(hyper::method::Method::Put, url.as_ref()) + let mut req = client.borrow_mut().request(hyper::method::Method::Put, &url) .header(UserAgent(self.hub._user_agent.clone())) .header(auth_header.clone()) .header(ContentType(json_mime_type.clone())) @@ -15133,7 +15135,7 @@ impl<'a, C, A> PermissionPatchCall<'a, C, A> where C: BorrowMut, request_value_reader.seek(io::SeekFrom::Start(0)).unwrap(); let mut req_result = { let mut client = &mut *self.hub.client.borrow_mut(); - let mut req = client.borrow_mut().request(hyper::method::Method::Patch, url.as_ref()) + let mut req = client.borrow_mut().request(hyper::method::Method::Patch, &url) .header(UserAgent(self.hub._user_agent.clone())) .header(auth_header.clone()) .header(ContentType(json_mime_type.clone())) @@ -15401,7 +15403,7 @@ impl<'a, C, A> PermissionListCall<'a, C, A> where C: BorrowMut, A access_token: token.access_token }); let mut req_result = { let mut client = &mut *self.hub.client.borrow_mut(); - let mut req = client.borrow_mut().request(hyper::method::Method::Get, url.as_ref()) + let mut req = client.borrow_mut().request(hyper::method::Method::Get, &url) .header(UserAgent(self.hub._user_agent.clone())) .header(auth_header.clone()); @@ -15642,7 +15644,7 @@ impl<'a, C, A> PermissionGetCall<'a, C, A> where C: BorrowMut, A: access_token: token.access_token }); let mut req_result = { let mut client = &mut *self.hub.client.borrow_mut(); - let mut req = client.borrow_mut().request(hyper::method::Method::Get, url.as_ref()) + let mut req = client.borrow_mut().request(hyper::method::Method::Get, &url) .header(UserAgent(self.hub._user_agent.clone())) .header(auth_header.clone()); @@ -15891,7 +15893,7 @@ impl<'a, C, A> PermissionGetIdForEmailCall<'a, C, A> where C: BorrowMut ChangeWatchCall<'a, C, A> where C: BorrowMut, A: o request_value_reader.seek(io::SeekFrom::Start(0)).unwrap(); let mut req_result = { let mut client = &mut *self.hub.client.borrow_mut(); - let mut req = client.borrow_mut().request(hyper::method::Method::Post, url.as_ref()) + let mut req = client.borrow_mut().request(hyper::method::Method::Post, &url) .header(UserAgent(self.hub._user_agent.clone())) .header(auth_header.clone()) .header(ContentType(json_mime_type.clone())) @@ -16416,7 +16418,7 @@ impl<'a, C, A> ChangeListCall<'a, C, A> where C: BorrowMut, A: oa access_token: token.access_token }); let mut req_result = { let mut client = &mut *self.hub.client.borrow_mut(); - let mut req = client.borrow_mut().request(hyper::method::Method::Get, url.as_ref()) + let mut req = client.borrow_mut().request(hyper::method::Method::Get, &url) .header(UserAgent(self.hub._user_agent.clone())) .header(auth_header.clone()); @@ -16680,7 +16682,7 @@ impl<'a, C, A> ChangeGetCall<'a, C, A> where C: BorrowMut, A: oau access_token: token.access_token }); let mut req_result = { let mut client = &mut *self.hub.client.borrow_mut(); - let mut req = client.borrow_mut().request(hyper::method::Method::Get, url.as_ref()) + let mut req = client.borrow_mut().request(hyper::method::Method::Get, &url) .header(UserAgent(self.hub._user_agent.clone())) .header(auth_header.clone()); @@ -16938,7 +16940,7 @@ impl<'a, C, A> PropertyPatchCall<'a, C, A> where C: BorrowMut, A: request_value_reader.seek(io::SeekFrom::Start(0)).unwrap(); let mut req_result = { let mut client = &mut *self.hub.client.borrow_mut(); - let mut req = client.borrow_mut().request(hyper::method::Method::Patch, url.as_ref()) + let mut req = client.borrow_mut().request(hyper::method::Method::Patch, &url) .header(UserAgent(self.hub._user_agent.clone())) .header(auth_header.clone()) .header(ContentType(json_mime_type.clone())) @@ -17212,7 +17214,7 @@ impl<'a, C, A> PropertyDeleteCall<'a, C, A> where C: BorrowMut, A access_token: token.access_token }); let mut req_result = { let mut client = &mut *self.hub.client.borrow_mut(); - let mut req = client.borrow_mut().request(hyper::method::Method::Delete, url.as_ref()) + let mut req = client.borrow_mut().request(hyper::method::Method::Delete, &url) .header(UserAgent(self.hub._user_agent.clone())) .header(auth_header.clone()); @@ -17470,7 +17472,7 @@ impl<'a, C, A> PropertyInsertCall<'a, C, A> where C: BorrowMut, A request_value_reader.seek(io::SeekFrom::Start(0)).unwrap(); let mut req_result = { let mut client = &mut *self.hub.client.borrow_mut(); - let mut req = client.borrow_mut().request(hyper::method::Method::Post, url.as_ref()) + let mut req = client.borrow_mut().request(hyper::method::Method::Post, &url) .header(UserAgent(self.hub._user_agent.clone())) .header(auth_header.clone()) .header(ContentType(json_mime_type.clone())) @@ -17721,7 +17723,7 @@ impl<'a, C, A> PropertyListCall<'a, C, A> where C: BorrowMut, A: access_token: token.access_token }); let mut req_result = { let mut client = &mut *self.hub.client.borrow_mut(); - let mut req = client.borrow_mut().request(hyper::method::Method::Get, url.as_ref()) + let mut req = client.borrow_mut().request(hyper::method::Method::Get, &url) .header(UserAgent(self.hub._user_agent.clone())) .header(auth_header.clone()); @@ -17979,7 +17981,7 @@ impl<'a, C, A> PropertyUpdateCall<'a, C, A> where C: BorrowMut, A request_value_reader.seek(io::SeekFrom::Start(0)).unwrap(); let mut req_result = { let mut client = &mut *self.hub.client.borrow_mut(); - let mut req = client.borrow_mut().request(hyper::method::Method::Put, url.as_ref()) + let mut req = client.borrow_mut().request(hyper::method::Method::Put, &url) .header(UserAgent(self.hub._user_agent.clone())) .header(auth_header.clone()) .header(ContentType(json_mime_type.clone())) @@ -18254,7 +18256,7 @@ impl<'a, C, A> PropertyGetCall<'a, C, A> where C: BorrowMut, A: o access_token: token.access_token }); let mut req_result = { let mut client = &mut *self.hub.client.borrow_mut(); - let mut req = client.borrow_mut().request(hyper::method::Method::Get, url.as_ref()) + let mut req = client.borrow_mut().request(hyper::method::Method::Get, &url) .header(UserAgent(self.hub._user_agent.clone())) .header(auth_header.clone()); @@ -18512,7 +18514,7 @@ impl<'a, C, A> RevisionGetCall<'a, C, A> where C: BorrowMut, A: o access_token: token.access_token }); let mut req_result = { let mut client = &mut *self.hub.client.borrow_mut(); - let mut req = client.borrow_mut().request(hyper::method::Method::Get, url.as_ref()) + let mut req = client.borrow_mut().request(hyper::method::Method::Get, &url) .header(UserAgent(self.hub._user_agent.clone())) .header(auth_header.clone()); @@ -18762,7 +18764,7 @@ impl<'a, C, A> RevisionDeleteCall<'a, C, A> where C: BorrowMut, A access_token: token.access_token }); let mut req_result = { let mut client = &mut *self.hub.client.borrow_mut(); - let mut req = client.borrow_mut().request(hyper::method::Method::Delete, url.as_ref()) + let mut req = client.borrow_mut().request(hyper::method::Method::Delete, &url) .header(UserAgent(self.hub._user_agent.clone())) .header(auth_header.clone()); @@ -19015,7 +19017,7 @@ impl<'a, C, A> RevisionUpdateCall<'a, C, A> where C: BorrowMut, A request_value_reader.seek(io::SeekFrom::Start(0)).unwrap(); let mut req_result = { let mut client = &mut *self.hub.client.borrow_mut(); - let mut req = client.borrow_mut().request(hyper::method::Method::Put, url.as_ref()) + let mut req = client.borrow_mut().request(hyper::method::Method::Put, &url) .header(UserAgent(self.hub._user_agent.clone())) .header(auth_header.clone()) .header(ContentType(json_mime_type.clone())) @@ -19276,7 +19278,7 @@ impl<'a, C, A> RevisionListCall<'a, C, A> where C: BorrowMut, A: access_token: token.access_token }); let mut req_result = { let mut client = &mut *self.hub.client.borrow_mut(); - let mut req = client.borrow_mut().request(hyper::method::Method::Get, url.as_ref()) + let mut req = client.borrow_mut().request(hyper::method::Method::Get, &url) .header(UserAgent(self.hub._user_agent.clone())) .header(auth_header.clone()); @@ -19529,7 +19531,7 @@ impl<'a, C, A> RevisionPatchCall<'a, C, A> where C: BorrowMut, A: request_value_reader.seek(io::SeekFrom::Start(0)).unwrap(); let mut req_result = { let mut client = &mut *self.hub.client.borrow_mut(); - let mut req = client.borrow_mut().request(hyper::method::Method::Patch, url.as_ref()) + let mut req = client.borrow_mut().request(hyper::method::Method::Patch, &url) .header(UserAgent(self.hub._user_agent.clone())) .header(auth_header.clone()) .header(ContentType(json_mime_type.clone())) diff --git a/gen/groupsmigration1-cli/Cargo.toml b/gen/groupsmigration1-cli/Cargo.toml index 76e24847c3..1f376ea09b 100644 --- a/gen/groupsmigration1-cli/Cargo.toml +++ b/gen/groupsmigration1-cli/Cargo.toml @@ -4,7 +4,7 @@ [package] name = "google-groupsmigration1-cli" -version = "0.1.0+20140416" +version = "0.2.0+20140416" authors = ["Sebastian Thiel "] description = "A complete library to interact with Groups Migration (protocol v1)" repository = "https://github.com/Byron/google-apis-rs/tree/master/gen/groupsmigration1-cli" @@ -20,9 +20,7 @@ name = "groupsmigration1" hyper = "*" mime = "*" yup-oauth2 = "*" -docopt = "*" -docopt_macros = "*" -rustc-serialize = "*" +clap = "*" yup-hyper-mock = "*" serde = ">= 0.3.0" serde_macros = "*" diff --git a/gen/groupsmigration1-cli/README.md b/gen/groupsmigration1-cli/README.md index d5c44a2ed2..2f3b186746 100644 --- a/gen/groupsmigration1-cli/README.md +++ b/gen/groupsmigration1-cli/README.md @@ -10,21 +10,26 @@ capabilities. Errors will be printed to standard error, and cause the program's If data-structures are requested, these will be returned as pretty-printed JSON, to be useful as input to other tools. +Everything else about the *Groups Migration* API can be found at the +[official documentation site](https://developers.google.com/google-apps/groups-migration/). + # Usage -This documentation was generated from the *Groups Migration* API at revision *20140416*. The CLI is at version *0.1.0*. +This documentation was generated from the *Groups Migration* API at revision *20140416*. The CLI is at version *0.2.0*. ```bash - groupsmigration1 [options] archive insert -u (simple|resumable) [-p ...] [-o ] +groupsmigration1 [options] + archive + insert (-u (simple|resumable) -f [-m ]) [-p ]... [-o ] groupsmigration1 --help All documentation details can be found at -http://byron.github.io/google-apis-rs/google_groupsmigration1_cli/index.html +http://byron.github.io/google-apis-rs/google_groupsmigration1_cli Configuration: - --scope + [--scope ]... Specify the authentication a method should be executed in. Each scope - requires the user to grant this application permission to use it. + requires the user to grant this application permission to use it. If unset, it defaults to the shortest scope url for a particular method. --config-dir A directory into which we will store our persistent data. Defaults to diff --git a/gen/groupsmigration1-cli/mkdocs.yml b/gen/groupsmigration1-cli/mkdocs.yml index 3a965ae1c3..25e1883bef 100644 --- a/gen/groupsmigration1-cli/mkdocs.yml +++ b/gen/groupsmigration1-cli/mkdocs.yml @@ -1,4 +1,4 @@ -site_name: Groups Migration v0.1.0+20140416 +site_name: Groups Migration v0.2.0+20140416 site_url: http://byron.github.io/google-apis-rs/google-groupsmigration1-cli site_description: Write integrating applications with bcore diff --git a/gen/groupsmigration1-cli/src/cmn.rs b/gen/groupsmigration1-cli/src/cmn.rs index 4ba65df643..f784b283db 100644 --- a/gen/groupsmigration1-cli/src/cmn.rs +++ b/gen/groupsmigration1-cli/src/cmn.rs @@ -1,8 +1,9 @@ // COPY OF 'src/rust/cli/cmn.rs' // DO NOT EDIT use oauth2::{ApplicationSecret, ConsoleApplicationSecret, TokenStorage, Token}; -use rustc_serialize::json; +use serde::json; use mime::Mime; +use clap::{App, SubCommand}; use std::fs; use std::env; @@ -17,6 +18,46 @@ use std::default::Default; const FIELD_SEP: char = '.'; +pub enum CallType { + Upload(UploadProtocol), + Standard, +} + +pub enum UploadProtocol { + Simple, + Resumable, +} + +impl AsRef for UploadProtocol { + fn as_ref(&self) -> &str { + match *self { + UploadProtocol::Simple => "simple", + UploadProtocol::Resumable => "resumable" + } + } +} + +impl AsRef for CallType { + fn as_ref(&self) -> &str { + match *self { + CallType::Upload(ref proto) => proto.as_ref(), + CallType::Standard => "standard-request" + } + } +} + +impl FromStr for UploadProtocol { + type Err = String; + + fn from_str(s: &str) -> Result { + match s { + "simple" => Ok(UploadProtocol::Simple), + "resumable" => Ok(UploadProtocol::Resumable), + _ => Err(format!("Protocol '{}' is unknown", s)), + } + } +} + #[derive(Clone, Default)] pub struct FieldCursor(Vec); @@ -112,6 +153,17 @@ pub fn parse_kv_arg<'a>(kv: &'a str, err: &mut InvalidOptionsError, for_hashmap: } } +pub fn protocol_from_str(name: &str, valid_protocols: Vec, err: &mut InvalidOptionsError) -> CallType { + CallType::Upload( + match UploadProtocol::from_str(name) { + Ok(up) => up, + Err(msg) => { + err.issues.push(CLIError::InvalidUploadProtocol(name.to_string(), valid_protocols)); + UploadProtocol::Simple + } + }) +} + pub fn input_file_from_opts(file_path: &str, err: &mut InvalidOptionsError) -> Option { match fs::File::open(file_path) { Ok(f) => Some(f), @@ -132,13 +184,14 @@ pub fn input_mime_from_opts(mime: &str, err: &mut InvalidOptionsError) -> Option } } -// May panic if we can't open the file - this is anticipated, we can't currently communicate this -// kind of error: TODO: fix this architecture :) -pub fn writer_from_opts(flag: bool, arg: &str) -> Box { - if !flag || arg == "-" { - Box::new(stdout()) - } else { - Box::new(fs::OpenOptions::new().create(true).write(true).open(arg).unwrap()) +pub fn writer_from_opts(arg: Option<&str>) -> Result, io::Error> { + let f = arg.unwrap_or("-"); + match f { + "-" => Ok(Box::new(stdout())), + _ => match fs::OpenOptions::new().create(true).write(true).open(f) { + Ok(f) => Ok(Box::new(f)), + Err(io_err) => Err(io_err), + } } } @@ -151,7 +204,7 @@ pub fn arg_from_str(arg: &str, err: &mut InvalidOptionsError, match FromStr::from_str(arg) { Err(perr) => { err.issues.push( - CLIError::ParseError((arg_name, arg_type, arg.to_string(), format!("{}", perr))) + CLIError::ParseError(arg_name, arg_type, arg.to_string(), format!("{}", perr)) ); Default::default() }, @@ -171,49 +224,47 @@ impl JsonTokenStorage { } impl TokenStorage for JsonTokenStorage { - type Error = io::Error; + type Error = json::Error; // NOTE: logging might be interesting, currently we swallow all errors - fn set(&mut self, scope_hash: u64, _: &Vec<&str>, token: Option) -> Option { + fn set(&mut self, scope_hash: u64, _: &Vec<&str>, token: Option) -> Result<(), json::Error> { match token { None => { match fs::remove_file(self.path(scope_hash)) { Err(err) => match err.kind() { - io::ErrorKind::NotFound => None, - _ => Some(err) + io::ErrorKind::NotFound => Ok(()), + _ => Err(json::Error::IoError(err)) }, - Ok(_) => None + Ok(_) => Ok(()), } } Some(token) => { - let json_token = json::encode(&token).unwrap(); match fs::OpenOptions::new().create(true).write(true).open(&self.path(scope_hash)) { Ok(mut f) => { - match f.write(json_token.as_bytes()) { - Ok(_) => None, - Err(io_err) => Some(io_err), + match json::to_writer_pretty(&mut f, &token) { + Ok(_) => Ok(()), + Err(io_err) => Err(json::Error::IoError(io_err)), } }, - Err(io_err) => Some(io_err) + Err(io_err) => Err(json::Error::IoError(io_err)) } } } } - fn get(&self, scope_hash: u64, _: &Vec<&str>) -> Result, io::Error> { + fn get(&self, scope_hash: u64, _: &Vec<&str>) -> Result, json::Error> { match fs::File::open(&self.path(scope_hash)) { Ok(mut f) => { - let mut json_string = String::new(); - match f.read_to_string(&mut json_string) { - Ok(_) => Ok(Some(json::decode::(&json_string).unwrap())), - Err(io_err) => Err(io_err), + match json::de::from_reader(f) { + Ok(token) => Ok(Some(token)), + Err(err) => Err(err), } }, Err(io_err) => { match io_err.kind() { io::ErrorKind::NotFound => Ok(None), - _ => Err(io_err) + _ => Err(json::Error::IoError(io_err)) } } } @@ -223,7 +274,7 @@ impl TokenStorage for JsonTokenStorage { #[derive(Debug)] pub enum ApplicationSecretError { - DecoderError((String, json::DecoderError)), + DecoderError((String, json::Error)), FormatError(String), } @@ -311,11 +362,14 @@ impl fmt::Display for FieldError { #[derive(Debug)] pub enum CLIError { Configuration(ConfigurationError), - ParseError((&'static str, &'static str, String, String)), + ParseError(&'static str, &'static str, String, String), UnknownParameter(String), + InvalidUploadProtocol(String, Vec), InvalidKeyValueSyntax(String, bool), Input(InputError), Field(FieldError), + MissingCommandError, + MissingMethodError(String), } impl fmt::Display for CLIError { @@ -324,7 +378,9 @@ impl fmt::Display for CLIError { CLIError::Configuration(ref err) => write!(f, "Configuration -> {}", err), CLIError::Input(ref err) => write!(f, "Input -> {}", err), CLIError::Field(ref err) => write!(f, "Field -> {}", err), - CLIError::ParseError((arg_name, type_name, ref value, ref err_desc)) + CLIError::InvalidUploadProtocol(ref proto_name, ref valid_names) + => writeln!(f, "'{}' is not a valid upload protocol. Choose from one of {}", proto_name, valid_names.connect(", ")), + CLIError::ParseError(arg_name, type_name, ref value, ref err_desc) => writeln!(f, "Failed to parse argument '{}' with value '{}' as {} with error: {}", arg_name, value, type_name, err_desc), CLIError::UnknownParameter(ref param_name) @@ -333,6 +389,8 @@ impl fmt::Display for CLIError { let hashmap_info = if is_hashmap { "hashmap " } else { "" }; writeln!(f, "'{}' does not match {}pattern =", kv, hashmap_info) }, + CLIError::MissingCommandError => writeln!(f, "Please specify the main sub-command"), + CLIError::MissingMethodError(ref cmd) => writeln!(f, "Please specify the method to call on the '{}' command", cmd), } } } @@ -399,7 +457,7 @@ pub fn assure_config_dir_exists(dir: &str) -> Result { pub fn application_secret_from_directory(dir: &str, secret_basename: &str, - json_app_secret: &str) + json_console_secret: &str) -> Result { let secret_path = Path::new(dir).join(secret_basename); let secret_str = || secret_path.as_path().to_str().unwrap().to_string(); @@ -418,7 +476,10 @@ pub fn application_secret_from_directory(dir: &str, err = match fs::OpenOptions::new().create(true).write(true).open(&secret_path) { Err(cfe) => cfe, Ok(mut f) => { - match f.write(json_app_secret.as_bytes()) { + // Assure we convert 'ugly' json string into pretty one + let console_secret: ConsoleApplicationSecret + = json::from_str(json_console_secret).unwrap(); + match json::to_writer_pretty(&mut f, &console_secret) { Err(io_err) => io_err, Ok(_) => continue, } @@ -429,23 +490,24 @@ pub fn application_secret_from_directory(dir: &str, return secret_io_error(err) }, Ok(mut f) => { - let mut json_encoded_secret = String::new(); - if let Err(io_err) = f.read_to_string(&mut json_encoded_secret) { - return secret_io_error(io_err) - } - match json::decode::(&json_encoded_secret) { - Err(json_decode_error) => return Err(CLIError::Configuration( - ConfigurationError::Secret(ApplicationSecretError::DecoderError( - (secret_str(), json_decode_error) + match json::de::from_reader::<_, ConsoleApplicationSecret>(f) { + Err(json::Error::IoError(err)) => + return secret_io_error(err), + Err(json_err) => + return Err(CLIError::Configuration( + ConfigurationError::Secret( + ApplicationSecretError::DecoderError( + (secret_str(), json_err) )))), - Ok(console_secret) => match console_secret.installed { - Some(secret) => return Ok(secret), - None => return Err( - CLIError::Configuration( - ConfigurationError::Secret( - ApplicationSecretError::FormatError(secret_str()) - ))) - }, + Ok(console_secret) => + match console_secret.installed { + Some(secret) => return Ok(secret), + None => return Err( + CLIError::Configuration( + ConfigurationError::Secret( + ApplicationSecretError::FormatError(secret_str()) + ))) + }, } } } diff --git a/gen/groupsmigration1-cli/src/main.rs b/gen/groupsmigration1-cli/src/main.rs index 609234b14e..4b6d3c7cda 100644 --- a/gen/groupsmigration1-cli/src/main.rs +++ b/gen/groupsmigration1-cli/src/main.rs @@ -2,13 +2,11 @@ // This file was generated automatically from 'src/mako/cli/main.rs.mako' // DO NOT EDIT ! #![feature(plugin, exit_status)] -#![plugin(docopt_macros)] #![allow(unused_variables, unused_imports, dead_code, unused_mut)] -extern crate docopt; +extern crate clap; extern crate yup_oauth2 as oauth2; extern crate yup_hyper_mock as mock; -extern crate rustc_serialize; extern crate serde; extern crate hyper; extern crate mime; @@ -16,53 +14,37 @@ extern crate google_groupsmigration1 as api; use std::env; use std::io::{self, Write}; - -docopt!(Options derive Debug, " -Usage: - groupsmigration1 [options] archive insert -u (simple|resumable) [-p ...] [-o ] - groupsmigration1 --help - -All documentation details can be found at -http://byron.github.io/google-apis-rs/google_groupsmigration1_cli/index.html - -Configuration: - --scope - 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. - --config-dir - A directory into which we will store our persistent data. Defaults to - a user-writable directory that we will create during the first invocation. - [default: ~/.google-service-cli] - --debug - Output all server communication to standard error. `tx` and `rx` are placed - into the same stream. - --debug-auth - Output all communication related to authentication to standard error. `tx` - and `rx` are placed into the same stream. -"); +use clap::{App, SubCommand, Arg}; mod cmn; + use cmn::{InvalidOptionsError, CLIError, JsonTokenStorage, arg_from_str, writer_from_opts, parse_kv_arg, - input_file_from_opts, input_mime_from_opts, FieldCursor, FieldError}; + input_file_from_opts, input_mime_from_opts, FieldCursor, FieldError, CallType, UploadProtocol, + protocol_from_str}; use std::default::Default; use std::str::FromStr; use oauth2::{Authenticator, DefaultAuthenticatorDelegate}; -use rustc_serialize::json; +use serde::json; +use clap::ArgMatches; -struct Engine { - opt: Options, +enum DoitError { + IoError(String, io::Error), + ApiError(api::Error), +} + +struct Engine<'n, 'a> { + opt: ArgMatches<'n, 'a>, hub: api::GroupsMigration>, } -impl Engine { - fn _archive_insert(&self, dry_run: bool, err: &mut InvalidOptionsError) - -> Option { - let mut call = self.hub.archive().insert(&self.opt.arg_group_id); - for parg in self.opt.arg_v.iter() { +impl<'n, 'a> Engine<'n, 'a> { + fn _archive_insert(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + let mut call = self.hub.archive().insert(opt.value_of("group-id").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { let (key, value) = parse_kv_arg(&*parg, err, false); match key { "alt" @@ -83,65 +65,71 @@ impl Engine { _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), } } - let protocol = - if self.opt.cmd_simple { - "simple" - } else if self.opt.cmd_resumable { - "resumable" - } else { - unreachable!() - }; - let mut input_file = input_file_from_opts(&self.opt.arg_file, err); - let mime_type = input_mime_from_opts(&self.opt.arg_mime, err); + let vals = opt.values_of("mode").unwrap(); + let protocol = protocol_from_str(vals[0], ["simple", "resumable"].iter().map(|&v| v.to_string()).collect(), err); + let mut input_file = input_file_from_opts(vals[1], err); + let mime_type = input_mime_from_opts(opt.value_of("mime").unwrap_or("application/octet-stream"), err); if dry_run { - None + Ok(()) } else { assert!(err.issues.len() == 0); - if self.opt.flag_scope.len() > 0 { - call = call.add_scope(&self.opt.flag_scope); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); } - let mut ostream = writer_from_opts(self.opt.flag_o, &self.opt.arg_out); + 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 { - "simple" => call.upload(input_file.unwrap(), mime_type.unwrap()), - "resumable" => call.upload_resumable(input_file.unwrap(), mime_type.unwrap()), - _ => unreachable!(), + CallType::Upload(UploadProtocol::Simple) => call.upload(input_file.unwrap(), mime_type.unwrap()), + CallType::Upload(UploadProtocol::Resumable) => call.upload_resumable(input_file.unwrap(), mime_type.unwrap()), + CallType::Standard => unreachable!() } { - Err(api_err) => Some(api_err), + Err(api_err) => Err(DoitError::ApiError(api_err)), Ok((mut response, output_schema)) => { serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); - None + Ok(()) } } } } - fn _doit(&self, dry_run: bool) -> (Option, Option) { + fn _doit(&self, dry_run: bool) -> Result, Option> { let mut err = InvalidOptionsError::new(); - let mut call_result: Option; + let mut call_result: Result<(), DoitError> = Ok(()); let mut err_opt: Option = None; - - if self.opt.cmd_archive { - if self.opt.cmd_insert { - call_result = self._archive_insert(dry_run, &mut err); - } else { - unreachable!(); + match self.opt.subcommand() { + ("archive", Some(opt)) => { + match opt.subcommand() { + ("insert", Some(opt)) => { + call_result = self._archive_insert(opt, dry_run, &mut err); + }, + _ => { + err.issues.push(CLIError::MissingMethodError("archive".to_string())); + writeln!(io::stderr(), "{}\n", opt.usage()).ok(); + } + } + }, + _ => { + err.issues.push(CLIError::MissingCommandError); + writeln!(io::stderr(), "{}\n", self.opt.usage()).ok(); } - } else { - unreachable!(); } if dry_run { if err.issues.len() > 0 { err_opt = Some(err); } + Err(err_opt) + } else { + Ok(call_result) } - (call_result, err_opt) } // Please note that this call will fail if any part of the opt can't be handled - fn new(opt: Options) -> Result { + fn new(opt: ArgMatches<'a, 'n>) -> Result, InvalidOptionsError> { let (config_dir, secret) = { - let config_dir = match cmn::assure_config_dir_exists(&opt.flag_config_dir) { + let config_dir = match cmn::assure_config_dir_exists(opt.value_of("folder").unwrap_or("~/.google-service-cli")) { Err(e) => return Err(InvalidOptionsError::single(e, 3)), Ok(p) => p, }; @@ -154,7 +142,7 @@ impl Engine { }; let auth = Authenticator::new( &secret, DefaultAuthenticatorDelegate, - if opt.flag_debug_auth { + if opt.is_present("debug-auth") { hyper::Client::with_connector(mock::TeeConnector { connector: hyper::net::HttpConnector(None) }) @@ -167,7 +155,7 @@ impl Engine { }, None); let client = - if opt.flag_debug { + if opt.is_present("debug") { hyper::Client::with_connector(mock::TeeConnector { connector: hyper::net::HttpConnector(None) }) @@ -180,34 +168,153 @@ impl Engine { }; match engine._doit(true) { - (_, Some(err)) => Err(err), - _ => Ok(engine), + Err(Some(err)) => Err(err), + Err(None) => Ok(engine), + Ok(_) => unreachable!(), } } - // Execute the call with all the bells and whistles, informing the caller only if there was an error. - // The absense of one indicates success. - fn doit(&self) -> Option { - self._doit(false).0 + fn doit(&self) -> Result<(), DoitError> { + match self._doit(false) { + Ok(res) => res, + Err(_) => unreachable!(), + } } } fn main() { - let opts: Options = Options::docopt().decode().unwrap_or_else(|e| e.exit()); - let debug = opts.flag_debug; - match Engine::new(opts) { + let upload_value_names = ["mode", "file"]; + let arg_data = [ + ("archive", "methods: 'insert'", vec![ + ("insert", Some("Inserts a new mail into the archive of the Google group."), + vec![ + (Some("group-id"), + None, + Some("The group ID"), + Some(true), + Some(false)), + + (Some("mode"), + Some("u"), + Some("Specify the upload protocol (simple|resumable) and the file to upload"), + Some(true), + Some(true)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ]), + + ]; + + let mut app = App::new("groupsmigration1") + .author("Sebastian Thiel ") + .version("0.2.0+20140416") + .about("Groups Migration Api.") + .after_help("All documentation details can be found at http://byron.github.io/google-apis-rs/google_groupsmigration1_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("Output all server communication to standard error. `tx` and `rx` are placed into the same stream.") + .multiple(false) + .takes_value(false)) + .arg(Arg::with_name("debug-auth") + .long("debug-auth") + .help("Output all communication related to authentication to standard error. `tx` and `rx` are placed into the same stream.") + .multiple(false) + .takes_value(false)); + + for &(main_command_name, ref about, ref subcommands) in arg_data.iter() { + let mut mcmd = SubCommand::new(main_command_name).about(about); + + for &(sub_command_name, ref desc, ref args) in subcommands { + let mut scmd = SubCommand::new(sub_command_name); + if let &Some(desc) = desc { + scmd = scmd.about(desc); + } + + 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); + 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); + } + if arg_name_str == "mode" { + arg = arg.number_of_values(2); + arg = arg.value_names(&upload_value_names); + + scmd = scmd.arg(Arg::with_name("mime") + .short("m") + .requires("mode") + .required(false) + .help("The file's mime time, like 'application/octet-stream'") + .takes_value(true)); + } + scmd = scmd.arg(arg); + } + mcmd = mcmd.subcommand(scmd); + } + app = app.subcommand(mcmd); + } + + let matches = app.get_matches(); + + let debug = matches.is_present("debug"); + match Engine::new(matches) { Err(err) => { - writeln!(io::stderr(), "{}", err).ok(); env::set_exit_status(err.exit_code); + writeln!(io::stderr(), "{}", err).ok(); }, Ok(engine) => { - if let Some(err) = engine.doit() { - if debug { - writeln!(io::stderr(), "{:?}", err).ok(); - } else { - writeln!(io::stderr(), "{}", err).ok(); - } + if let Err(doit_err) = engine.doit() { env::set_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(); + } + } + } } } } diff --git a/gen/groupsmigration1/Cargo.toml b/gen/groupsmigration1/Cargo.toml index 7403b5e0ae..72e4b27d5a 100644 --- a/gen/groupsmigration1/Cargo.toml +++ b/gen/groupsmigration1/Cargo.toml @@ -4,7 +4,7 @@ [package] name = "google-groupsmigration1" -version = "0.1.6+20140416" +version = "0.1.7+20140416" authors = ["Sebastian Thiel "] description = "A complete library to interact with Groups Migration (protocol v1)" repository = "https://github.com/Byron/google-apis-rs/tree/master/gen/groupsmigration1" diff --git a/gen/groupsmigration1/README.md b/gen/groupsmigration1/README.md index c807bfadfa..9bc7bc2f41 100644 --- a/gen/groupsmigration1/README.md +++ b/gen/groupsmigration1/README.md @@ -5,7 +5,7 @@ DO NOT EDIT ! --> The `google-groupsmigration1` library allows access to all features of the *Google Groups Migration* service. -This documentation was generated from *Groups Migration* crate version *0.1.6+20140416*, where *20140416* is the exact revision of the *groupsmigration:v1* schema built by the [mako](http://www.makotemplates.org/) code generator *v0.1.6*. +This documentation was generated from *Groups Migration* crate version *0.1.7+20140416*, where *20140416* is the exact revision of the *groupsmigration:v1* schema built by the [mako](http://www.makotemplates.org/) code generator *v0.1.7*. Everything else about the *Groups Migration* *v1* API can be found at the [official documentation site](https://developers.google.com/google-apps/groups-migration/). @@ -162,7 +162,7 @@ These will always take a single argument, for which the following statements are * [PODs][wiki-pod] are handed by copy * strings are passed as `&str` -* [request values](http://byron.github.io/google-apis-rs/google_groupsmigration1/trait.RequestValue.html) are borrowed +* [request values](http://byron.github.io/google-apis-rs/google_groupsmigration1/trait.RequestValue.html) are moved Arguments will always be copied or cloned into the builder, to make them independent of their original life times. diff --git a/gen/groupsmigration1/src/cmn.rs b/gen/groupsmigration1/src/cmn.rs index b7665b194b..92b10c0eb1 100644 --- a/gen/groupsmigration1/src/cmn.rs +++ b/gen/groupsmigration1/src/cmn.rs @@ -43,7 +43,7 @@ pub trait RequestValue {} /// This might be a bug within the google API schema. pub trait UnusedType {} -/// Identifies types which are only used as part of other types, which +/// Identifies types which are only used as part of other types, which /// usually are carrying the `Resource` trait. pub trait Part {} @@ -78,7 +78,7 @@ pub struct ErrorResponse { pub struct ServerError { errors: Vec, code: u16, - message: String, + message: String, } #[derive(Deserialize, Serialize, Debug)] @@ -120,7 +120,7 @@ impl hyper::net::NetworkStream for DummyNetworkStream { /// A trait specifying functionality to help controlling any request performed by the API. /// The trait has a conservative default implementation. /// -/// It contains methods to deal with all common issues, as well with the ones related to +/// It contains methods to deal with all common issues, as well with the ones related to /// uploading media pub trait Delegate { @@ -128,12 +128,12 @@ pub trait Delegate { /// information if he is interesting in knowing more context when further calls to it /// are made. /// The matching `finished()` call will always be made, no matter whether or not the API - /// request was successful. That way, the delegate may easily maintain a clean state + /// request was successful. That way, the delegate may easily maintain a clean state /// between various API calls. fn begin(&mut self, MethodInfo) {} /// Called whenever there is an [HttpError](http://hyperium.github.io/hyper/hyper/error/enum.HttpError.html), usually if there are network problems. - /// + /// /// If you choose to retry after a duration, the duration should be chosen using the /// [exponential backoff algorithm](http://en.wikipedia.org/wiki/Exponential_backoff). /// @@ -142,7 +142,7 @@ pub trait Delegate { Retry::Abort } - /// Called whenever there is the need for your applications API key after + /// Called whenever there is the need for your applications API key after /// the official authenticator implementation didn't provide one, for some reason. /// If this method returns None as well, the underlying operation will fail fn api_key(&mut self) -> Option { @@ -171,16 +171,19 @@ pub trait Delegate { } /// Called after we have retrieved a new upload URL for a resumable upload to store it - /// in case we fail or cancel. That way, we can attempt to resume the upload later, + /// in case we fail or cancel. That way, we can attempt to resume the upload later, /// see `upload_url()`. - fn store_upload_url(&mut self, url: &str) { + /// It will also be called with None after a successful upload, which allows the delegate + /// to forget the URL. That way, we will not attempt to resume an upload that has already + /// finished. + fn store_upload_url(&mut self, url: Option<&str>) { let _ = url; } /// Called whenever a server response could not be decoded from json. /// It's for informational purposes only, the caller will return with an error /// accordingly. - /// + /// /// # Arguments /// /// * `json_encoded_value` - The json-encoded value which failed to decode. @@ -191,7 +194,7 @@ pub trait Delegate { } /// Called whenever the http request returns with a non-success status code. - /// This can involve authentication issues, or anything else that very much + /// This can involve authentication issues, or anything else that very much /// depends on the used API method. /// The delegate should check the status, header and decoded json error to decide /// whether to retry or not. In the latter case, the underlying call will fail. @@ -202,7 +205,7 @@ pub trait Delegate { Retry::Abort } - /// Called prior to sending the main request of the given method. It can be used to time + /// Called prior to sending the main request of the given method. It can be used to time /// the call or to print progress information. /// It's also useful as you can be sure that a request will definitely be made. fn pre_request(&mut self) { } @@ -221,14 +224,14 @@ pub trait Delegate { fn cancel_chunk_upload(&mut self, chunk: &ContentRange) -> bool { let _ = chunk; false - } + } /// Called before the API request method returns, in every case. It can be used to clean up /// internal state between calls to the API. /// This call always has a matching call to `begin(...)`. /// /// # Arguments - /// + /// /// * `is_success` - a true value indicates the operation was successful. If false, you should /// discard all values stored during `store_upload_url`. fn finished(&mut self, is_success: bool) { @@ -290,17 +293,17 @@ impl Display for Error { writeln!(f, "The application's API key was not found in the configuration").ok(); writeln!(f, "It is used as there are no Scopes defined for this method.") }, - Error::BadRequest(ref err) + Error::BadRequest(ref err) => writeln!(f, "Bad Requst ({}): {}", err.error.code, err.error.message), Error::MissingToken(ref err) => writeln!(f, "Token retrieval failed with error: {}", err), - Error::Cancelled => + Error::Cancelled => writeln!(f, "Operation cancelled by delegate"), Error::FieldClash(field) => writeln!(f, "The custom parameter '{}' is already provided natively by the CallBuilder.", field), - Error::JsonDecodeError(ref json_str, ref err) + Error::JsonDecodeError(ref json_str, ref err) => writeln!(f, "{}: {}", err, json_str), - Error::Failure(ref response) => + Error::Failure(ref response) => writeln!(f, "Http status indicates failure: {:?}", response), } } @@ -395,8 +398,8 @@ impl<'a> MultiPartReader<'a> { impl<'a> Read for MultiPartReader<'a> { fn read(&mut self, buf: &mut [u8]) -> io::Result { - match (self.raw_parts.len(), - self.current_part.is_none(), + match (self.raw_parts.len(), + self.current_part.is_none(), self.last_part_boundary.is_none()) { (_, _, false) => { let br = self.last_part_boundary.as_mut().unwrap().read(buf).unwrap_or(0); @@ -409,7 +412,7 @@ impl<'a> Read for MultiPartReader<'a> { (n, true, _) if n > 0 => { let (headers, reader) = self.raw_parts.remove(0); let mut c = Cursor::new(Vec::::new()); - write!(&mut c, "{}--{}{}{}{}", LINE_ENDING, BOUNDARY, LINE_ENDING, + write!(&mut c, "{}--{}{}{}{}", LINE_ENDING, BOUNDARY, LINE_ENDING, headers, LINE_ENDING).unwrap(); c.seek(SeekFrom::Start(0)).unwrap(); self.current_part = Some((c, reader)); @@ -423,12 +426,12 @@ impl<'a> Read for MultiPartReader<'a> { let b = c.read(buf).unwrap_or(0); (b, reader.read(&mut buf[b..])) }; - + match rr { Ok(bytes_read) => { if hb < buf.len() && bytes_read == 0 { if self.is_last_part() { - // before clearing the last part, we will add the boundary that + // before clearing the last part, we will add the boundary that // will be written last self.last_part_boundary = Some(Cursor::new( format!("{}--{}--", LINE_ENDING, BOUNDARY).into_bytes())) @@ -459,6 +462,16 @@ impl<'a> Read for MultiPartReader<'a> { header!{ #[doc="The `X-Upload-Content-Type` header."] (XUploadContentType, "X-Upload-Content-Type") => [Mime] + + xupload_content_type { + test_header!( + test1, + vec![b"text/plain"], + Some(HeaderField( + vec![Mime(TopLevel::Text, SubLevel::Plain, Vec::new())] + ))); + + } } #[derive(Clone, PartialEq, Debug)] @@ -656,7 +669,7 @@ impl<'a, A> ResumableUploadHelper<'a, A> if !res.status.is_success() { let mut json_err = String::new(); res.read_to_string(&mut json_err).unwrap(); - if let Retry::After(d) = self.delegate.http_failure(&res, + if let Retry::After(d) = self.delegate.http_failure(&res, serde::json::from_str(&json_err).ok(), serde::json::from_str(&json_err).ok()) { sleep_ms(d.num_milliseconds() as u32); @@ -675,4 +688,4 @@ impl<'a, A> ResumableUploadHelper<'a, A> } } } -} \ No newline at end of file +} diff --git a/gen/groupsmigration1/src/lib.rs b/gen/groupsmigration1/src/lib.rs index cc3d59ad46..38b0d5735c 100644 --- a/gen/groupsmigration1/src/lib.rs +++ b/gen/groupsmigration1/src/lib.rs @@ -2,31 +2,31 @@ // This file was generated automatically from 'src/mako/api/lib.rs.mako' // DO NOT EDIT ! -//! This documentation was generated from *Groups Migration* crate version *0.1.6+20140416*, where *20140416* is the exact revision of the *groupsmigration:v1* schema built by the [mako](http://www.makotemplates.org/) code generator *v0.1.6*. -//! +//! This documentation was generated from *Groups Migration* crate version *0.1.7+20140416*, where *20140416* is the exact revision of the *groupsmigration:v1* schema built by the [mako](http://www.makotemplates.org/) code generator *v0.1.7*. +//! //! Everything else about the *Groups Migration* *v1* API can be found at the //! [official documentation site](https://developers.google.com/google-apps/groups-migration/). //! The original source code is [on github](https://github.com/Byron/google-apis-rs/tree/master/gen/groupsmigration1). //! # Features -//! -//! Handle the following *Resources* with ease from the central [hub](struct.GroupsMigration.html) ... -//! +//! +//! Handle the following *Resources* with ease from the central [hub](struct.GroupsMigration.html) ... +//! //! * archive //! * [*insert*](struct.ArchiveInsertCall.html) -//! -//! +//! +//! //! Upload supported by ... -//! +//! //! * [*insert archive*](struct.ArchiveInsertCall.html) -//! -//! -//! +//! +//! +//! //! Not what you are looking for ? Find all other Google APIs in their Rust [documentation index](../index.html). -//! +//! //! # Structure of this Library -//! +//! //! The API is structured into the following primary items: -//! +//! //! * **[Hub](struct.GroupsMigration.html)** //! * a central object to maintain state and allow accessing all *Activities* //! * creates [*Method Builders*](trait.MethodsBuilder.html) which in turn @@ -39,39 +39,39 @@ //! * never directly used in *Activities* //! * **[Activities](trait.CallBuilder.html)** //! * operations to apply to *Resources* -//! +//! //! All *structures* are marked with applicable traits to further categorize them and ease browsing. -//! +//! //! Generally speaking, you can invoke *Activities* like this: -//! +//! //! ```Rust,ignore //! let r = hub.resource().activity(...).doit() //! ``` -//! +//! //! Or specifically ... -//! +//! //! ```ignore //! let r = hub.archive().insert(...).doit() //! ``` -//! -//! The `resource()` and `activity(...)` calls create [builders][builder-pattern]. The second one dealing with `Activities` -//! supports various methods to configure the impending operation (not shown here). It is made such that all required arguments have to be +//! +//! The `resource()` and `activity(...)` calls create [builders][builder-pattern]. The second one dealing with `Activities` +//! supports various methods to configure the impending operation (not shown here). It is made such that all required arguments have to be //! specified right away (i.e. `(...)`), whereas all optional ones can be [build up][builder-pattern] as desired. //! The `doit()` method performs the actual communication with the server and returns the respective result. -//! +//! //! # Usage -//! +//! //! ## Setting up your Project -//! +//! //! To use this library, you would put the following lines into your `Cargo.toml` file: -//! +//! //! ```toml //! [dependencies] //! google-groupsmigration1 = "*" //! ``` -//! +//! //! ## A complete example -//! +//! //! ```test_harness,no_run //! extern crate hyper; //! extern crate yup_oauth2 as oauth2; @@ -82,13 +82,13 @@ //! use std::default::Default; //! use oauth2::{Authenticator, DefaultAuthenticatorDelegate, ApplicationSecret, MemoryStorage}; //! use groupsmigration1::GroupsMigration; -//! -//! // Get an ApplicationSecret instance by some means. It contains the `client_id` and +//! +//! // Get an ApplicationSecret instance by some means. It contains the `client_id` and //! // `client_secret`, among other things. //! let secret: ApplicationSecret = Default::default(); -//! // Instantiate the authenticator. It will choose a suitable authentication flow for you, +//! // Instantiate the authenticator. It will choose a suitable authentication flow for you, //! // unless you replace `None` with the desired Flow. -//! // Provide your own `AuthenticatorDelegate` to adjust the way it operates and get feedback about +//! // Provide your own `AuthenticatorDelegate` to adjust the way it operates and get feedback about //! // what's going on. You probably want to bring in your own `TokenStorage` to persist tokens and //! // retrieve them from storage. //! let auth = Authenticator::new(&secret, DefaultAuthenticatorDelegate, @@ -100,7 +100,7 @@ //! // Values shown here are possibly random and not representative ! //! let result = hub.archive().insert("groupId") //! .upload(fs::File::open("file.ext").unwrap(), "application/octet-stream".parse().unwrap()); -//! +//! //! match result { //! Err(e) => match e { //! // The Error enum provides details about what exactly happened. @@ -120,62 +120,61 @@ //! # } //! ``` //! ## Handling Errors -//! -//! All errors produced by the system are provided either as [Result](enum.Result.html) enumeration as return value of -//! the doit() methods, or handed as possibly intermediate results to either the +//! +//! All errors produced by the system are provided either as [Result](enum.Result.html) enumeration as return value of +//! the doit() methods, or handed as possibly intermediate results to either the //! [Hub Delegate](trait.Delegate.html), or the [Authenticator Delegate](../yup-oauth2/trait.AuthenticatorDelegate.html). -//! -//! When delegates handle errors or intermediate values, they may have a chance to instruct the system to retry. This +//! +//! When delegates handle errors or intermediate values, they may have a chance to instruct the system to retry. This //! makes the system potentially resilient to all kinds of errors. -//! +//! //! ## Uploads and Downloads //! If a method supports downloads, the response body, which is part of the [Result](enum.Result.html), should be //! read by you to obtain the media. //! If such a method also supports a [Response Result](trait.ResponseResult.html), it will return that by default. //! You can see it as meta-data for the actual media. To trigger a media download, you will have to set up the builder by making //! this call: `.param("alt", "media")`. -//! -//! Methods supporting uploads can do so using up to 2 different protocols: -//! *simple* and *resumable*. The distinctiveness of each is represented by customized +//! +//! Methods supporting uploads can do so using up to 2 different protocols: +//! *simple* and *resumable*. The distinctiveness of each is represented by customized //! `doit(...)` methods, which are then named `upload(...)` and `upload_resumable(...)` respectively. -//! +//! //! ## Customization and Callbacks -//! -//! You may alter the way an `doit()` method is called by providing a [delegate](trait.Delegate.html) to the -//! [Method Builder](trait.CallBuilder.html) before making the final `doit()` call. -//! Respective methods will be called to provide progress information, as well as determine whether the system should +//! +//! You may alter the way an `doit()` method is called by providing a [delegate](trait.Delegate.html) to the +//! [Method Builder](trait.CallBuilder.html) before making the final `doit()` call. +//! Respective methods will be called to provide progress information, as well as determine whether the system should //! retry on failure. -//! +//! //! The [delegate trait](trait.Delegate.html) is default-implemented, allowing you to customize it with minimal effort. -//! +//! //! ## Optional Parts in Server-Requests -//! -//! All structures provided by this library are made to be [enocodable](trait.RequestValue.html) and -//! [decodable](trait.ResponseResult.html) via *json*. Optionals are used to indicate that partial requests are responses +//! +//! All structures provided by this library are made to be [enocodable](trait.RequestValue.html) and +//! [decodable](trait.ResponseResult.html) via *json*. Optionals are used to indicate that partial requests are responses //! are valid. -//! Most optionals are are considered [Parts](trait.Part.html) which are identifiable by name, which will be sent to +//! Most optionals are are considered [Parts](trait.Part.html) which are identifiable by name, which will be sent to //! the server to indicate either the set parts of the request or the desired parts in the response. -//! +//! //! ## Builder Arguments -//! +//! //! Using [method builders](trait.CallBuilder.html), you are able to prepare an action call by repeatedly calling it's methods. //! These will always take a single argument, for which the following statements are true. -//! +//! //! * [PODs][wiki-pod] are handed by copy //! * strings are passed as `&str` -//! * [request values](trait.RequestValue.html) are borrowed -//! +//! * [request values](trait.RequestValue.html) are moved +//! //! Arguments will always be copied or cloned into the builder, to make them independent of their original life times. -//! +//! //! [wiki-pod]: http://en.wikipedia.org/wiki/Plain_old_data_structure //! [builder-pattern]: http://en.wikipedia.org/wiki/Builder_pattern //! [google-go-api]: https://github.com/google/google-api-go-client -//! -//! -#![feature(std_misc)] +//! +//! // Unused attributes happen thanks to defined, but unused structures // We don't warn about this, as depending on the API, some data structures or facilities are never used. -// Instead of pre-determining this, we just disable the lint. It's manually tuned to not have any +// Instead of pre-determining this, we just disable the lint. It's manually tuned to not have any // unused imports in fully featured APIs. Same with unused_mut ... . #![allow(unused_imports, unused_mut, dead_code)] // Required for serde annotations @@ -201,7 +200,10 @@ use std::io; use std::fs; use std::thread::sleep_ms; -pub use cmn::{MultiPartReader, ToParts, MethodInfo, Result, Error, CallBuilder, Hub, ReadSeek, Part, ResponseResult, RequestValue, NestedType, Delegate, DefaultDelegate, MethodsBuilder, Resource, ErrorResponse}; +pub use cmn::{MultiPartReader, ToParts, MethodInfo, Result, Error, + CallBuilder, Hub, ReadSeek, Part, ResponseResult, + RequestValue, NestedType, Delegate, DefaultDelegate, + MethodsBuilder, Resource, ErrorResponse}; // ############## @@ -305,7 +307,7 @@ impl<'a, C, A> GroupsMigration GroupsMigration { client: RefCell::new(client), auth: RefCell::new(authenticator), - _user_agent: "google-api-rust-client/0.1.6".to_string(), + _user_agent: "google-api-rust-client/0.1.7".to_string(), } } @@ -314,7 +316,7 @@ impl<'a, C, A> GroupsMigration } /// Set the user-agent header field to use in all requests to the server. - /// It defaults to `google-api-rust-client/0.1.6`. + /// It defaults to `google-api-rust-client/0.1.7`. /// /// Returns the previously set user-agent. pub fn user_agent(&mut self, agent_name: String) -> String { @@ -391,7 +393,7 @@ pub struct ArchiveMethods<'a, C, A> impl<'a, C, A> MethodsBuilder for ArchiveMethods<'a, C, A> {} impl<'a, C, A> ArchiveMethods<'a, C, A> { - + /// Create a builder to help you perform the following task: /// /// Inserts a new mail into the archive of the Google group. @@ -465,10 +467,16 @@ impl<'a, C, A> ArchiveInsertCall<'a, C, A> where C: BorrowMut, A: /// Perform the operation you have build so far. - fn doit(mut self, mut reader: RS, reader_mime_type: mime::Mime, protocol: &'static str) -> Result<(hyper::client::Response, Groups)> - where RS: ReadSeek { + fn doit(mut self, + mut reader: RS, + reader_mime_type: mime::Mime, + protocol: &'static str) + -> Result<(hyper::client::Response, Groups)> + where RS: ReadSeek + { use std::io::{Read, Seek}; - use hyper::header::{ContentType, ContentLength, Authorization, UserAgent, Location}; + use hyper::header::{ContentType, ContentLength, Authorization, + UserAgent, Location}; let mut dd = DefaultDelegate; let mut dlg: &mut Delegate = match self._delegate { Some(d) => d, @@ -490,7 +498,7 @@ impl<'a, C, A> ArchiveInsertCall<'a, C, A> where C: BorrowMut, A: params.push(("alt", "json".to_string())); - let (mut url, upload_type) = + let (mut url, upload_type) = if protocol == "simple" { ("https://www.googleapis.com/upload/groups/v1/groups/{groupId}/archive".to_string(), "multipart") } else if protocol == "resumable" { @@ -527,7 +535,7 @@ impl<'a, C, A> ArchiveInsertCall<'a, C, A> where C: BorrowMut, A: params.remove(index); } } - + if params.len() > 0 { url.push('?'); url.push_str(&url::form_urlencoded::serialize(params.iter().map(|t| (t.0, t.1.as_ref())))); @@ -568,7 +576,7 @@ impl<'a, C, A> ArchiveInsertCall<'a, C, A> where C: BorrowMut, A: response } else { let mut client = &mut *self.hub.client.borrow_mut(); - let mut req = client.borrow_mut().request(hyper::method::Method::Post, url.as_ref()) + let mut req = client.borrow_mut().request(hyper::method::Method::Post, &url) .header(UserAgent(self.hub._user_agent.clone())) .header(auth_header.clone()); if protocol == "simple" { @@ -626,7 +634,7 @@ impl<'a, C, A> ArchiveInsertCall<'a, C, A> where C: BorrowMut, A: let upload_result = { let url_str = &res.headers.get::().expect("Location header is part of protocol").0; if upload_url_from_server { - dlg.store_upload_url(url_str); + dlg.store_upload_url(Some(url_str)); } cmn::ResumableUploadHelper { @@ -654,6 +662,7 @@ impl<'a, C, A> ArchiveInsertCall<'a, C, A> where C: BorrowMut, A: Some(Ok(upload_result)) => { res = upload_result; if !res.status.is_success() { + dlg.store_upload_url(None); dlg.finished(false); return Err(Error::Failure(res)) } @@ -685,8 +694,12 @@ impl<'a, C, A> ArchiveInsertCall<'a, C, A> where C: BorrowMut, A: /// * *max size*: 16MB /// * *multipart*: yes /// * *valid mime types*: 'message/rfc822' - pub fn upload(self, stream: RS, mime_type: mime::Mime) -> Result<(hyper::client::Response, Groups)> - where RS: ReadSeek { + pub fn upload(self, + stream: RS, + mime_type: mime::Mime) + -> Result<(hyper::client::Response, Groups)> + where RS: ReadSeek + { self.doit(stream, mime_type, "simple") } /// Upload media in a resumable fashion. @@ -701,8 +714,12 @@ impl<'a, C, A> ArchiveInsertCall<'a, C, A> where C: BorrowMut, A: /// * *max size*: 16MB /// * *multipart*: yes /// * *valid mime types*: 'message/rfc822' - pub fn upload_resumable(self, resumeable_stream: RS, mime_type: mime::Mime) -> Result<(hyper::client::Response, Groups)> - where RS: ReadSeek { + pub fn upload_resumable(self, + resumeable_stream: RS, + mime_type: mime::Mime) + -> Result<(hyper::client::Response, Groups)> + where RS: ReadSeek + { self.doit(resumeable_stream, mime_type, "resumable") } @@ -744,7 +761,8 @@ impl<'a, C, A> ArchiveInsertCall<'a, C, A> where C: BorrowMut, A: /// * *fields* (query-string) - Selector specifying which fields to include in a partial response. /// * *alt* (query-string) - Data format for the response. pub fn param(mut self, name: T, value: T) -> ArchiveInsertCall<'a, C, A> - where T: AsRef { + where T: AsRef + { self._additional_params.insert(name.as_ref().to_string(), value.as_ref().to_string()); self } @@ -760,11 +778,10 @@ impl<'a, C, A> ArchiveInsertCall<'a, C, A> where C: BorrowMut, A: /// Usually there is more than one suitable scope to authorize an operation, some of which may /// encompass more rights than others. For example, for listing resources, a *read-only* scope will be /// sufficient, a read-write scope will do as well. - pub fn add_scope(mut self, scope: T) -> ArchiveInsertCall<'a, C, A> - where T: AsRef { + pub fn add_scope(mut self, scope: T) -> ArchiveInsertCall<'a, C, A> + where T: AsRef + { self._scopes.insert(scope.as_ref().to_string(), ()); self } } - - diff --git a/gen/youtube3-cli/Cargo.toml b/gen/youtube3-cli/Cargo.toml index 7c612f1736..b9c8403a31 100644 --- a/gen/youtube3-cli/Cargo.toml +++ b/gen/youtube3-cli/Cargo.toml @@ -21,7 +21,6 @@ hyper = "*" mime = "*" yup-oauth2 = "*" clap = "*" -rustc-serialize = "*" yup-hyper-mock = "*" serde = ">= 0.3.0" serde_macros = "*" diff --git a/gen/youtube3-cli/README.md b/gen/youtube3-cli/README.md index f7708ca337..2cae5ffd60 100644 --- a/gen/youtube3-cli/README.md +++ b/gen/youtube3-cli/README.md @@ -18,76 +18,98 @@ Everything else about the *YouTube* API can be found at the This documentation was generated from the *YouTube* API at revision *20150414*. The CLI is at version *0.2.0*. ```bash - youtube3 [options] activities insert -r ... [-p ...] [-o ] - youtube3 [options] activities list [-p ...] [-o ] - youtube3 [options] captions delete [-p ...] - youtube3 [options] captions download [-p ...] [-o ] - youtube3 [options] captions insert -r ... -u (simple|resumable) [-p ...] [-o ] - youtube3 [options] captions list [-p ...] [-o ] - youtube3 [options] captions update -r ... -u (simple|resumable) [-p ...] [-o ] - youtube3 [options] channel-banners insert -r ... -u (simple|resumable) [-p ...] [-o ] - youtube3 [options] channel-sections delete [-p ...] - youtube3 [options] channel-sections insert -r ... [-p ...] [-o ] - youtube3 [options] channel-sections list [-p ...] [-o ] - youtube3 [options] channel-sections update -r ... [-p ...] [-o ] - youtube3 [options] channels list [-p ...] [-o ] - youtube3 [options] channels update -r ... [-p ...] [-o ] - youtube3 [options] comment-threads insert -r ... [-p ...] [-o ] - youtube3 [options] comment-threads list [-p ...] [-o ] - youtube3 [options] comment-threads update -r ... [-p ...] [-o ] - youtube3 [options] comments delete [-p ...] - youtube3 [options] comments insert -r ... [-p ...] [-o ] - youtube3 [options] comments list [-p ...] [-o ] - youtube3 [options] comments mark-as-spam [-p ...] - youtube3 [options] comments set-moderation-status [-p ...] - youtube3 [options] comments update -r ... [-p ...] [-o ] - youtube3 [options] guide-categories list [-p ...] [-o ] - youtube3 [options] i18n-languages list [-p ...] [-o ] - youtube3 [options] i18n-regions list [-p ...] [-o ] - youtube3 [options] live-broadcasts bind [-p ...] [-o ] - youtube3 [options] live-broadcasts control [-p ...] [-o ] - youtube3 [options] live-broadcasts delete [-p ...] - youtube3 [options] live-broadcasts insert -r ... [-p ...] [-o ] - youtube3 [options] live-broadcasts list [-p ...] [-o ] - youtube3 [options] live-broadcasts transition [-p ...] [-o ] - youtube3 [options] live-broadcasts update -r ... [-p ...] [-o ] - youtube3 [options] live-streams delete [-p ...] - youtube3 [options] live-streams insert -r ... [-p ...] [-o ] - youtube3 [options] live-streams list [-p ...] [-o ] - youtube3 [options] live-streams update -r ... [-p ...] [-o ] - youtube3 [options] playlist-items delete [-p ...] - youtube3 [options] playlist-items insert -r ... [-p ...] [-o ] - youtube3 [options] playlist-items list [-p ...] [-o ] - youtube3 [options] playlist-items update -r ... [-p ...] [-o ] - youtube3 [options] playlists delete [-p ...] - youtube3 [options] playlists insert -r ... [-p ...] [-o ] - youtube3 [options] playlists list [-p ...] [-o ] - youtube3 [options] playlists update -r ... [-p ...] [-o ] - youtube3 [options] search list [-p ...] [-o ] - youtube3 [options] subscriptions delete [-p ...] - youtube3 [options] subscriptions insert -r ... [-p ...] [-o ] - youtube3 [options] subscriptions list [-p ...] [-o ] - youtube3 [options] thumbnails set -u (simple|resumable) [-p ...] [-o ] - youtube3 [options] video-abuse-report-reasons list [-p ...] [-o ] - youtube3 [options] video-categories list [-p ...] [-o ] - youtube3 [options] videos delete [-p ...] - youtube3 [options] videos get-rating [-p ...] [-o ] - youtube3 [options] videos insert -r ... -u (simple|resumable) [-p ...] [-o ] - youtube3 [options] videos list [-p ...] [-o ] - youtube3 [options] videos rate [-p ...] - youtube3 [options] videos report-abuse -r ... [-p ...] - youtube3 [options] videos update -r ... [-p ...] [-o ] - youtube3 [options] watermarks set -r ... -u (simple|resumable) [-p ...] - youtube3 [options] watermarks unset [-p ...] +youtube3 [options] + activities + insert (-r )... [-p ]... [-o ] + list [-p ]... [-o ] + captions + delete [-p ]... + download [-p ]... [-o ] + insert (-r )... (-u (simple|resumable) -f [-m ]) [-p ]... [-o ] + list [-p ]... [-o ] + update (-r )... (-u (simple|resumable) -f [-m ]) [-p ]... [-o ] + channel-banners + insert (-r )... (-u (simple|resumable) -f [-m ]) [-p ]... [-o ] + channel-sections + delete [-p ]... + insert (-r )... [-p ]... [-o ] + list [-p ]... [-o ] + update (-r )... [-p ]... [-o ] + channels + list [-p ]... [-o ] + update (-r )... [-p ]... [-o ] + comment-threads + insert (-r )... [-p ]... [-o ] + list [-p ]... [-o ] + update (-r )... [-p ]... [-o ] + comments + delete [-p ]... + insert (-r )... [-p ]... [-o ] + list [-p ]... [-o ] + mark-as-spam [-p ]... + set-moderation-status [-p ]... + update (-r )... [-p ]... [-o ] + guide-categories + list [-p ]... [-o ] + i18n-languages + list [-p ]... [-o ] + i18n-regions + list [-p ]... [-o ] + live-broadcasts + bind [-p ]... [-o ] + control [-p ]... [-o ] + delete [-p ]... + insert (-r )... [-p ]... [-o ] + list [-p ]... [-o ] + transition [-p ]... [-o ] + update (-r )... [-p ]... [-o ] + live-streams + delete [-p ]... + insert (-r )... [-p ]... [-o ] + list [-p ]... [-o ] + update (-r )... [-p ]... [-o ] + playlist-items + delete [-p ]... + insert (-r )... [-p ]... [-o ] + list [-p ]... [-o ] + update (-r )... [-p ]... [-o ] + playlists + delete [-p ]... + insert (-r )... [-p ]... [-o ] + list [-p ]... [-o ] + update (-r )... [-p ]... [-o ] + search + list [-p ]... [-o ] + subscriptions + delete [-p ]... + insert (-r )... [-p ]... [-o ] + list [-p ]... [-o ] + thumbnails + set (-u (simple|resumable) -f [-m ]) [-p ]... [-o ] + video-abuse-report-reasons + list [-p ]... [-o ] + video-categories + list [-p ]... [-o ] + videos + delete [-p ]... + get-rating [-p ]... [-o ] + insert (-r )... (-u (simple|resumable) -f [-m ]) [-p ]... [-o ] + list [-p ]... [-o ] + rate [-p ]... + report-abuse (-r )... [-p ]... + update (-r )... [-p ]... [-o ] + watermarks + set (-r )... (-u (simple|resumable) -f [-m ]) [-p ]... + unset [-p ]... youtube3 --help All documentation details can be found at -http://byron.github.io/google-apis-rs/google_youtube3_cli/index.html +http://byron.github.io/google-apis-rs/google_youtube3_cli Configuration: - --scope + [--scope ]... Specify the authentication a method should be executed in. Each scope - requires the user to grant this application permission to use it. + requires the user to grant this application permission to use it. If unset, it defaults to the shortest scope url for a particular method. --config-dir A directory into which we will store our persistent data. Defaults to diff --git a/gen/youtube3-cli/src/cmn.rs b/gen/youtube3-cli/src/cmn.rs index 4ba65df643..f784b283db 100644 --- a/gen/youtube3-cli/src/cmn.rs +++ b/gen/youtube3-cli/src/cmn.rs @@ -1,8 +1,9 @@ // COPY OF 'src/rust/cli/cmn.rs' // DO NOT EDIT use oauth2::{ApplicationSecret, ConsoleApplicationSecret, TokenStorage, Token}; -use rustc_serialize::json; +use serde::json; use mime::Mime; +use clap::{App, SubCommand}; use std::fs; use std::env; @@ -17,6 +18,46 @@ use std::default::Default; const FIELD_SEP: char = '.'; +pub enum CallType { + Upload(UploadProtocol), + Standard, +} + +pub enum UploadProtocol { + Simple, + Resumable, +} + +impl AsRef for UploadProtocol { + fn as_ref(&self) -> &str { + match *self { + UploadProtocol::Simple => "simple", + UploadProtocol::Resumable => "resumable" + } + } +} + +impl AsRef for CallType { + fn as_ref(&self) -> &str { + match *self { + CallType::Upload(ref proto) => proto.as_ref(), + CallType::Standard => "standard-request" + } + } +} + +impl FromStr for UploadProtocol { + type Err = String; + + fn from_str(s: &str) -> Result { + match s { + "simple" => Ok(UploadProtocol::Simple), + "resumable" => Ok(UploadProtocol::Resumable), + _ => Err(format!("Protocol '{}' is unknown", s)), + } + } +} + #[derive(Clone, Default)] pub struct FieldCursor(Vec); @@ -112,6 +153,17 @@ pub fn parse_kv_arg<'a>(kv: &'a str, err: &mut InvalidOptionsError, for_hashmap: } } +pub fn protocol_from_str(name: &str, valid_protocols: Vec, err: &mut InvalidOptionsError) -> CallType { + CallType::Upload( + match UploadProtocol::from_str(name) { + Ok(up) => up, + Err(msg) => { + err.issues.push(CLIError::InvalidUploadProtocol(name.to_string(), valid_protocols)); + UploadProtocol::Simple + } + }) +} + pub fn input_file_from_opts(file_path: &str, err: &mut InvalidOptionsError) -> Option { match fs::File::open(file_path) { Ok(f) => Some(f), @@ -132,13 +184,14 @@ pub fn input_mime_from_opts(mime: &str, err: &mut InvalidOptionsError) -> Option } } -// May panic if we can't open the file - this is anticipated, we can't currently communicate this -// kind of error: TODO: fix this architecture :) -pub fn writer_from_opts(flag: bool, arg: &str) -> Box { - if !flag || arg == "-" { - Box::new(stdout()) - } else { - Box::new(fs::OpenOptions::new().create(true).write(true).open(arg).unwrap()) +pub fn writer_from_opts(arg: Option<&str>) -> Result, io::Error> { + let f = arg.unwrap_or("-"); + match f { + "-" => Ok(Box::new(stdout())), + _ => match fs::OpenOptions::new().create(true).write(true).open(f) { + Ok(f) => Ok(Box::new(f)), + Err(io_err) => Err(io_err), + } } } @@ -151,7 +204,7 @@ pub fn arg_from_str(arg: &str, err: &mut InvalidOptionsError, match FromStr::from_str(arg) { Err(perr) => { err.issues.push( - CLIError::ParseError((arg_name, arg_type, arg.to_string(), format!("{}", perr))) + CLIError::ParseError(arg_name, arg_type, arg.to_string(), format!("{}", perr)) ); Default::default() }, @@ -171,49 +224,47 @@ impl JsonTokenStorage { } impl TokenStorage for JsonTokenStorage { - type Error = io::Error; + type Error = json::Error; // NOTE: logging might be interesting, currently we swallow all errors - fn set(&mut self, scope_hash: u64, _: &Vec<&str>, token: Option) -> Option { + fn set(&mut self, scope_hash: u64, _: &Vec<&str>, token: Option) -> Result<(), json::Error> { match token { None => { match fs::remove_file(self.path(scope_hash)) { Err(err) => match err.kind() { - io::ErrorKind::NotFound => None, - _ => Some(err) + io::ErrorKind::NotFound => Ok(()), + _ => Err(json::Error::IoError(err)) }, - Ok(_) => None + Ok(_) => Ok(()), } } Some(token) => { - let json_token = json::encode(&token).unwrap(); match fs::OpenOptions::new().create(true).write(true).open(&self.path(scope_hash)) { Ok(mut f) => { - match f.write(json_token.as_bytes()) { - Ok(_) => None, - Err(io_err) => Some(io_err), + match json::to_writer_pretty(&mut f, &token) { + Ok(_) => Ok(()), + Err(io_err) => Err(json::Error::IoError(io_err)), } }, - Err(io_err) => Some(io_err) + Err(io_err) => Err(json::Error::IoError(io_err)) } } } } - fn get(&self, scope_hash: u64, _: &Vec<&str>) -> Result, io::Error> { + fn get(&self, scope_hash: u64, _: &Vec<&str>) -> Result, json::Error> { match fs::File::open(&self.path(scope_hash)) { Ok(mut f) => { - let mut json_string = String::new(); - match f.read_to_string(&mut json_string) { - Ok(_) => Ok(Some(json::decode::(&json_string).unwrap())), - Err(io_err) => Err(io_err), + match json::de::from_reader(f) { + Ok(token) => Ok(Some(token)), + Err(err) => Err(err), } }, Err(io_err) => { match io_err.kind() { io::ErrorKind::NotFound => Ok(None), - _ => Err(io_err) + _ => Err(json::Error::IoError(io_err)) } } } @@ -223,7 +274,7 @@ impl TokenStorage for JsonTokenStorage { #[derive(Debug)] pub enum ApplicationSecretError { - DecoderError((String, json::DecoderError)), + DecoderError((String, json::Error)), FormatError(String), } @@ -311,11 +362,14 @@ impl fmt::Display for FieldError { #[derive(Debug)] pub enum CLIError { Configuration(ConfigurationError), - ParseError((&'static str, &'static str, String, String)), + ParseError(&'static str, &'static str, String, String), UnknownParameter(String), + InvalidUploadProtocol(String, Vec), InvalidKeyValueSyntax(String, bool), Input(InputError), Field(FieldError), + MissingCommandError, + MissingMethodError(String), } impl fmt::Display for CLIError { @@ -324,7 +378,9 @@ impl fmt::Display for CLIError { CLIError::Configuration(ref err) => write!(f, "Configuration -> {}", err), CLIError::Input(ref err) => write!(f, "Input -> {}", err), CLIError::Field(ref err) => write!(f, "Field -> {}", err), - CLIError::ParseError((arg_name, type_name, ref value, ref err_desc)) + CLIError::InvalidUploadProtocol(ref proto_name, ref valid_names) + => writeln!(f, "'{}' is not a valid upload protocol. Choose from one of {}", proto_name, valid_names.connect(", ")), + CLIError::ParseError(arg_name, type_name, ref value, ref err_desc) => writeln!(f, "Failed to parse argument '{}' with value '{}' as {} with error: {}", arg_name, value, type_name, err_desc), CLIError::UnknownParameter(ref param_name) @@ -333,6 +389,8 @@ impl fmt::Display for CLIError { let hashmap_info = if is_hashmap { "hashmap " } else { "" }; writeln!(f, "'{}' does not match {}pattern =", kv, hashmap_info) }, + CLIError::MissingCommandError => writeln!(f, "Please specify the main sub-command"), + CLIError::MissingMethodError(ref cmd) => writeln!(f, "Please specify the method to call on the '{}' command", cmd), } } } @@ -399,7 +457,7 @@ pub fn assure_config_dir_exists(dir: &str) -> Result { pub fn application_secret_from_directory(dir: &str, secret_basename: &str, - json_app_secret: &str) + json_console_secret: &str) -> Result { let secret_path = Path::new(dir).join(secret_basename); let secret_str = || secret_path.as_path().to_str().unwrap().to_string(); @@ -418,7 +476,10 @@ pub fn application_secret_from_directory(dir: &str, err = match fs::OpenOptions::new().create(true).write(true).open(&secret_path) { Err(cfe) => cfe, Ok(mut f) => { - match f.write(json_app_secret.as_bytes()) { + // Assure we convert 'ugly' json string into pretty one + let console_secret: ConsoleApplicationSecret + = json::from_str(json_console_secret).unwrap(); + match json::to_writer_pretty(&mut f, &console_secret) { Err(io_err) => io_err, Ok(_) => continue, } @@ -429,23 +490,24 @@ pub fn application_secret_from_directory(dir: &str, return secret_io_error(err) }, Ok(mut f) => { - let mut json_encoded_secret = String::new(); - if let Err(io_err) = f.read_to_string(&mut json_encoded_secret) { - return secret_io_error(io_err) - } - match json::decode::(&json_encoded_secret) { - Err(json_decode_error) => return Err(CLIError::Configuration( - ConfigurationError::Secret(ApplicationSecretError::DecoderError( - (secret_str(), json_decode_error) + match json::de::from_reader::<_, ConsoleApplicationSecret>(f) { + Err(json::Error::IoError(err)) => + return secret_io_error(err), + Err(json_err) => + return Err(CLIError::Configuration( + ConfigurationError::Secret( + ApplicationSecretError::DecoderError( + (secret_str(), json_err) )))), - Ok(console_secret) => match console_secret.installed { - Some(secret) => return Ok(secret), - None => return Err( - CLIError::Configuration( - ConfigurationError::Secret( - ApplicationSecretError::FormatError(secret_str()) - ))) - }, + Ok(console_secret) => + match console_secret.installed { + Some(secret) => return Ok(secret), + None => return Err( + CLIError::Configuration( + ConfigurationError::Secret( + ApplicationSecretError::FormatError(secret_str()) + ))) + }, } } } diff --git a/gen/youtube3-cli/src/main.rs b/gen/youtube3-cli/src/main.rs index e8f594bb4f..5ad380f534 100644 --- a/gen/youtube3-cli/src/main.rs +++ b/gen/youtube3-cli/src/main.rs @@ -7,7 +7,6 @@ extern crate clap; extern crate yup_oauth2 as oauth2; extern crate yup_hyper_mock as mock; -extern crate rustc_serialize; extern crate serde; extern crate hyper; extern crate mime; @@ -17,1616 +16,11389 @@ use std::env; use std::io::{self, Write}; use clap::{App, SubCommand, Arg}; +mod cmn; + +use cmn::{InvalidOptionsError, CLIError, JsonTokenStorage, arg_from_str, writer_from_opts, parse_kv_arg, + input_file_from_opts, input_mime_from_opts, FieldCursor, FieldError, CallType, UploadProtocol, + protocol_from_str}; + +use std::default::Default; +use std::str::FromStr; + +use oauth2::{Authenticator, DefaultAuthenticatorDelegate}; +use serde::json; +use clap::ArgMatches; + +enum DoitError { + IoError(String, io::Error), + ApiError(api::Error), +} + +struct Engine<'n, 'a> { + opt: ArgMatches<'n, 'a>, + hub: api::YouTube>, +} + + +impl<'n, 'a> Engine<'n, 'a> { + fn _activities_insert(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + + let mut request = api::Activity::default(); + let mut field_cursor = FieldCursor::default(); + for kvarg in opt.values_of("kv").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; + } + fn request_content_details_bulletin_init(request: &mut api::Activity) { + request_content_details_init(request); + if request.content_details.as_mut().unwrap().bulletin.is_none() { + request.content_details.as_mut().unwrap().bulletin = Some(Default::default()); + } + } + + fn request_content_details_bulletin_resource_id_init(request: &mut api::Activity) { + request_content_details_bulletin_init(request); + if request.content_details.as_mut().unwrap().bulletin.as_mut().unwrap().resource_id.is_none() { + request.content_details.as_mut().unwrap().bulletin.as_mut().unwrap().resource_id = Some(Default::default()); + } + } + + fn request_content_details_channel_item_init(request: &mut api::Activity) { + request_content_details_init(request); + if request.content_details.as_mut().unwrap().channel_item.is_none() { + request.content_details.as_mut().unwrap().channel_item = Some(Default::default()); + } + } + + fn request_content_details_channel_item_resource_id_init(request: &mut api::Activity) { + request_content_details_channel_item_init(request); + if request.content_details.as_mut().unwrap().channel_item.as_mut().unwrap().resource_id.is_none() { + request.content_details.as_mut().unwrap().channel_item.as_mut().unwrap().resource_id = Some(Default::default()); + } + } + + fn request_content_details_comment_init(request: &mut api::Activity) { + request_content_details_init(request); + if request.content_details.as_mut().unwrap().comment.is_none() { + request.content_details.as_mut().unwrap().comment = Some(Default::default()); + } + } + + fn request_content_details_comment_resource_id_init(request: &mut api::Activity) { + request_content_details_comment_init(request); + if request.content_details.as_mut().unwrap().comment.as_mut().unwrap().resource_id.is_none() { + request.content_details.as_mut().unwrap().comment.as_mut().unwrap().resource_id = Some(Default::default()); + } + } + + fn request_content_details_favorite_init(request: &mut api::Activity) { + request_content_details_init(request); + if request.content_details.as_mut().unwrap().favorite.is_none() { + request.content_details.as_mut().unwrap().favorite = Some(Default::default()); + } + } + + fn request_content_details_favorite_resource_id_init(request: &mut api::Activity) { + request_content_details_favorite_init(request); + if request.content_details.as_mut().unwrap().favorite.as_mut().unwrap().resource_id.is_none() { + request.content_details.as_mut().unwrap().favorite.as_mut().unwrap().resource_id = Some(Default::default()); + } + } + + fn request_content_details_init(request: &mut api::Activity) { + if request.content_details.is_none() { + request.content_details = Some(Default::default()); + } + } + + fn request_content_details_like_init(request: &mut api::Activity) { + request_content_details_init(request); + if request.content_details.as_mut().unwrap().like.is_none() { + request.content_details.as_mut().unwrap().like = Some(Default::default()); + } + } + + fn request_content_details_like_resource_id_init(request: &mut api::Activity) { + request_content_details_like_init(request); + if request.content_details.as_mut().unwrap().like.as_mut().unwrap().resource_id.is_none() { + request.content_details.as_mut().unwrap().like.as_mut().unwrap().resource_id = Some(Default::default()); + } + } + + fn request_content_details_playlist_item_init(request: &mut api::Activity) { + request_content_details_init(request); + if request.content_details.as_mut().unwrap().playlist_item.is_none() { + request.content_details.as_mut().unwrap().playlist_item = Some(Default::default()); + } + } + + fn request_content_details_playlist_item_resource_id_init(request: &mut api::Activity) { + request_content_details_playlist_item_init(request); + if request.content_details.as_mut().unwrap().playlist_item.as_mut().unwrap().resource_id.is_none() { + request.content_details.as_mut().unwrap().playlist_item.as_mut().unwrap().resource_id = Some(Default::default()); + } + } + + fn request_content_details_promoted_item_init(request: &mut api::Activity) { + request_content_details_init(request); + if request.content_details.as_mut().unwrap().promoted_item.is_none() { + request.content_details.as_mut().unwrap().promoted_item = Some(Default::default()); + } + } + + fn request_content_details_recommendation_init(request: &mut api::Activity) { + request_content_details_init(request); + if request.content_details.as_mut().unwrap().recommendation.is_none() { + request.content_details.as_mut().unwrap().recommendation = Some(Default::default()); + } + } + + fn request_content_details_recommendation_resource_id_init(request: &mut api::Activity) { + request_content_details_recommendation_init(request); + if request.content_details.as_mut().unwrap().recommendation.as_mut().unwrap().resource_id.is_none() { + request.content_details.as_mut().unwrap().recommendation.as_mut().unwrap().resource_id = Some(Default::default()); + } + } + + fn request_content_details_recommendation_seed_resource_id_init(request: &mut api::Activity) { + request_content_details_recommendation_init(request); + if request.content_details.as_mut().unwrap().recommendation.as_mut().unwrap().seed_resource_id.is_none() { + request.content_details.as_mut().unwrap().recommendation.as_mut().unwrap().seed_resource_id = Some(Default::default()); + } + } + + fn request_content_details_social_init(request: &mut api::Activity) { + request_content_details_init(request); + if request.content_details.as_mut().unwrap().social.is_none() { + request.content_details.as_mut().unwrap().social = Some(Default::default()); + } + } + + fn request_content_details_social_resource_id_init(request: &mut api::Activity) { + request_content_details_social_init(request); + if request.content_details.as_mut().unwrap().social.as_mut().unwrap().resource_id.is_none() { + request.content_details.as_mut().unwrap().social.as_mut().unwrap().resource_id = Some(Default::default()); + } + } + + fn request_content_details_subscription_init(request: &mut api::Activity) { + request_content_details_init(request); + if request.content_details.as_mut().unwrap().subscription.is_none() { + request.content_details.as_mut().unwrap().subscription = Some(Default::default()); + } + } + + fn request_content_details_subscription_resource_id_init(request: &mut api::Activity) { + request_content_details_subscription_init(request); + if request.content_details.as_mut().unwrap().subscription.as_mut().unwrap().resource_id.is_none() { + request.content_details.as_mut().unwrap().subscription.as_mut().unwrap().resource_id = Some(Default::default()); + } + } + + fn request_content_details_upload_init(request: &mut api::Activity) { + request_content_details_init(request); + if request.content_details.as_mut().unwrap().upload.is_none() { + request.content_details.as_mut().unwrap().upload = Some(Default::default()); + } + } + + fn request_snippet_init(request: &mut api::Activity) { + if request.snippet.is_none() { + request.snippet = Some(Default::default()); + } + } + + fn request_snippet_thumbnails_default_init(request: &mut api::Activity) { + request_snippet_thumbnails_init(request); + if request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().default.is_none() { + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().default = Some(Default::default()); + } + } + + fn request_snippet_thumbnails_high_init(request: &mut api::Activity) { + request_snippet_thumbnails_init(request); + if request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().high.is_none() { + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().high = Some(Default::default()); + } + } + + fn request_snippet_thumbnails_init(request: &mut api::Activity) { + request_snippet_init(request); + if request.snippet.as_mut().unwrap().thumbnails.is_none() { + request.snippet.as_mut().unwrap().thumbnails = Some(Default::default()); + } + } + + fn request_snippet_thumbnails_maxres_init(request: &mut api::Activity) { + request_snippet_thumbnails_init(request); + if request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().maxres.is_none() { + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().maxres = Some(Default::default()); + } + } + + fn request_snippet_thumbnails_medium_init(request: &mut api::Activity) { + request_snippet_thumbnails_init(request); + if request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().medium.is_none() { + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().medium = Some(Default::default()); + } + } + + fn request_snippet_thumbnails_standard_init(request: &mut api::Activity) { + request_snippet_thumbnails_init(request); + if request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().standard.is_none() { + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().standard = Some(Default::default()); + } + } + + match &temp_cursor.to_string()[..] { + "snippet.thumbnails.default.url" => { + request_snippet_thumbnails_default_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().default.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); + }, + "snippet.thumbnails.default.width" => { + request_snippet_thumbnails_default_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().default.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.default.width", "integer")); + }, + "snippet.thumbnails.default.height" => { + request_snippet_thumbnails_default_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().default.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.default.height", "integer")); + }, + "snippet.thumbnails.high.url" => { + request_snippet_thumbnails_high_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().high.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); + }, + "snippet.thumbnails.high.width" => { + request_snippet_thumbnails_high_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().high.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.high.width", "integer")); + }, + "snippet.thumbnails.high.height" => { + request_snippet_thumbnails_high_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().high.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.high.height", "integer")); + }, + "snippet.thumbnails.medium.url" => { + request_snippet_thumbnails_medium_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().medium.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); + }, + "snippet.thumbnails.medium.width" => { + request_snippet_thumbnails_medium_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().medium.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.medium.width", "integer")); + }, + "snippet.thumbnails.medium.height" => { + request_snippet_thumbnails_medium_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().medium.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.medium.height", "integer")); + }, + "snippet.thumbnails.maxres.url" => { + request_snippet_thumbnails_maxres_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().maxres.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); + }, + "snippet.thumbnails.maxres.width" => { + request_snippet_thumbnails_maxres_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().maxres.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.maxres.width", "integer")); + }, + "snippet.thumbnails.maxres.height" => { + request_snippet_thumbnails_maxres_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().maxres.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.maxres.height", "integer")); + }, + "snippet.thumbnails.standard.url" => { + request_snippet_thumbnails_standard_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().standard.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); + }, + "snippet.thumbnails.standard.width" => { + request_snippet_thumbnails_standard_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().standard.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.standard.width", "integer")); + }, + "snippet.thumbnails.standard.height" => { + request_snippet_thumbnails_standard_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().standard.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.standard.height", "integer")); + }, + "snippet.title" => { + request_snippet_thumbnails_init(&mut request); + request.snippet.as_mut().unwrap().title = Some(value.unwrap_or("").to_string()); + }, + "snippet.channel-id" => { + request_snippet_thumbnails_init(&mut request); + request.snippet.as_mut().unwrap().channel_id = Some(value.unwrap_or("").to_string()); + }, + "snippet.published-at" => { + request_snippet_thumbnails_init(&mut request); + request.snippet.as_mut().unwrap().published_at = Some(value.unwrap_or("").to_string()); + }, + "snippet.channel-title" => { + request_snippet_thumbnails_init(&mut request); + request.snippet.as_mut().unwrap().channel_title = Some(value.unwrap_or("").to_string()); + }, + "snippet.type" => { + request_snippet_thumbnails_init(&mut request); + request.snippet.as_mut().unwrap().type_ = Some(value.unwrap_or("").to_string()); + }, + "snippet.group-id" => { + request_snippet_thumbnails_init(&mut request); + request.snippet.as_mut().unwrap().group_id = Some(value.unwrap_or("").to_string()); + }, + "snippet.description" => { + request_snippet_thumbnails_init(&mut request); + request.snippet.as_mut().unwrap().description = Some(value.unwrap_or("").to_string()); + }, + "content-details.comment.resource-id.kind" => { + request_content_details_comment_resource_id_init(&mut request); + request.content_details.as_mut().unwrap().comment.as_mut().unwrap().resource_id.as_mut().unwrap().kind = Some(value.unwrap_or("").to_string()); + }, + "content-details.comment.resource-id.channel-id" => { + request_content_details_comment_resource_id_init(&mut request); + request.content_details.as_mut().unwrap().comment.as_mut().unwrap().resource_id.as_mut().unwrap().channel_id = Some(value.unwrap_or("").to_string()); + }, + "content-details.comment.resource-id.playlist-id" => { + request_content_details_comment_resource_id_init(&mut request); + request.content_details.as_mut().unwrap().comment.as_mut().unwrap().resource_id.as_mut().unwrap().playlist_id = Some(value.unwrap_or("").to_string()); + }, + "content-details.comment.resource-id.video-id" => { + request_content_details_comment_resource_id_init(&mut request); + request.content_details.as_mut().unwrap().comment.as_mut().unwrap().resource_id.as_mut().unwrap().video_id = Some(value.unwrap_or("").to_string()); + }, + "content-details.playlist-item.resource-id.kind" => { + request_content_details_playlist_item_resource_id_init(&mut request); + request.content_details.as_mut().unwrap().playlist_item.as_mut().unwrap().resource_id.as_mut().unwrap().kind = Some(value.unwrap_or("").to_string()); + }, + "content-details.playlist-item.resource-id.channel-id" => { + request_content_details_playlist_item_resource_id_init(&mut request); + request.content_details.as_mut().unwrap().playlist_item.as_mut().unwrap().resource_id.as_mut().unwrap().channel_id = Some(value.unwrap_or("").to_string()); + }, + "content-details.playlist-item.resource-id.playlist-id" => { + request_content_details_playlist_item_resource_id_init(&mut request); + request.content_details.as_mut().unwrap().playlist_item.as_mut().unwrap().resource_id.as_mut().unwrap().playlist_id = Some(value.unwrap_or("").to_string()); + }, + "content-details.playlist-item.resource-id.video-id" => { + request_content_details_playlist_item_resource_id_init(&mut request); + request.content_details.as_mut().unwrap().playlist_item.as_mut().unwrap().resource_id.as_mut().unwrap().video_id = Some(value.unwrap_or("").to_string()); + }, + "content-details.playlist-item.playlist-id" => { + request_content_details_playlist_item_resource_id_init(&mut request); + request.content_details.as_mut().unwrap().playlist_item.as_mut().unwrap().playlist_id = Some(value.unwrap_or("").to_string()); + }, + "content-details.playlist-item.playlist-item-id" => { + request_content_details_playlist_item_resource_id_init(&mut request); + request.content_details.as_mut().unwrap().playlist_item.as_mut().unwrap().playlist_item_id = Some(value.unwrap_or("").to_string()); + }, + "content-details.like.resource-id.kind" => { + request_content_details_like_resource_id_init(&mut request); + request.content_details.as_mut().unwrap().like.as_mut().unwrap().resource_id.as_mut().unwrap().kind = Some(value.unwrap_or("").to_string()); + }, + "content-details.like.resource-id.channel-id" => { + request_content_details_like_resource_id_init(&mut request); + request.content_details.as_mut().unwrap().like.as_mut().unwrap().resource_id.as_mut().unwrap().channel_id = Some(value.unwrap_or("").to_string()); + }, + "content-details.like.resource-id.playlist-id" => { + request_content_details_like_resource_id_init(&mut request); + request.content_details.as_mut().unwrap().like.as_mut().unwrap().resource_id.as_mut().unwrap().playlist_id = Some(value.unwrap_or("").to_string()); + }, + "content-details.like.resource-id.video-id" => { + request_content_details_like_resource_id_init(&mut request); + request.content_details.as_mut().unwrap().like.as_mut().unwrap().resource_id.as_mut().unwrap().video_id = Some(value.unwrap_or("").to_string()); + }, + "content-details.promoted-item.cta-type" => { + request_content_details_promoted_item_init(&mut request); + request.content_details.as_mut().unwrap().promoted_item.as_mut().unwrap().cta_type = Some(value.unwrap_or("").to_string()); + }, + "content-details.promoted-item.ad-tag" => { + request_content_details_promoted_item_init(&mut request); + request.content_details.as_mut().unwrap().promoted_item.as_mut().unwrap().ad_tag = Some(value.unwrap_or("").to_string()); + }, + "content-details.promoted-item.destination-url" => { + request_content_details_promoted_item_init(&mut request); + request.content_details.as_mut().unwrap().promoted_item.as_mut().unwrap().destination_url = Some(value.unwrap_or("").to_string()); + }, + "content-details.promoted-item.forecasting-url" => { + request_content_details_promoted_item_init(&mut request); + if request.content_details.as_mut().unwrap().promoted_item.as_mut().unwrap().forecasting_url.is_none() { + request.content_details.as_mut().unwrap().promoted_item.as_mut().unwrap().forecasting_url = Some(Default::default()); + } + request.content_details.as_mut().unwrap().promoted_item.as_mut().unwrap().forecasting_url.as_mut().unwrap().push(value.unwrap_or("").to_string()); + }, + "content-details.promoted-item.impression-url" => { + request_content_details_promoted_item_init(&mut request); + if request.content_details.as_mut().unwrap().promoted_item.as_mut().unwrap().impression_url.is_none() { + request.content_details.as_mut().unwrap().promoted_item.as_mut().unwrap().impression_url = Some(Default::default()); + } + request.content_details.as_mut().unwrap().promoted_item.as_mut().unwrap().impression_url.as_mut().unwrap().push(value.unwrap_or("").to_string()); + }, + "content-details.promoted-item.creative-view-url" => { + request_content_details_promoted_item_init(&mut request); + request.content_details.as_mut().unwrap().promoted_item.as_mut().unwrap().creative_view_url = Some(value.unwrap_or("").to_string()); + }, + "content-details.promoted-item.video-id" => { + request_content_details_promoted_item_init(&mut request); + request.content_details.as_mut().unwrap().promoted_item.as_mut().unwrap().video_id = Some(value.unwrap_or("").to_string()); + }, + "content-details.promoted-item.description-text" => { + request_content_details_promoted_item_init(&mut request); + request.content_details.as_mut().unwrap().promoted_item.as_mut().unwrap().description_text = Some(value.unwrap_or("").to_string()); + }, + "content-details.promoted-item.custom-cta-button-text" => { + request_content_details_promoted_item_init(&mut request); + request.content_details.as_mut().unwrap().promoted_item.as_mut().unwrap().custom_cta_button_text = Some(value.unwrap_or("").to_string()); + }, + "content-details.promoted-item.click-tracking-url" => { + request_content_details_promoted_item_init(&mut request); + request.content_details.as_mut().unwrap().promoted_item.as_mut().unwrap().click_tracking_url = Some(value.unwrap_or("").to_string()); + }, + "content-details.social.resource-id.kind" => { + request_content_details_social_resource_id_init(&mut request); + request.content_details.as_mut().unwrap().social.as_mut().unwrap().resource_id.as_mut().unwrap().kind = Some(value.unwrap_or("").to_string()); + }, + "content-details.social.resource-id.channel-id" => { + request_content_details_social_resource_id_init(&mut request); + request.content_details.as_mut().unwrap().social.as_mut().unwrap().resource_id.as_mut().unwrap().channel_id = Some(value.unwrap_or("").to_string()); + }, + "content-details.social.resource-id.playlist-id" => { + request_content_details_social_resource_id_init(&mut request); + request.content_details.as_mut().unwrap().social.as_mut().unwrap().resource_id.as_mut().unwrap().playlist_id = Some(value.unwrap_or("").to_string()); + }, + "content-details.social.resource-id.video-id" => { + request_content_details_social_resource_id_init(&mut request); + request.content_details.as_mut().unwrap().social.as_mut().unwrap().resource_id.as_mut().unwrap().video_id = Some(value.unwrap_or("").to_string()); + }, + "content-details.social.image-url" => { + request_content_details_social_resource_id_init(&mut request); + request.content_details.as_mut().unwrap().social.as_mut().unwrap().image_url = Some(value.unwrap_or("").to_string()); + }, + "content-details.social.type" => { + request_content_details_social_resource_id_init(&mut request); + request.content_details.as_mut().unwrap().social.as_mut().unwrap().type_ = Some(value.unwrap_or("").to_string()); + }, + "content-details.social.reference-url" => { + request_content_details_social_resource_id_init(&mut request); + request.content_details.as_mut().unwrap().social.as_mut().unwrap().reference_url = Some(value.unwrap_or("").to_string()); + }, + "content-details.social.author" => { + request_content_details_social_resource_id_init(&mut request); + request.content_details.as_mut().unwrap().social.as_mut().unwrap().author = Some(value.unwrap_or("").to_string()); + }, + "content-details.favorite.resource-id.kind" => { + request_content_details_favorite_resource_id_init(&mut request); + request.content_details.as_mut().unwrap().favorite.as_mut().unwrap().resource_id.as_mut().unwrap().kind = Some(value.unwrap_or("").to_string()); + }, + "content-details.favorite.resource-id.channel-id" => { + request_content_details_favorite_resource_id_init(&mut request); + request.content_details.as_mut().unwrap().favorite.as_mut().unwrap().resource_id.as_mut().unwrap().channel_id = Some(value.unwrap_or("").to_string()); + }, + "content-details.favorite.resource-id.playlist-id" => { + request_content_details_favorite_resource_id_init(&mut request); + request.content_details.as_mut().unwrap().favorite.as_mut().unwrap().resource_id.as_mut().unwrap().playlist_id = Some(value.unwrap_or("").to_string()); + }, + "content-details.favorite.resource-id.video-id" => { + request_content_details_favorite_resource_id_init(&mut request); + request.content_details.as_mut().unwrap().favorite.as_mut().unwrap().resource_id.as_mut().unwrap().video_id = Some(value.unwrap_or("").to_string()); + }, + "content-details.upload.video-id" => { + request_content_details_upload_init(&mut request); + request.content_details.as_mut().unwrap().upload.as_mut().unwrap().video_id = Some(value.unwrap_or("").to_string()); + }, + "content-details.recommendation.resource-id.kind" => { + request_content_details_recommendation_resource_id_init(&mut request); + request.content_details.as_mut().unwrap().recommendation.as_mut().unwrap().resource_id.as_mut().unwrap().kind = Some(value.unwrap_or("").to_string()); + }, + "content-details.recommendation.resource-id.channel-id" => { + request_content_details_recommendation_resource_id_init(&mut request); + request.content_details.as_mut().unwrap().recommendation.as_mut().unwrap().resource_id.as_mut().unwrap().channel_id = Some(value.unwrap_or("").to_string()); + }, + "content-details.recommendation.resource-id.playlist-id" => { + request_content_details_recommendation_resource_id_init(&mut request); + request.content_details.as_mut().unwrap().recommendation.as_mut().unwrap().resource_id.as_mut().unwrap().playlist_id = Some(value.unwrap_or("").to_string()); + }, + "content-details.recommendation.resource-id.video-id" => { + request_content_details_recommendation_resource_id_init(&mut request); + request.content_details.as_mut().unwrap().recommendation.as_mut().unwrap().resource_id.as_mut().unwrap().video_id = Some(value.unwrap_or("").to_string()); + }, + "content-details.recommendation.reason" => { + request_content_details_recommendation_resource_id_init(&mut request); + request.content_details.as_mut().unwrap().recommendation.as_mut().unwrap().reason = Some(value.unwrap_or("").to_string()); + }, + "content-details.recommendation.seed-resource-id.kind" => { + request_content_details_recommendation_seed_resource_id_init(&mut request); + request.content_details.as_mut().unwrap().recommendation.as_mut().unwrap().seed_resource_id.as_mut().unwrap().kind = Some(value.unwrap_or("").to_string()); + }, + "content-details.recommendation.seed-resource-id.channel-id" => { + request_content_details_recommendation_seed_resource_id_init(&mut request); + request.content_details.as_mut().unwrap().recommendation.as_mut().unwrap().seed_resource_id.as_mut().unwrap().channel_id = Some(value.unwrap_or("").to_string()); + }, + "content-details.recommendation.seed-resource-id.playlist-id" => { + request_content_details_recommendation_seed_resource_id_init(&mut request); + request.content_details.as_mut().unwrap().recommendation.as_mut().unwrap().seed_resource_id.as_mut().unwrap().playlist_id = Some(value.unwrap_or("").to_string()); + }, + "content-details.recommendation.seed-resource-id.video-id" => { + request_content_details_recommendation_seed_resource_id_init(&mut request); + request.content_details.as_mut().unwrap().recommendation.as_mut().unwrap().seed_resource_id.as_mut().unwrap().video_id = Some(value.unwrap_or("").to_string()); + }, + "content-details.subscription.resource-id.kind" => { + request_content_details_subscription_resource_id_init(&mut request); + request.content_details.as_mut().unwrap().subscription.as_mut().unwrap().resource_id.as_mut().unwrap().kind = Some(value.unwrap_or("").to_string()); + }, + "content-details.subscription.resource-id.channel-id" => { + request_content_details_subscription_resource_id_init(&mut request); + request.content_details.as_mut().unwrap().subscription.as_mut().unwrap().resource_id.as_mut().unwrap().channel_id = Some(value.unwrap_or("").to_string()); + }, + "content-details.subscription.resource-id.playlist-id" => { + request_content_details_subscription_resource_id_init(&mut request); + request.content_details.as_mut().unwrap().subscription.as_mut().unwrap().resource_id.as_mut().unwrap().playlist_id = Some(value.unwrap_or("").to_string()); + }, + "content-details.subscription.resource-id.video-id" => { + request_content_details_subscription_resource_id_init(&mut request); + request.content_details.as_mut().unwrap().subscription.as_mut().unwrap().resource_id.as_mut().unwrap().video_id = Some(value.unwrap_or("").to_string()); + }, + "content-details.bulletin.resource-id.kind" => { + request_content_details_bulletin_resource_id_init(&mut request); + request.content_details.as_mut().unwrap().bulletin.as_mut().unwrap().resource_id.as_mut().unwrap().kind = Some(value.unwrap_or("").to_string()); + }, + "content-details.bulletin.resource-id.channel-id" => { + request_content_details_bulletin_resource_id_init(&mut request); + request.content_details.as_mut().unwrap().bulletin.as_mut().unwrap().resource_id.as_mut().unwrap().channel_id = Some(value.unwrap_or("").to_string()); + }, + "content-details.bulletin.resource-id.playlist-id" => { + request_content_details_bulletin_resource_id_init(&mut request); + request.content_details.as_mut().unwrap().bulletin.as_mut().unwrap().resource_id.as_mut().unwrap().playlist_id = Some(value.unwrap_or("").to_string()); + }, + "content-details.bulletin.resource-id.video-id" => { + request_content_details_bulletin_resource_id_init(&mut request); + request.content_details.as_mut().unwrap().bulletin.as_mut().unwrap().resource_id.as_mut().unwrap().video_id = Some(value.unwrap_or("").to_string()); + }, + "content-details.channel-item.resource-id.kind" => { + request_content_details_channel_item_resource_id_init(&mut request); + request.content_details.as_mut().unwrap().channel_item.as_mut().unwrap().resource_id.as_mut().unwrap().kind = Some(value.unwrap_or("").to_string()); + }, + "content-details.channel-item.resource-id.channel-id" => { + request_content_details_channel_item_resource_id_init(&mut request); + request.content_details.as_mut().unwrap().channel_item.as_mut().unwrap().resource_id.as_mut().unwrap().channel_id = Some(value.unwrap_or("").to_string()); + }, + "content-details.channel-item.resource-id.playlist-id" => { + request_content_details_channel_item_resource_id_init(&mut request); + request.content_details.as_mut().unwrap().channel_item.as_mut().unwrap().resource_id.as_mut().unwrap().playlist_id = Some(value.unwrap_or("").to_string()); + }, + "content-details.channel-item.resource-id.video-id" => { + request_content_details_channel_item_resource_id_init(&mut request); + request.content_details.as_mut().unwrap().channel_item.as_mut().unwrap().resource_id.as_mut().unwrap().video_id = Some(value.unwrap_or("").to_string()); + }, + "kind" => { + request_content_details_init(&mut request); + request.kind = Some(value.unwrap_or("").to_string()); + }, + "etag" => { + request_content_details_init(&mut request); + request.etag = Some(value.unwrap_or("").to_string()); + }, + "id" => { + request_content_details_init(&mut request); + request.id = Some(value.unwrap_or("").to_string()); + }, + _ => { + err.issues.push(CLIError::Field(FieldError::Unknown(temp_cursor.to_string()))); + } + } + } + let mut call = self.hub.activities().insert(request); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { + let (key, value) = parse_kv_arg(&*parg, err, false); + match key { + "alt" + |"fields" + |"key" + |"oauth-token" + |"pretty-print" + |"quota-user" + |"user-ip" => { + let map = [ + ("oauth-token", "oauth_token"), + ("pretty-print", "prettyPrint"), + ("quota-user", "quotaUser"), + ("user-ip", "userIp"), + ]; + call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) + }, + _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), + } + } + let protocol = CallType::Standard; + if dry_run { + Ok(()) + } else { + assert!(err.issues.len() == 0); + for scope in self.opt.values_of("url").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(), + _ => unreachable!() + } { + Err(api_err) => Err(DoitError::ApiError(api_err)), + Ok((mut response, output_schema)) => { + serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); + Ok(()) + } + } + } + } + + fn _activities_list(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + let mut call = self.hub.activities().list(opt.value_of("part").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { + let (key, value) = parse_kv_arg(&*parg, err, false); + match key { + "region-code" => { + call = call.region_code(value.unwrap_or("")); + }, + "published-before" => { + call = call.published_before(value.unwrap_or("")); + }, + "published-after" => { + call = call.published_after(value.unwrap_or("")); + }, + "page-token" => { + call = call.page_token(value.unwrap_or("")); + }, + "mine" => { + call = call.mine(arg_from_str(value.unwrap_or("false"), err, "mine", "boolean")); + }, + "max-results" => { + call = call.max_results(arg_from_str(value.unwrap_or("-0"), err, "max-results", "integer")); + }, + "home" => { + call = call.home(arg_from_str(value.unwrap_or("false"), err, "home", "boolean")); + }, + "channel-id" => { + call = call.channel_id(value.unwrap_or("")); + }, + "alt" + |"fields" + |"key" + |"oauth-token" + |"pretty-print" + |"quota-user" + |"user-ip" => { + let map = [ + ("oauth-token", "oauth_token"), + ("pretty-print", "prettyPrint"), + ("quota-user", "quotaUser"), + ("user-ip", "userIp"), + ]; + call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) + }, + _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), + } + } + let protocol = CallType::Standard; + if dry_run { + Ok(()) + } else { + assert!(err.issues.len() == 0); + for scope in self.opt.values_of("url").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(), + _ => unreachable!() + } { + Err(api_err) => Err(DoitError::ApiError(api_err)), + Ok((mut response, output_schema)) => { + serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); + Ok(()) + } + } + } + } + + fn _captions_delete(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + let mut call = self.hub.captions().delete(opt.value_of("id").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { + let (key, value) = parse_kv_arg(&*parg, err, false); + match key { + "on-behalf-of" => { + call = call.on_behalf_of(value.unwrap_or("")); + }, + "debug-project-id-override" => { + call = call.debug_project_id_override(value.unwrap_or("")); + }, + "alt" + |"fields" + |"key" + |"oauth-token" + |"pretty-print" + |"quota-user" + |"user-ip" => { + let map = [ + ("oauth-token", "oauth_token"), + ("pretty-print", "prettyPrint"), + ("quota-user", "quotaUser"), + ("user-ip", "userIp"), + ]; + call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) + }, + _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), + } + } + let protocol = CallType::Standard; + if dry_run { + Ok(()) + } else { + assert!(err.issues.len() == 0); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); + } + match match protocol { + CallType::Standard => call.doit(), + _ => unreachable!() + } { + Err(api_err) => Err(DoitError::ApiError(api_err)), + Ok(mut response) => { + Ok(()) + } + } + } + } + + fn _captions_download(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + let mut download_mode = false; + let mut call = self.hub.captions().download(opt.value_of("id").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { + let (key, value) = parse_kv_arg(&*parg, err, false); + match key { + "tlang" => { + call = call.tlang(value.unwrap_or("")); + }, + "tfmt" => { + call = call.tfmt(value.unwrap_or("")); + }, + "on-behalf-of" => { + call = call.on_behalf_of(value.unwrap_or("")); + }, + "debug-project-id-override" => { + call = call.debug_project_id_override(value.unwrap_or("")); + }, + "alt" + |"fields" + |"key" + |"oauth-token" + |"pretty-print" + |"quota-user" + |"user-ip" => { + if key == "alt" && value.unwrap_or("unset") == "media" { + download_mode = true; + } + let map = [ + ("oauth-token", "oauth_token"), + ("pretty-print", "prettyPrint"), + ("quota-user", "quotaUser"), + ("user-ip", "userIp"), + ]; + call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) + }, + _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), + } + } + let protocol = CallType::Standard; + if dry_run { + Ok(()) + } else { + assert!(err.issues.len() == 0); + for scope in self.opt.values_of("url").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(), + _ => unreachable!() + } { + Err(api_err) => Err(DoitError::ApiError(api_err)), + Ok(mut response) => { + if !download_mode { + } else { + io::copy(&mut response, &mut ostream).unwrap(); + } + Ok(()) + } + } + } + } + + fn _captions_insert(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + + let mut request = api::Caption::default(); + let mut field_cursor = FieldCursor::default(); + for kvarg in opt.values_of("kv").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; + } + fn request_snippet_init(request: &mut api::Caption) { + if request.snippet.is_none() { + request.snippet = Some(Default::default()); + } + } + + match &temp_cursor.to_string()[..] { + "snippet.status" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().status = Some(value.unwrap_or("").to_string()); + }, + "snippet.audio-track-type" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().audio_track_type = Some(value.unwrap_or("").to_string()); + }, + "snippet.language" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().language = Some(value.unwrap_or("").to_string()); + }, + "snippet.name" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().name = Some(value.unwrap_or("").to_string()); + }, + "snippet.video-id" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().video_id = Some(value.unwrap_or("").to_string()); + }, + "snippet.is-draft" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().is_draft = Some(arg_from_str(value.unwrap_or("false"), err, "snippet.is-draft", "boolean")); + }, + "snippet.is-auto-synced" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().is_auto_synced = Some(arg_from_str(value.unwrap_or("false"), err, "snippet.is-auto-synced", "boolean")); + }, + "snippet.track-kind" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().track_kind = Some(value.unwrap_or("").to_string()); + }, + "snippet.last-updated" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().last_updated = Some(value.unwrap_or("").to_string()); + }, + "snippet.is-cc" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().is_cc = Some(arg_from_str(value.unwrap_or("false"), err, "snippet.is-cc", "boolean")); + }, + "snippet.is-easy-reader" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().is_easy_reader = Some(arg_from_str(value.unwrap_or("false"), err, "snippet.is-easy-reader", "boolean")); + }, + "snippet.is-large" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().is_large = Some(arg_from_str(value.unwrap_or("false"), err, "snippet.is-large", "boolean")); + }, + "snippet.failure-reason" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().failure_reason = Some(value.unwrap_or("").to_string()); + }, + "kind" => { + request_snippet_init(&mut request); + request.kind = Some(value.unwrap_or("").to_string()); + }, + "etag" => { + request_snippet_init(&mut request); + request.etag = Some(value.unwrap_or("").to_string()); + }, + "id" => { + request_snippet_init(&mut request); + request.id = Some(value.unwrap_or("").to_string()); + }, + _ => { + err.issues.push(CLIError::Field(FieldError::Unknown(temp_cursor.to_string()))); + } + } + } + let mut call = self.hub.captions().insert(request); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { + let (key, value) = parse_kv_arg(&*parg, err, false); + match key { + "sync" => { + call = call.sync(arg_from_str(value.unwrap_or("false"), err, "sync", "boolean")); + }, + "on-behalf-of" => { + call = call.on_behalf_of(value.unwrap_or("")); + }, + "debug-project-id-override" => { + call = call.debug_project_id_override(value.unwrap_or("")); + }, + "alt" + |"fields" + |"key" + |"oauth-token" + |"pretty-print" + |"quota-user" + |"user-ip" => { + let map = [ + ("oauth-token", "oauth_token"), + ("pretty-print", "prettyPrint"), + ("quota-user", "quotaUser"), + ("user-ip", "userIp"), + ]; + call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) + }, + _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), + } + } + let vals = opt.values_of("mode").unwrap(); + let protocol = protocol_from_str(vals[0], ["simple", "resumable"].iter().map(|&v| v.to_string()).collect(), err); + let mut input_file = input_file_from_opts(vals[1], err); + let mime_type = input_mime_from_opts(opt.value_of("mime").unwrap_or("application/octet-stream"), err); + if dry_run { + Ok(()) + } else { + assert!(err.issues.len() == 0); + for scope in self.opt.values_of("url").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::Upload(UploadProtocol::Simple) => call.upload(input_file.unwrap(), mime_type.unwrap()), + CallType::Upload(UploadProtocol::Resumable) => call.upload_resumable(input_file.unwrap(), mime_type.unwrap()), + CallType::Standard => unreachable!() + } { + Err(api_err) => Err(DoitError::ApiError(api_err)), + Ok((mut response, output_schema)) => { + serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); + Ok(()) + } + } + } + } + + fn _captions_list(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + let mut call = self.hub.captions().list(opt.value_of("part").unwrap_or(""), opt.value_of("video-id").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { + let (key, value) = parse_kv_arg(&*parg, err, false); + match key { + "on-behalf-of" => { + call = call.on_behalf_of(value.unwrap_or("")); + }, + "id" => { + call = call.id(value.unwrap_or("")); + }, + "debug-project-id-override" => { + call = call.debug_project_id_override(value.unwrap_or("")); + }, + "alt" + |"fields" + |"key" + |"oauth-token" + |"pretty-print" + |"quota-user" + |"user-ip" => { + let map = [ + ("oauth-token", "oauth_token"), + ("pretty-print", "prettyPrint"), + ("quota-user", "quotaUser"), + ("user-ip", "userIp"), + ]; + call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) + }, + _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), + } + } + let protocol = CallType::Standard; + if dry_run { + Ok(()) + } else { + assert!(err.issues.len() == 0); + for scope in self.opt.values_of("url").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(), + _ => unreachable!() + } { + Err(api_err) => Err(DoitError::ApiError(api_err)), + Ok((mut response, output_schema)) => { + serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); + Ok(()) + } + } + } + } + + fn _captions_update(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + + let mut request = api::Caption::default(); + let mut field_cursor = FieldCursor::default(); + for kvarg in opt.values_of("kv").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; + } + fn request_snippet_init(request: &mut api::Caption) { + if request.snippet.is_none() { + request.snippet = Some(Default::default()); + } + } + + match &temp_cursor.to_string()[..] { + "snippet.status" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().status = Some(value.unwrap_or("").to_string()); + }, + "snippet.audio-track-type" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().audio_track_type = Some(value.unwrap_or("").to_string()); + }, + "snippet.language" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().language = Some(value.unwrap_or("").to_string()); + }, + "snippet.name" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().name = Some(value.unwrap_or("").to_string()); + }, + "snippet.video-id" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().video_id = Some(value.unwrap_or("").to_string()); + }, + "snippet.is-draft" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().is_draft = Some(arg_from_str(value.unwrap_or("false"), err, "snippet.is-draft", "boolean")); + }, + "snippet.is-auto-synced" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().is_auto_synced = Some(arg_from_str(value.unwrap_or("false"), err, "snippet.is-auto-synced", "boolean")); + }, + "snippet.track-kind" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().track_kind = Some(value.unwrap_or("").to_string()); + }, + "snippet.last-updated" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().last_updated = Some(value.unwrap_or("").to_string()); + }, + "snippet.is-cc" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().is_cc = Some(arg_from_str(value.unwrap_or("false"), err, "snippet.is-cc", "boolean")); + }, + "snippet.is-easy-reader" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().is_easy_reader = Some(arg_from_str(value.unwrap_or("false"), err, "snippet.is-easy-reader", "boolean")); + }, + "snippet.is-large" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().is_large = Some(arg_from_str(value.unwrap_or("false"), err, "snippet.is-large", "boolean")); + }, + "snippet.failure-reason" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().failure_reason = Some(value.unwrap_or("").to_string()); + }, + "kind" => { + request_snippet_init(&mut request); + request.kind = Some(value.unwrap_or("").to_string()); + }, + "etag" => { + request_snippet_init(&mut request); + request.etag = Some(value.unwrap_or("").to_string()); + }, + "id" => { + request_snippet_init(&mut request); + request.id = Some(value.unwrap_or("").to_string()); + }, + _ => { + err.issues.push(CLIError::Field(FieldError::Unknown(temp_cursor.to_string()))); + } + } + } + let mut call = self.hub.captions().update(request); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { + let (key, value) = parse_kv_arg(&*parg, err, false); + match key { + "sync" => { + call = call.sync(arg_from_str(value.unwrap_or("false"), err, "sync", "boolean")); + }, + "on-behalf-of" => { + call = call.on_behalf_of(value.unwrap_or("")); + }, + "debug-project-id-override" => { + call = call.debug_project_id_override(value.unwrap_or("")); + }, + "alt" + |"fields" + |"key" + |"oauth-token" + |"pretty-print" + |"quota-user" + |"user-ip" => { + let map = [ + ("oauth-token", "oauth_token"), + ("pretty-print", "prettyPrint"), + ("quota-user", "quotaUser"), + ("user-ip", "userIp"), + ]; + call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) + }, + _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), + } + } + let vals = opt.values_of("mode").unwrap(); + let protocol = protocol_from_str(vals[0], ["simple", "resumable"].iter().map(|&v| v.to_string()).collect(), err); + let mut input_file = input_file_from_opts(vals[1], err); + let mime_type = input_mime_from_opts(opt.value_of("mime").unwrap_or("application/octet-stream"), err); + if dry_run { + Ok(()) + } else { + assert!(err.issues.len() == 0); + for scope in self.opt.values_of("url").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::Upload(UploadProtocol::Simple) => call.upload(input_file.unwrap(), mime_type.unwrap()), + CallType::Upload(UploadProtocol::Resumable) => call.upload_resumable(input_file.unwrap(), mime_type.unwrap()), + CallType::Standard => unreachable!() + } { + Err(api_err) => Err(DoitError::ApiError(api_err)), + Ok((mut response, output_schema)) => { + serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); + Ok(()) + } + } + } + } + + fn _channel_banners_insert(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + + let mut request = api::ChannelBannerResource::default(); + let mut field_cursor = FieldCursor::default(); + for kvarg in opt.values_of("kv").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; + } + match &temp_cursor.to_string()[..] { + "url" => { + request.url = Some(value.unwrap_or("").to_string()); + }, + "kind" => { + request.kind = Some(value.unwrap_or("").to_string()); + }, + "etag" => { + request.etag = Some(value.unwrap_or("").to_string()); + }, + _ => { + err.issues.push(CLIError::Field(FieldError::Unknown(temp_cursor.to_string()))); + } + } + } + let mut call = self.hub.channel_banners().insert(request); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { + let (key, value) = parse_kv_arg(&*parg, err, false); + match key { + "on-behalf-of-content-owner" => { + call = call.on_behalf_of_content_owner(value.unwrap_or("")); + }, + "alt" + |"fields" + |"key" + |"oauth-token" + |"pretty-print" + |"quota-user" + |"user-ip" => { + let map = [ + ("oauth-token", "oauth_token"), + ("pretty-print", "prettyPrint"), + ("quota-user", "quotaUser"), + ("user-ip", "userIp"), + ]; + call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) + }, + _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), + } + } + let vals = opt.values_of("mode").unwrap(); + let protocol = protocol_from_str(vals[0], ["simple", "resumable"].iter().map(|&v| v.to_string()).collect(), err); + let mut input_file = input_file_from_opts(vals[1], err); + let mime_type = input_mime_from_opts(opt.value_of("mime").unwrap_or("application/octet-stream"), err); + if dry_run { + Ok(()) + } else { + assert!(err.issues.len() == 0); + for scope in self.opt.values_of("url").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::Upload(UploadProtocol::Simple) => call.upload(input_file.unwrap(), mime_type.unwrap()), + CallType::Upload(UploadProtocol::Resumable) => call.upload_resumable(input_file.unwrap(), mime_type.unwrap()), + CallType::Standard => unreachable!() + } { + Err(api_err) => Err(DoitError::ApiError(api_err)), + Ok((mut response, output_schema)) => { + serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); + Ok(()) + } + } + } + } + + fn _channel_sections_delete(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + let mut call = self.hub.channel_sections().delete(opt.value_of("id").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { + let (key, value) = parse_kv_arg(&*parg, err, false); + match key { + "on-behalf-of-content-owner" => { + call = call.on_behalf_of_content_owner(value.unwrap_or("")); + }, + "alt" + |"fields" + |"key" + |"oauth-token" + |"pretty-print" + |"quota-user" + |"user-ip" => { + let map = [ + ("oauth-token", "oauth_token"), + ("pretty-print", "prettyPrint"), + ("quota-user", "quotaUser"), + ("user-ip", "userIp"), + ]; + call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) + }, + _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), + } + } + let protocol = CallType::Standard; + if dry_run { + Ok(()) + } else { + assert!(err.issues.len() == 0); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); + } + match match protocol { + CallType::Standard => call.doit(), + _ => unreachable!() + } { + Err(api_err) => Err(DoitError::ApiError(api_err)), + Ok(mut response) => { + Ok(()) + } + } + } + } + + fn _channel_sections_insert(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + + let mut request = api::ChannelSection::default(); + let mut field_cursor = FieldCursor::default(); + for kvarg in opt.values_of("kv").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; + } + fn request_content_details_init(request: &mut api::ChannelSection) { + if request.content_details.is_none() { + request.content_details = Some(Default::default()); + } + } + + fn request_snippet_init(request: &mut api::ChannelSection) { + if request.snippet.is_none() { + request.snippet = Some(Default::default()); + } + } + + fn request_snippet_localized_init(request: &mut api::ChannelSection) { + request_snippet_init(request); + if request.snippet.as_mut().unwrap().localized.is_none() { + request.snippet.as_mut().unwrap().localized = Some(Default::default()); + } + } + + fn request_targeting_init(request: &mut api::ChannelSection) { + if request.targeting.is_none() { + request.targeting = Some(Default::default()); + } + } + + match &temp_cursor.to_string()[..] { + "kind" => { + request.kind = Some(value.unwrap_or("").to_string()); + }, + "targeting.languages" => { + request_targeting_init(&mut request); + if request.targeting.as_mut().unwrap().languages.is_none() { + request.targeting.as_mut().unwrap().languages = Some(Default::default()); + } + request.targeting.as_mut().unwrap().languages.as_mut().unwrap().push(value.unwrap_or("").to_string()); + }, + "targeting.regions" => { + request_targeting_init(&mut request); + if request.targeting.as_mut().unwrap().regions.is_none() { + request.targeting.as_mut().unwrap().regions = Some(Default::default()); + } + request.targeting.as_mut().unwrap().regions.as_mut().unwrap().push(value.unwrap_or("").to_string()); + }, + "targeting.countries" => { + request_targeting_init(&mut request); + if request.targeting.as_mut().unwrap().countries.is_none() { + request.targeting.as_mut().unwrap().countries = Some(Default::default()); + } + request.targeting.as_mut().unwrap().countries.as_mut().unwrap().push(value.unwrap_or("").to_string()); + }, + "content-details.channels" => { + request_content_details_init(&mut request); + if request.content_details.as_mut().unwrap().channels.is_none() { + request.content_details.as_mut().unwrap().channels = Some(Default::default()); + } + request.content_details.as_mut().unwrap().channels.as_mut().unwrap().push(value.unwrap_or("").to_string()); + }, + "content-details.playlists" => { + request_content_details_init(&mut request); + if request.content_details.as_mut().unwrap().playlists.is_none() { + request.content_details.as_mut().unwrap().playlists = Some(Default::default()); + } + request.content_details.as_mut().unwrap().playlists.as_mut().unwrap().push(value.unwrap_or("").to_string()); + }, + "snippet.style" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().style = Some(value.unwrap_or("").to_string()); + }, + "snippet.title" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().title = Some(value.unwrap_or("").to_string()); + }, + "snippet.channel-id" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().channel_id = Some(value.unwrap_or("").to_string()); + }, + "snippet.default-language" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().default_language = Some(value.unwrap_or("").to_string()); + }, + "snippet.position" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().position = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.position", "integer")); + }, + "snippet.type" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().type_ = Some(value.unwrap_or("").to_string()); + }, + "snippet.localized.title" => { + request_snippet_localized_init(&mut request); + request.snippet.as_mut().unwrap().localized.as_mut().unwrap().title = Some(value.unwrap_or("").to_string()); + }, + "etag" => { + request_snippet_init(&mut request); + request.etag = Some(value.unwrap_or("").to_string()); + }, + "id" => { + request_snippet_init(&mut request); + request.id = Some(value.unwrap_or("").to_string()); + }, + _ => { + err.issues.push(CLIError::Field(FieldError::Unknown(temp_cursor.to_string()))); + } + } + } + let mut call = self.hub.channel_sections().insert(request); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { + let (key, value) = parse_kv_arg(&*parg, err, false); + match key { + "on-behalf-of-content-owner-channel" => { + call = call.on_behalf_of_content_owner_channel(value.unwrap_or("")); + }, + "on-behalf-of-content-owner" => { + call = call.on_behalf_of_content_owner(value.unwrap_or("")); + }, + "alt" + |"fields" + |"key" + |"oauth-token" + |"pretty-print" + |"quota-user" + |"user-ip" => { + let map = [ + ("oauth-token", "oauth_token"), + ("pretty-print", "prettyPrint"), + ("quota-user", "quotaUser"), + ("user-ip", "userIp"), + ]; + call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) + }, + _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), + } + } + let protocol = CallType::Standard; + if dry_run { + Ok(()) + } else { + assert!(err.issues.len() == 0); + for scope in self.opt.values_of("url").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(), + _ => unreachable!() + } { + Err(api_err) => Err(DoitError::ApiError(api_err)), + Ok((mut response, output_schema)) => { + serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); + Ok(()) + } + } + } + } + + fn _channel_sections_list(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + let mut call = self.hub.channel_sections().list(opt.value_of("part").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { + let (key, value) = parse_kv_arg(&*parg, err, false); + match key { + "on-behalf-of-content-owner" => { + call = call.on_behalf_of_content_owner(value.unwrap_or("")); + }, + "mine" => { + call = call.mine(arg_from_str(value.unwrap_or("false"), err, "mine", "boolean")); + }, + "id" => { + call = call.id(value.unwrap_or("")); + }, + "hl" => { + call = call.hl(value.unwrap_or("")); + }, + "channel-id" => { + call = call.channel_id(value.unwrap_or("")); + }, + "alt" + |"fields" + |"key" + |"oauth-token" + |"pretty-print" + |"quota-user" + |"user-ip" => { + let map = [ + ("oauth-token", "oauth_token"), + ("pretty-print", "prettyPrint"), + ("quota-user", "quotaUser"), + ("user-ip", "userIp"), + ]; + call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) + }, + _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), + } + } + let protocol = CallType::Standard; + if dry_run { + Ok(()) + } else { + assert!(err.issues.len() == 0); + for scope in self.opt.values_of("url").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(), + _ => unreachable!() + } { + Err(api_err) => Err(DoitError::ApiError(api_err)), + Ok((mut response, output_schema)) => { + serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); + Ok(()) + } + } + } + } + + fn _channel_sections_update(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + + let mut request = api::ChannelSection::default(); + let mut field_cursor = FieldCursor::default(); + for kvarg in opt.values_of("kv").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; + } + fn request_content_details_init(request: &mut api::ChannelSection) { + if request.content_details.is_none() { + request.content_details = Some(Default::default()); + } + } + + fn request_snippet_init(request: &mut api::ChannelSection) { + if request.snippet.is_none() { + request.snippet = Some(Default::default()); + } + } + + fn request_snippet_localized_init(request: &mut api::ChannelSection) { + request_snippet_init(request); + if request.snippet.as_mut().unwrap().localized.is_none() { + request.snippet.as_mut().unwrap().localized = Some(Default::default()); + } + } + + fn request_targeting_init(request: &mut api::ChannelSection) { + if request.targeting.is_none() { + request.targeting = Some(Default::default()); + } + } + + match &temp_cursor.to_string()[..] { + "kind" => { + request.kind = Some(value.unwrap_or("").to_string()); + }, + "targeting.languages" => { + request_targeting_init(&mut request); + if request.targeting.as_mut().unwrap().languages.is_none() { + request.targeting.as_mut().unwrap().languages = Some(Default::default()); + } + request.targeting.as_mut().unwrap().languages.as_mut().unwrap().push(value.unwrap_or("").to_string()); + }, + "targeting.regions" => { + request_targeting_init(&mut request); + if request.targeting.as_mut().unwrap().regions.is_none() { + request.targeting.as_mut().unwrap().regions = Some(Default::default()); + } + request.targeting.as_mut().unwrap().regions.as_mut().unwrap().push(value.unwrap_or("").to_string()); + }, + "targeting.countries" => { + request_targeting_init(&mut request); + if request.targeting.as_mut().unwrap().countries.is_none() { + request.targeting.as_mut().unwrap().countries = Some(Default::default()); + } + request.targeting.as_mut().unwrap().countries.as_mut().unwrap().push(value.unwrap_or("").to_string()); + }, + "content-details.channels" => { + request_content_details_init(&mut request); + if request.content_details.as_mut().unwrap().channels.is_none() { + request.content_details.as_mut().unwrap().channels = Some(Default::default()); + } + request.content_details.as_mut().unwrap().channels.as_mut().unwrap().push(value.unwrap_or("").to_string()); + }, + "content-details.playlists" => { + request_content_details_init(&mut request); + if request.content_details.as_mut().unwrap().playlists.is_none() { + request.content_details.as_mut().unwrap().playlists = Some(Default::default()); + } + request.content_details.as_mut().unwrap().playlists.as_mut().unwrap().push(value.unwrap_or("").to_string()); + }, + "snippet.style" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().style = Some(value.unwrap_or("").to_string()); + }, + "snippet.title" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().title = Some(value.unwrap_or("").to_string()); + }, + "snippet.channel-id" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().channel_id = Some(value.unwrap_or("").to_string()); + }, + "snippet.default-language" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().default_language = Some(value.unwrap_or("").to_string()); + }, + "snippet.position" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().position = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.position", "integer")); + }, + "snippet.type" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().type_ = Some(value.unwrap_or("").to_string()); + }, + "snippet.localized.title" => { + request_snippet_localized_init(&mut request); + request.snippet.as_mut().unwrap().localized.as_mut().unwrap().title = Some(value.unwrap_or("").to_string()); + }, + "etag" => { + request_snippet_init(&mut request); + request.etag = Some(value.unwrap_or("").to_string()); + }, + "id" => { + request_snippet_init(&mut request); + request.id = Some(value.unwrap_or("").to_string()); + }, + _ => { + err.issues.push(CLIError::Field(FieldError::Unknown(temp_cursor.to_string()))); + } + } + } + let mut call = self.hub.channel_sections().update(request); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { + let (key, value) = parse_kv_arg(&*parg, err, false); + match key { + "on-behalf-of-content-owner" => { + call = call.on_behalf_of_content_owner(value.unwrap_or("")); + }, + "alt" + |"fields" + |"key" + |"oauth-token" + |"pretty-print" + |"quota-user" + |"user-ip" => { + let map = [ + ("oauth-token", "oauth_token"), + ("pretty-print", "prettyPrint"), + ("quota-user", "quotaUser"), + ("user-ip", "userIp"), + ]; + call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) + }, + _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), + } + } + let protocol = CallType::Standard; + if dry_run { + Ok(()) + } else { + assert!(err.issues.len() == 0); + for scope in self.opt.values_of("url").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(), + _ => unreachable!() + } { + Err(api_err) => Err(DoitError::ApiError(api_err)), + Ok((mut response, output_schema)) => { + serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); + Ok(()) + } + } + } + } + + fn _channels_list(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + let mut call = self.hub.channels().list(opt.value_of("part").unwrap_or("")); + for parg in opt.values_of("v").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("")); + }, + "on-behalf-of-content-owner" => { + call = call.on_behalf_of_content_owner(value.unwrap_or("")); + }, + "my-subscribers" => { + call = call.my_subscribers(arg_from_str(value.unwrap_or("false"), err, "my-subscribers", "boolean")); + }, + "mine" => { + call = call.mine(arg_from_str(value.unwrap_or("false"), err, "mine", "boolean")); + }, + "max-results" => { + call = call.max_results(arg_from_str(value.unwrap_or("-0"), err, "max-results", "integer")); + }, + "managed-by-me" => { + call = call.managed_by_me(arg_from_str(value.unwrap_or("false"), err, "managed-by-me", "boolean")); + }, + "id" => { + call = call.id(value.unwrap_or("")); + }, + "hl" => { + call = call.hl(value.unwrap_or("")); + }, + "for-username" => { + call = call.for_username(value.unwrap_or("")); + }, + "category-id" => { + call = call.category_id(value.unwrap_or("")); + }, + "alt" + |"fields" + |"key" + |"oauth-token" + |"pretty-print" + |"quota-user" + |"user-ip" => { + let map = [ + ("oauth-token", "oauth_token"), + ("pretty-print", "prettyPrint"), + ("quota-user", "quotaUser"), + ("user-ip", "userIp"), + ]; + call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) + }, + _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), + } + } + let protocol = CallType::Standard; + if dry_run { + Ok(()) + } else { + assert!(err.issues.len() == 0); + for scope in self.opt.values_of("url").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(), + _ => unreachable!() + } { + Err(api_err) => Err(DoitError::ApiError(api_err)), + Ok((mut response, output_schema)) => { + serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); + Ok(()) + } + } + } + } + + fn _channels_update(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + + let mut request = api::Channel::default(); + let mut field_cursor = FieldCursor::default(); + for kvarg in opt.values_of("kv").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; + } + fn request_audit_details_init(request: &mut api::Channel) { + if request.audit_details.is_none() { + request.audit_details = Some(Default::default()); + } + } + + fn request_branding_settings_channel_init(request: &mut api::Channel) { + request_branding_settings_init(request); + if request.branding_settings.as_mut().unwrap().channel.is_none() { + request.branding_settings.as_mut().unwrap().channel = Some(Default::default()); + } + } + + fn request_branding_settings_image_background_image_url_default_language_init(request: &mut api::Channel) { + request_branding_settings_image_background_image_url_init(request); + if request.branding_settings.as_mut().unwrap().image.as_mut().unwrap().background_image_url.as_mut().unwrap().default_language.is_none() { + request.branding_settings.as_mut().unwrap().image.as_mut().unwrap().background_image_url.as_mut().unwrap().default_language = Some(Default::default()); + } + } + + fn request_branding_settings_image_background_image_url_init(request: &mut api::Channel) { + request_branding_settings_image_init(request); + if request.branding_settings.as_mut().unwrap().image.as_mut().unwrap().background_image_url.is_none() { + request.branding_settings.as_mut().unwrap().image.as_mut().unwrap().background_image_url = Some(Default::default()); + } + } + + fn request_branding_settings_image_init(request: &mut api::Channel) { + request_branding_settings_init(request); + if request.branding_settings.as_mut().unwrap().image.is_none() { + request.branding_settings.as_mut().unwrap().image = Some(Default::default()); + } + } + + fn request_branding_settings_image_large_branded_banner_image_imap_script_default_language_init(request: &mut api::Channel) { + request_branding_settings_image_large_branded_banner_image_imap_script_init(request); + if request.branding_settings.as_mut().unwrap().image.as_mut().unwrap().large_branded_banner_image_imap_script.as_mut().unwrap().default_language.is_none() { + request.branding_settings.as_mut().unwrap().image.as_mut().unwrap().large_branded_banner_image_imap_script.as_mut().unwrap().default_language = Some(Default::default()); + } + } + + fn request_branding_settings_image_large_branded_banner_image_imap_script_init(request: &mut api::Channel) { + request_branding_settings_image_init(request); + if request.branding_settings.as_mut().unwrap().image.as_mut().unwrap().large_branded_banner_image_imap_script.is_none() { + request.branding_settings.as_mut().unwrap().image.as_mut().unwrap().large_branded_banner_image_imap_script = Some(Default::default()); + } + } + + fn request_branding_settings_image_large_branded_banner_image_url_default_language_init(request: &mut api::Channel) { + request_branding_settings_image_large_branded_banner_image_url_init(request); + if request.branding_settings.as_mut().unwrap().image.as_mut().unwrap().large_branded_banner_image_url.as_mut().unwrap().default_language.is_none() { + request.branding_settings.as_mut().unwrap().image.as_mut().unwrap().large_branded_banner_image_url.as_mut().unwrap().default_language = Some(Default::default()); + } + } + + fn request_branding_settings_image_large_branded_banner_image_url_init(request: &mut api::Channel) { + request_branding_settings_image_init(request); + if request.branding_settings.as_mut().unwrap().image.as_mut().unwrap().large_branded_banner_image_url.is_none() { + request.branding_settings.as_mut().unwrap().image.as_mut().unwrap().large_branded_banner_image_url = Some(Default::default()); + } + } + + fn request_branding_settings_image_small_branded_banner_image_imap_script_default_language_init(request: &mut api::Channel) { + request_branding_settings_image_small_branded_banner_image_imap_script_init(request); + if request.branding_settings.as_mut().unwrap().image.as_mut().unwrap().small_branded_banner_image_imap_script.as_mut().unwrap().default_language.is_none() { + request.branding_settings.as_mut().unwrap().image.as_mut().unwrap().small_branded_banner_image_imap_script.as_mut().unwrap().default_language = Some(Default::default()); + } + } + + fn request_branding_settings_image_small_branded_banner_image_imap_script_init(request: &mut api::Channel) { + request_branding_settings_image_init(request); + if request.branding_settings.as_mut().unwrap().image.as_mut().unwrap().small_branded_banner_image_imap_script.is_none() { + request.branding_settings.as_mut().unwrap().image.as_mut().unwrap().small_branded_banner_image_imap_script = Some(Default::default()); + } + } + + fn request_branding_settings_image_small_branded_banner_image_url_default_language_init(request: &mut api::Channel) { + request_branding_settings_image_small_branded_banner_image_url_init(request); + if request.branding_settings.as_mut().unwrap().image.as_mut().unwrap().small_branded_banner_image_url.as_mut().unwrap().default_language.is_none() { + request.branding_settings.as_mut().unwrap().image.as_mut().unwrap().small_branded_banner_image_url.as_mut().unwrap().default_language = Some(Default::default()); + } + } + + fn request_branding_settings_image_small_branded_banner_image_url_init(request: &mut api::Channel) { + request_branding_settings_image_init(request); + if request.branding_settings.as_mut().unwrap().image.as_mut().unwrap().small_branded_banner_image_url.is_none() { + request.branding_settings.as_mut().unwrap().image.as_mut().unwrap().small_branded_banner_image_url = Some(Default::default()); + } + } + + fn request_branding_settings_init(request: &mut api::Channel) { + if request.branding_settings.is_none() { + request.branding_settings = Some(Default::default()); + } + } + + fn request_branding_settings_watch_init(request: &mut api::Channel) { + request_branding_settings_init(request); + if request.branding_settings.as_mut().unwrap().watch.is_none() { + request.branding_settings.as_mut().unwrap().watch = Some(Default::default()); + } + } + + fn request_content_details_init(request: &mut api::Channel) { + if request.content_details.is_none() { + request.content_details = Some(Default::default()); + } + } + + fn request_content_details_related_playlists_init(request: &mut api::Channel) { + request_content_details_init(request); + if request.content_details.as_mut().unwrap().related_playlists.is_none() { + request.content_details.as_mut().unwrap().related_playlists = Some(Default::default()); + } + } + + fn request_content_owner_details_init(request: &mut api::Channel) { + if request.content_owner_details.is_none() { + request.content_owner_details = Some(Default::default()); + } + } + + fn request_invideo_promotion_default_timing_init(request: &mut api::Channel) { + request_invideo_promotion_init(request); + if request.invideo_promotion.as_mut().unwrap().default_timing.is_none() { + request.invideo_promotion.as_mut().unwrap().default_timing = Some(Default::default()); + } + } + + fn request_invideo_promotion_init(request: &mut api::Channel) { + if request.invideo_promotion.is_none() { + request.invideo_promotion = Some(Default::default()); + } + } + + fn request_invideo_promotion_position_init(request: &mut api::Channel) { + request_invideo_promotion_init(request); + if request.invideo_promotion.as_mut().unwrap().position.is_none() { + request.invideo_promotion.as_mut().unwrap().position = Some(Default::default()); + } + } + + fn request_snippet_init(request: &mut api::Channel) { + if request.snippet.is_none() { + request.snippet = Some(Default::default()); + } + } + + fn request_snippet_localized_init(request: &mut api::Channel) { + request_snippet_init(request); + if request.snippet.as_mut().unwrap().localized.is_none() { + request.snippet.as_mut().unwrap().localized = Some(Default::default()); + } + } + + fn request_snippet_thumbnails_default_init(request: &mut api::Channel) { + request_snippet_thumbnails_init(request); + if request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().default.is_none() { + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().default = Some(Default::default()); + } + } + + fn request_snippet_thumbnails_high_init(request: &mut api::Channel) { + request_snippet_thumbnails_init(request); + if request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().high.is_none() { + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().high = Some(Default::default()); + } + } + + fn request_snippet_thumbnails_init(request: &mut api::Channel) { + request_snippet_init(request); + if request.snippet.as_mut().unwrap().thumbnails.is_none() { + request.snippet.as_mut().unwrap().thumbnails = Some(Default::default()); + } + } + + fn request_snippet_thumbnails_maxres_init(request: &mut api::Channel) { + request_snippet_thumbnails_init(request); + if request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().maxres.is_none() { + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().maxres = Some(Default::default()); + } + } + + fn request_snippet_thumbnails_medium_init(request: &mut api::Channel) { + request_snippet_thumbnails_init(request); + if request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().medium.is_none() { + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().medium = Some(Default::default()); + } + } + + fn request_snippet_thumbnails_standard_init(request: &mut api::Channel) { + request_snippet_thumbnails_init(request); + if request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().standard.is_none() { + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().standard = Some(Default::default()); + } + } + + fn request_statistics_init(request: &mut api::Channel) { + if request.statistics.is_none() { + request.statistics = Some(Default::default()); + } + } + + fn request_status_init(request: &mut api::Channel) { + if request.status.is_none() { + request.status = Some(Default::default()); + } + } + + fn request_topic_details_init(request: &mut api::Channel) { + if request.topic_details.is_none() { + request.topic_details = Some(Default::default()); + } + } + + match &temp_cursor.to_string()[..] { + "status.privacy-status" => { + request_status_init(&mut request); + request.status.as_mut().unwrap().privacy_status = Some(value.unwrap_or("").to_string()); + }, + "status.is-linked" => { + request_status_init(&mut request); + request.status.as_mut().unwrap().is_linked = Some(arg_from_str(value.unwrap_or("false"), err, "status.is-linked", "boolean")); + }, + "status.long-uploads-status" => { + request_status_init(&mut request); + request.status.as_mut().unwrap().long_uploads_status = Some(value.unwrap_or("").to_string()); + }, + "invideo-promotion.default-timing.offset-ms" => { + request_invideo_promotion_default_timing_init(&mut request); + request.invideo_promotion.as_mut().unwrap().default_timing.as_mut().unwrap().offset_ms = Some(value.unwrap_or("").to_string()); + }, + "invideo-promotion.default-timing.type" => { + request_invideo_promotion_default_timing_init(&mut request); + request.invideo_promotion.as_mut().unwrap().default_timing.as_mut().unwrap().type_ = Some(value.unwrap_or("").to_string()); + }, + "invideo-promotion.default-timing.duration-ms" => { + request_invideo_promotion_default_timing_init(&mut request); + request.invideo_promotion.as_mut().unwrap().default_timing.as_mut().unwrap().duration_ms = Some(value.unwrap_or("").to_string()); + }, + "invideo-promotion.position.corner-position" => { + request_invideo_promotion_position_init(&mut request); + request.invideo_promotion.as_mut().unwrap().position.as_mut().unwrap().corner_position = Some(value.unwrap_or("").to_string()); + }, + "invideo-promotion.position.type" => { + request_invideo_promotion_position_init(&mut request); + request.invideo_promotion.as_mut().unwrap().position.as_mut().unwrap().type_ = Some(value.unwrap_or("").to_string()); + }, + "invideo-promotion.use-smart-timing" => { + request_invideo_promotion_position_init(&mut request); + request.invideo_promotion.as_mut().unwrap().use_smart_timing = Some(arg_from_str(value.unwrap_or("false"), err, "invideo-promotion.use-smart-timing", "boolean")); + }, + "kind" => { + request_invideo_promotion_init(&mut request); + request.kind = Some(value.unwrap_or("").to_string()); + }, + "statistics.comment-count" => { + request_statistics_init(&mut request); + request.statistics.as_mut().unwrap().comment_count = Some(arg_from_str(value.unwrap_or("-0"), err, "statistics.comment-count", "int64")); + }, + "statistics.subscriber-count" => { + request_statistics_init(&mut request); + request.statistics.as_mut().unwrap().subscriber_count = Some(arg_from_str(value.unwrap_or("-0"), err, "statistics.subscriber-count", "int64")); + }, + "statistics.video-count" => { + request_statistics_init(&mut request); + request.statistics.as_mut().unwrap().video_count = Some(arg_from_str(value.unwrap_or("-0"), err, "statistics.video-count", "int64")); + }, + "statistics.hidden-subscriber-count" => { + request_statistics_init(&mut request); + request.statistics.as_mut().unwrap().hidden_subscriber_count = Some(arg_from_str(value.unwrap_or("false"), err, "statistics.hidden-subscriber-count", "boolean")); + }, + "statistics.view-count" => { + request_statistics_init(&mut request); + request.statistics.as_mut().unwrap().view_count = Some(arg_from_str(value.unwrap_or("-0"), err, "statistics.view-count", "int64")); + }, + "content-owner-details.content-owner" => { + request_content_owner_details_init(&mut request); + request.content_owner_details.as_mut().unwrap().content_owner = Some(value.unwrap_or("").to_string()); + }, + "content-owner-details.time-linked" => { + request_content_owner_details_init(&mut request); + request.content_owner_details.as_mut().unwrap().time_linked = Some(value.unwrap_or("").to_string()); + }, + "topic-details.topic-ids" => { + request_topic_details_init(&mut request); + if request.topic_details.as_mut().unwrap().topic_ids.is_none() { + request.topic_details.as_mut().unwrap().topic_ids = Some(Default::default()); + } + request.topic_details.as_mut().unwrap().topic_ids.as_mut().unwrap().push(value.unwrap_or("").to_string()); + }, + "content-details.related-playlists.watch-later" => { + request_content_details_related_playlists_init(&mut request); + request.content_details.as_mut().unwrap().related_playlists.as_mut().unwrap().watch_later = Some(value.unwrap_or("").to_string()); + }, + "content-details.related-playlists.watch-history" => { + request_content_details_related_playlists_init(&mut request); + request.content_details.as_mut().unwrap().related_playlists.as_mut().unwrap().watch_history = Some(value.unwrap_or("").to_string()); + }, + "content-details.related-playlists.uploads" => { + request_content_details_related_playlists_init(&mut request); + request.content_details.as_mut().unwrap().related_playlists.as_mut().unwrap().uploads = Some(value.unwrap_or("").to_string()); + }, + "content-details.related-playlists.favorites" => { + request_content_details_related_playlists_init(&mut request); + request.content_details.as_mut().unwrap().related_playlists.as_mut().unwrap().favorites = Some(value.unwrap_or("").to_string()); + }, + "content-details.related-playlists.likes" => { + request_content_details_related_playlists_init(&mut request); + request.content_details.as_mut().unwrap().related_playlists.as_mut().unwrap().likes = Some(value.unwrap_or("").to_string()); + }, + "content-details.google-plus-user-id" => { + request_content_details_related_playlists_init(&mut request); + request.content_details.as_mut().unwrap().google_plus_user_id = Some(value.unwrap_or("").to_string()); + }, + "branding-settings.image.large-branded-banner-image-imap-script.default" => { + request_branding_settings_image_large_branded_banner_image_imap_script_init(&mut request); + request.branding_settings.as_mut().unwrap().image.as_mut().unwrap().large_branded_banner_image_imap_script.as_mut().unwrap().default = Some(value.unwrap_or("").to_string()); + }, + "branding-settings.image.large-branded-banner-image-imap-script.default-language.value" => { + request_branding_settings_image_large_branded_banner_image_imap_script_default_language_init(&mut request); + request.branding_settings.as_mut().unwrap().image.as_mut().unwrap().large_branded_banner_image_imap_script.as_mut().unwrap().default_language.as_mut().unwrap().value = Some(value.unwrap_or("").to_string()); + }, + "branding-settings.image.small-branded-banner-image-url.default" => { + request_branding_settings_image_small_branded_banner_image_url_init(&mut request); + request.branding_settings.as_mut().unwrap().image.as_mut().unwrap().small_branded_banner_image_url.as_mut().unwrap().default = Some(value.unwrap_or("").to_string()); + }, + "branding-settings.image.small-branded-banner-image-url.default-language.value" => { + request_branding_settings_image_small_branded_banner_image_url_default_language_init(&mut request); + request.branding_settings.as_mut().unwrap().image.as_mut().unwrap().small_branded_banner_image_url.as_mut().unwrap().default_language.as_mut().unwrap().value = Some(value.unwrap_or("").to_string()); + }, + "branding-settings.image.banner-tv-image-url" => { + request_branding_settings_image_small_branded_banner_image_url_init(&mut request); + request.branding_settings.as_mut().unwrap().image.as_mut().unwrap().banner_tv_image_url = Some(value.unwrap_or("").to_string()); + }, + "branding-settings.image.banner-tv-low-image-url" => { + request_branding_settings_image_small_branded_banner_image_url_init(&mut request); + request.branding_settings.as_mut().unwrap().image.as_mut().unwrap().banner_tv_low_image_url = Some(value.unwrap_or("").to_string()); + }, + "branding-settings.image.large-branded-banner-image-url.default" => { + request_branding_settings_image_large_branded_banner_image_url_init(&mut request); + request.branding_settings.as_mut().unwrap().image.as_mut().unwrap().large_branded_banner_image_url.as_mut().unwrap().default = Some(value.unwrap_or("").to_string()); + }, + "branding-settings.image.large-branded-banner-image-url.default-language.value" => { + request_branding_settings_image_large_branded_banner_image_url_default_language_init(&mut request); + request.branding_settings.as_mut().unwrap().image.as_mut().unwrap().large_branded_banner_image_url.as_mut().unwrap().default_language.as_mut().unwrap().value = Some(value.unwrap_or("").to_string()); + }, + "branding-settings.image.banner-tv-high-image-url" => { + request_branding_settings_image_large_branded_banner_image_url_init(&mut request); + request.branding_settings.as_mut().unwrap().image.as_mut().unwrap().banner_tv_high_image_url = Some(value.unwrap_or("").to_string()); + }, + "branding-settings.image.background-image-url.default" => { + request_branding_settings_image_background_image_url_init(&mut request); + request.branding_settings.as_mut().unwrap().image.as_mut().unwrap().background_image_url.as_mut().unwrap().default = Some(value.unwrap_or("").to_string()); + }, + "branding-settings.image.background-image-url.default-language.value" => { + request_branding_settings_image_background_image_url_default_language_init(&mut request); + request.branding_settings.as_mut().unwrap().image.as_mut().unwrap().background_image_url.as_mut().unwrap().default_language.as_mut().unwrap().value = Some(value.unwrap_or("").to_string()); + }, + "branding-settings.image.small-branded-banner-image-imap-script.default" => { + request_branding_settings_image_small_branded_banner_image_imap_script_init(&mut request); + request.branding_settings.as_mut().unwrap().image.as_mut().unwrap().small_branded_banner_image_imap_script.as_mut().unwrap().default = Some(value.unwrap_or("").to_string()); + }, + "branding-settings.image.small-branded-banner-image-imap-script.default-language.value" => { + request_branding_settings_image_small_branded_banner_image_imap_script_default_language_init(&mut request); + request.branding_settings.as_mut().unwrap().image.as_mut().unwrap().small_branded_banner_image_imap_script.as_mut().unwrap().default_language.as_mut().unwrap().value = Some(value.unwrap_or("").to_string()); + }, + "branding-settings.image.banner-external-url" => { + request_branding_settings_image_small_branded_banner_image_imap_script_init(&mut request); + request.branding_settings.as_mut().unwrap().image.as_mut().unwrap().banner_external_url = Some(value.unwrap_or("").to_string()); + }, + "branding-settings.image.watch-icon-image-url" => { + request_branding_settings_image_small_branded_banner_image_imap_script_init(&mut request); + request.branding_settings.as_mut().unwrap().image.as_mut().unwrap().watch_icon_image_url = Some(value.unwrap_or("").to_string()); + }, + "branding-settings.image.banner-tv-medium-image-url" => { + request_branding_settings_image_small_branded_banner_image_imap_script_init(&mut request); + request.branding_settings.as_mut().unwrap().image.as_mut().unwrap().banner_tv_medium_image_url = Some(value.unwrap_or("").to_string()); + }, + "branding-settings.image.banner-mobile-image-url" => { + request_branding_settings_image_small_branded_banner_image_imap_script_init(&mut request); + request.branding_settings.as_mut().unwrap().image.as_mut().unwrap().banner_mobile_image_url = Some(value.unwrap_or("").to_string()); + }, + "branding-settings.image.banner-tablet-hd-image-url" => { + request_branding_settings_image_small_branded_banner_image_imap_script_init(&mut request); + request.branding_settings.as_mut().unwrap().image.as_mut().unwrap().banner_tablet_hd_image_url = Some(value.unwrap_or("").to_string()); + }, + "branding-settings.image.banner-tablet-low-image-url" => { + request_branding_settings_image_small_branded_banner_image_imap_script_init(&mut request); + request.branding_settings.as_mut().unwrap().image.as_mut().unwrap().banner_tablet_low_image_url = Some(value.unwrap_or("").to_string()); + }, + "branding-settings.image.tracking-image-url" => { + request_branding_settings_image_small_branded_banner_image_imap_script_init(&mut request); + request.branding_settings.as_mut().unwrap().image.as_mut().unwrap().tracking_image_url = Some(value.unwrap_or("").to_string()); + }, + "branding-settings.image.banner-mobile-extra-hd-image-url" => { + request_branding_settings_image_small_branded_banner_image_imap_script_init(&mut request); + request.branding_settings.as_mut().unwrap().image.as_mut().unwrap().banner_mobile_extra_hd_image_url = Some(value.unwrap_or("").to_string()); + }, + "branding-settings.image.banner-tablet-image-url" => { + request_branding_settings_image_small_branded_banner_image_imap_script_init(&mut request); + request.branding_settings.as_mut().unwrap().image.as_mut().unwrap().banner_tablet_image_url = Some(value.unwrap_or("").to_string()); + }, + "branding-settings.image.banner-mobile-low-image-url" => { + request_branding_settings_image_small_branded_banner_image_imap_script_init(&mut request); + request.branding_settings.as_mut().unwrap().image.as_mut().unwrap().banner_mobile_low_image_url = Some(value.unwrap_or("").to_string()); + }, + "branding-settings.image.banner-mobile-medium-hd-image-url" => { + request_branding_settings_image_small_branded_banner_image_imap_script_init(&mut request); + request.branding_settings.as_mut().unwrap().image.as_mut().unwrap().banner_mobile_medium_hd_image_url = Some(value.unwrap_or("").to_string()); + }, + "branding-settings.image.banner-tablet-extra-hd-image-url" => { + request_branding_settings_image_small_branded_banner_image_imap_script_init(&mut request); + request.branding_settings.as_mut().unwrap().image.as_mut().unwrap().banner_tablet_extra_hd_image_url = Some(value.unwrap_or("").to_string()); + }, + "branding-settings.image.banner-image-url" => { + request_branding_settings_image_small_branded_banner_image_imap_script_init(&mut request); + request.branding_settings.as_mut().unwrap().image.as_mut().unwrap().banner_image_url = Some(value.unwrap_or("").to_string()); + }, + "branding-settings.image.banner-mobile-hd-image-url" => { + request_branding_settings_image_small_branded_banner_image_imap_script_init(&mut request); + request.branding_settings.as_mut().unwrap().image.as_mut().unwrap().banner_mobile_hd_image_url = Some(value.unwrap_or("").to_string()); + }, + "branding-settings.watch.text-color" => { + request_branding_settings_watch_init(&mut request); + request.branding_settings.as_mut().unwrap().watch.as_mut().unwrap().text_color = Some(value.unwrap_or("").to_string()); + }, + "branding-settings.watch.featured-playlist-id" => { + request_branding_settings_watch_init(&mut request); + request.branding_settings.as_mut().unwrap().watch.as_mut().unwrap().featured_playlist_id = Some(value.unwrap_or("").to_string()); + }, + "branding-settings.watch.background-color" => { + request_branding_settings_watch_init(&mut request); + request.branding_settings.as_mut().unwrap().watch.as_mut().unwrap().background_color = Some(value.unwrap_or("").to_string()); + }, + "branding-settings.channel.description" => { + request_branding_settings_channel_init(&mut request); + request.branding_settings.as_mut().unwrap().channel.as_mut().unwrap().description = Some(value.unwrap_or("").to_string()); + }, + "branding-settings.channel.title" => { + request_branding_settings_channel_init(&mut request); + request.branding_settings.as_mut().unwrap().channel.as_mut().unwrap().title = Some(value.unwrap_or("").to_string()); + }, + "branding-settings.channel.country" => { + request_branding_settings_channel_init(&mut request); + request.branding_settings.as_mut().unwrap().channel.as_mut().unwrap().country = Some(value.unwrap_or("").to_string()); + }, + "branding-settings.channel.show-browse-view" => { + request_branding_settings_channel_init(&mut request); + request.branding_settings.as_mut().unwrap().channel.as_mut().unwrap().show_browse_view = Some(arg_from_str(value.unwrap_or("false"), err, "branding-settings.channel.show-browse-view", "boolean")); + }, + "branding-settings.channel.featured-channels-title" => { + request_branding_settings_channel_init(&mut request); + request.branding_settings.as_mut().unwrap().channel.as_mut().unwrap().featured_channels_title = Some(value.unwrap_or("").to_string()); + }, + "branding-settings.channel.default-language" => { + request_branding_settings_channel_init(&mut request); + request.branding_settings.as_mut().unwrap().channel.as_mut().unwrap().default_language = Some(value.unwrap_or("").to_string()); + }, + "branding-settings.channel.unsubscribed-trailer" => { + request_branding_settings_channel_init(&mut request); + request.branding_settings.as_mut().unwrap().channel.as_mut().unwrap().unsubscribed_trailer = Some(value.unwrap_or("").to_string()); + }, + "branding-settings.channel.keywords" => { + request_branding_settings_channel_init(&mut request); + request.branding_settings.as_mut().unwrap().channel.as_mut().unwrap().keywords = Some(value.unwrap_or("").to_string()); + }, + "branding-settings.channel.profile-color" => { + request_branding_settings_channel_init(&mut request); + request.branding_settings.as_mut().unwrap().channel.as_mut().unwrap().profile_color = Some(value.unwrap_or("").to_string()); + }, + "branding-settings.channel.default-tab" => { + request_branding_settings_channel_init(&mut request); + request.branding_settings.as_mut().unwrap().channel.as_mut().unwrap().default_tab = Some(value.unwrap_or("").to_string()); + }, + "branding-settings.channel.moderate-comments" => { + request_branding_settings_channel_init(&mut request); + request.branding_settings.as_mut().unwrap().channel.as_mut().unwrap().moderate_comments = Some(arg_from_str(value.unwrap_or("false"), err, "branding-settings.channel.moderate-comments", "boolean")); + }, + "branding-settings.channel.featured-channels-urls" => { + request_branding_settings_channel_init(&mut request); + if request.branding_settings.as_mut().unwrap().channel.as_mut().unwrap().featured_channels_urls.is_none() { + request.branding_settings.as_mut().unwrap().channel.as_mut().unwrap().featured_channels_urls = Some(Default::default()); + } + request.branding_settings.as_mut().unwrap().channel.as_mut().unwrap().featured_channels_urls.as_mut().unwrap().push(value.unwrap_or("").to_string()); + }, + "branding-settings.channel.tracking-analytics-account-id" => { + request_branding_settings_channel_init(&mut request); + request.branding_settings.as_mut().unwrap().channel.as_mut().unwrap().tracking_analytics_account_id = Some(value.unwrap_or("").to_string()); + }, + "branding-settings.channel.show-related-channels" => { + request_branding_settings_channel_init(&mut request); + request.branding_settings.as_mut().unwrap().channel.as_mut().unwrap().show_related_channels = Some(arg_from_str(value.unwrap_or("false"), err, "branding-settings.channel.show-related-channels", "boolean")); + }, + "snippet.thumbnails.default.url" => { + request_snippet_thumbnails_default_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().default.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); + }, + "snippet.thumbnails.default.width" => { + request_snippet_thumbnails_default_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().default.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.default.width", "integer")); + }, + "snippet.thumbnails.default.height" => { + request_snippet_thumbnails_default_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().default.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.default.height", "integer")); + }, + "snippet.thumbnails.high.url" => { + request_snippet_thumbnails_high_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().high.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); + }, + "snippet.thumbnails.high.width" => { + request_snippet_thumbnails_high_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().high.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.high.width", "integer")); + }, + "snippet.thumbnails.high.height" => { + request_snippet_thumbnails_high_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().high.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.high.height", "integer")); + }, + "snippet.thumbnails.medium.url" => { + request_snippet_thumbnails_medium_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().medium.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); + }, + "snippet.thumbnails.medium.width" => { + request_snippet_thumbnails_medium_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().medium.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.medium.width", "integer")); + }, + "snippet.thumbnails.medium.height" => { + request_snippet_thumbnails_medium_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().medium.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.medium.height", "integer")); + }, + "snippet.thumbnails.maxres.url" => { + request_snippet_thumbnails_maxres_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().maxres.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); + }, + "snippet.thumbnails.maxres.width" => { + request_snippet_thumbnails_maxres_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().maxres.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.maxres.width", "integer")); + }, + "snippet.thumbnails.maxres.height" => { + request_snippet_thumbnails_maxres_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().maxres.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.maxres.height", "integer")); + }, + "snippet.thumbnails.standard.url" => { + request_snippet_thumbnails_standard_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().standard.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); + }, + "snippet.thumbnails.standard.width" => { + request_snippet_thumbnails_standard_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().standard.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.standard.width", "integer")); + }, + "snippet.thumbnails.standard.height" => { + request_snippet_thumbnails_standard_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().standard.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.standard.height", "integer")); + }, + "snippet.title" => { + request_snippet_thumbnails_init(&mut request); + request.snippet.as_mut().unwrap().title = Some(value.unwrap_or("").to_string()); + }, + "snippet.country" => { + request_snippet_thumbnails_init(&mut request); + request.snippet.as_mut().unwrap().country = Some(value.unwrap_or("").to_string()); + }, + "snippet.default-language" => { + request_snippet_thumbnails_init(&mut request); + request.snippet.as_mut().unwrap().default_language = Some(value.unwrap_or("").to_string()); + }, + "snippet.published-at" => { + request_snippet_thumbnails_init(&mut request); + request.snippet.as_mut().unwrap().published_at = Some(value.unwrap_or("").to_string()); + }, + "snippet.localized.description" => { + request_snippet_localized_init(&mut request); + request.snippet.as_mut().unwrap().localized.as_mut().unwrap().description = Some(value.unwrap_or("").to_string()); + }, + "snippet.localized.title" => { + request_snippet_localized_init(&mut request); + request.snippet.as_mut().unwrap().localized.as_mut().unwrap().title = Some(value.unwrap_or("").to_string()); + }, + "snippet.description" => { + request_snippet_localized_init(&mut request); + request.snippet.as_mut().unwrap().description = Some(value.unwrap_or("").to_string()); + }, + "audit-details.community-guidelines-good-standing" => { + request_audit_details_init(&mut request); + request.audit_details.as_mut().unwrap().community_guidelines_good_standing = Some(arg_from_str(value.unwrap_or("false"), err, "audit-details.community-guidelines-good-standing", "boolean")); + }, + "audit-details.content-id-claims-good-standing" => { + request_audit_details_init(&mut request); + request.audit_details.as_mut().unwrap().content_id_claims_good_standing = Some(arg_from_str(value.unwrap_or("false"), err, "audit-details.content-id-claims-good-standing", "boolean")); + }, + "audit-details.overall-good-standing" => { + request_audit_details_init(&mut request); + request.audit_details.as_mut().unwrap().overall_good_standing = Some(arg_from_str(value.unwrap_or("false"), err, "audit-details.overall-good-standing", "boolean")); + }, + "audit-details.copyright-strikes-good-standing" => { + request_audit_details_init(&mut request); + request.audit_details.as_mut().unwrap().copyright_strikes_good_standing = Some(arg_from_str(value.unwrap_or("false"), err, "audit-details.copyright-strikes-good-standing", "boolean")); + }, + "etag" => { + request_audit_details_init(&mut request); + request.etag = Some(value.unwrap_or("").to_string()); + }, + "id" => { + request_audit_details_init(&mut request); + request.id = Some(value.unwrap_or("").to_string()); + }, + _ => { + err.issues.push(CLIError::Field(FieldError::Unknown(temp_cursor.to_string()))); + } + } + } + let mut call = self.hub.channels().update(request); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { + let (key, value) = parse_kv_arg(&*parg, err, false); + match key { + "on-behalf-of-content-owner" => { + call = call.on_behalf_of_content_owner(value.unwrap_or("")); + }, + "alt" + |"fields" + |"key" + |"oauth-token" + |"pretty-print" + |"quota-user" + |"user-ip" => { + let map = [ + ("oauth-token", "oauth_token"), + ("pretty-print", "prettyPrint"), + ("quota-user", "quotaUser"), + ("user-ip", "userIp"), + ]; + call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) + }, + _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), + } + } + let protocol = CallType::Standard; + if dry_run { + Ok(()) + } else { + assert!(err.issues.len() == 0); + for scope in self.opt.values_of("url").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(), + _ => unreachable!() + } { + Err(api_err) => Err(DoitError::ApiError(api_err)), + Ok((mut response, output_schema)) => { + serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); + Ok(()) + } + } + } + } + + fn _comment_threads_insert(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + + let mut request = api::CommentThread::default(); + let mut field_cursor = FieldCursor::default(); + for kvarg in opt.values_of("kv").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; + } + fn request_snippet_init(request: &mut api::CommentThread) { + if request.snippet.is_none() { + request.snippet = Some(Default::default()); + } + } + + fn request_snippet_top_level_comment_init(request: &mut api::CommentThread) { + request_snippet_init(request); + if request.snippet.as_mut().unwrap().top_level_comment.is_none() { + request.snippet.as_mut().unwrap().top_level_comment = Some(Default::default()); + } + } + + fn request_snippet_top_level_comment_snippet_author_channel_id_init(request: &mut api::CommentThread) { + request_snippet_top_level_comment_snippet_init(request); + if request.snippet.as_mut().unwrap().top_level_comment.as_mut().unwrap().snippet.as_mut().unwrap().author_channel_id.is_none() { + request.snippet.as_mut().unwrap().top_level_comment.as_mut().unwrap().snippet.as_mut().unwrap().author_channel_id = Some(Default::default()); + } + } + + fn request_snippet_top_level_comment_snippet_init(request: &mut api::CommentThread) { + request_snippet_top_level_comment_init(request); + if request.snippet.as_mut().unwrap().top_level_comment.as_mut().unwrap().snippet.is_none() { + request.snippet.as_mut().unwrap().top_level_comment.as_mut().unwrap().snippet = Some(Default::default()); + } + } + + match &temp_cursor.to_string()[..] { + "snippet.is-public" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().is_public = Some(arg_from_str(value.unwrap_or("false"), err, "snippet.is-public", "boolean")); + }, + "snippet.channel-id" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().channel_id = Some(value.unwrap_or("").to_string()); + }, + "snippet.video-id" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().video_id = Some(value.unwrap_or("").to_string()); + }, + "snippet.can-reply" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().can_reply = Some(arg_from_str(value.unwrap_or("false"), err, "snippet.can-reply", "boolean")); + }, + "snippet.total-reply-count" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().total_reply_count = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.total-reply-count", "integer")); + }, + "snippet.top-level-comment.snippet.author-channel-url" => { + request_snippet_top_level_comment_snippet_init(&mut request); + request.snippet.as_mut().unwrap().top_level_comment.as_mut().unwrap().snippet.as_mut().unwrap().author_channel_url = Some(value.unwrap_or("").to_string()); + }, + "snippet.top-level-comment.snippet.viewer-rating" => { + request_snippet_top_level_comment_snippet_init(&mut request); + request.snippet.as_mut().unwrap().top_level_comment.as_mut().unwrap().snippet.as_mut().unwrap().viewer_rating = Some(value.unwrap_or("").to_string()); + }, + "snippet.top-level-comment.snippet.author-display-name" => { + request_snippet_top_level_comment_snippet_init(&mut request); + request.snippet.as_mut().unwrap().top_level_comment.as_mut().unwrap().snippet.as_mut().unwrap().author_display_name = Some(value.unwrap_or("").to_string()); + }, + "snippet.top-level-comment.snippet.channel-id" => { + request_snippet_top_level_comment_snippet_init(&mut request); + request.snippet.as_mut().unwrap().top_level_comment.as_mut().unwrap().snippet.as_mut().unwrap().channel_id = Some(value.unwrap_or("").to_string()); + }, + "snippet.top-level-comment.snippet.video-id" => { + request_snippet_top_level_comment_snippet_init(&mut request); + request.snippet.as_mut().unwrap().top_level_comment.as_mut().unwrap().snippet.as_mut().unwrap().video_id = Some(value.unwrap_or("").to_string()); + }, + "snippet.top-level-comment.snippet.published-at" => { + request_snippet_top_level_comment_snippet_init(&mut request); + request.snippet.as_mut().unwrap().top_level_comment.as_mut().unwrap().snippet.as_mut().unwrap().published_at = Some(value.unwrap_or("").to_string()); + }, + "snippet.top-level-comment.snippet.like-count" => { + request_snippet_top_level_comment_snippet_init(&mut request); + request.snippet.as_mut().unwrap().top_level_comment.as_mut().unwrap().snippet.as_mut().unwrap().like_count = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.top-level-comment.snippet.like-count", "integer")); + }, + "snippet.top-level-comment.snippet.text-original" => { + request_snippet_top_level_comment_snippet_init(&mut request); + request.snippet.as_mut().unwrap().top_level_comment.as_mut().unwrap().snippet.as_mut().unwrap().text_original = Some(value.unwrap_or("").to_string()); + }, + "snippet.top-level-comment.snippet.author-channel-id.value" => { + request_snippet_top_level_comment_snippet_author_channel_id_init(&mut request); + request.snippet.as_mut().unwrap().top_level_comment.as_mut().unwrap().snippet.as_mut().unwrap().author_channel_id.as_mut().unwrap().value = Some(value.unwrap_or("").to_string()); + }, + "snippet.top-level-comment.snippet.parent-id" => { + request_snippet_top_level_comment_snippet_author_channel_id_init(&mut request); + request.snippet.as_mut().unwrap().top_level_comment.as_mut().unwrap().snippet.as_mut().unwrap().parent_id = Some(value.unwrap_or("").to_string()); + }, + "snippet.top-level-comment.snippet.moderation-status" => { + request_snippet_top_level_comment_snippet_author_channel_id_init(&mut request); + request.snippet.as_mut().unwrap().top_level_comment.as_mut().unwrap().snippet.as_mut().unwrap().moderation_status = Some(value.unwrap_or("").to_string()); + }, + "snippet.top-level-comment.snippet.can-rate" => { + request_snippet_top_level_comment_snippet_author_channel_id_init(&mut request); + request.snippet.as_mut().unwrap().top_level_comment.as_mut().unwrap().snippet.as_mut().unwrap().can_rate = Some(arg_from_str(value.unwrap_or("false"), err, "snippet.top-level-comment.snippet.can-rate", "boolean")); + }, + "snippet.top-level-comment.snippet.updated-at" => { + request_snippet_top_level_comment_snippet_author_channel_id_init(&mut request); + request.snippet.as_mut().unwrap().top_level_comment.as_mut().unwrap().snippet.as_mut().unwrap().updated_at = Some(value.unwrap_or("").to_string()); + }, + "snippet.top-level-comment.snippet.author-profile-image-url" => { + request_snippet_top_level_comment_snippet_author_channel_id_init(&mut request); + request.snippet.as_mut().unwrap().top_level_comment.as_mut().unwrap().snippet.as_mut().unwrap().author_profile_image_url = Some(value.unwrap_or("").to_string()); + }, + "snippet.top-level-comment.snippet.author-googleplus-profile-url" => { + request_snippet_top_level_comment_snippet_author_channel_id_init(&mut request); + request.snippet.as_mut().unwrap().top_level_comment.as_mut().unwrap().snippet.as_mut().unwrap().author_googleplus_profile_url = Some(value.unwrap_or("").to_string()); + }, + "snippet.top-level-comment.snippet.text-display" => { + request_snippet_top_level_comment_snippet_author_channel_id_init(&mut request); + request.snippet.as_mut().unwrap().top_level_comment.as_mut().unwrap().snippet.as_mut().unwrap().text_display = Some(value.unwrap_or("").to_string()); + }, + "snippet.top-level-comment.kind" => { + request_snippet_top_level_comment_snippet_init(&mut request); + request.snippet.as_mut().unwrap().top_level_comment.as_mut().unwrap().kind = Some(value.unwrap_or("").to_string()); + }, + "snippet.top-level-comment.etag" => { + request_snippet_top_level_comment_snippet_init(&mut request); + request.snippet.as_mut().unwrap().top_level_comment.as_mut().unwrap().etag = Some(value.unwrap_or("").to_string()); + }, + "snippet.top-level-comment.id" => { + request_snippet_top_level_comment_snippet_init(&mut request); + request.snippet.as_mut().unwrap().top_level_comment.as_mut().unwrap().id = Some(value.unwrap_or("").to_string()); + }, + "kind" => { + request_snippet_init(&mut request); + request.kind = Some(value.unwrap_or("").to_string()); + }, + "etag" => { + request_snippet_init(&mut request); + request.etag = Some(value.unwrap_or("").to_string()); + }, + "id" => { + request_snippet_init(&mut request); + request.id = Some(value.unwrap_or("").to_string()); + }, + _ => { + err.issues.push(CLIError::Field(FieldError::Unknown(temp_cursor.to_string()))); + } + } + } + let mut call = self.hub.comment_threads().insert(request); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { + let (key, value) = parse_kv_arg(&*parg, err, false); + match key { + "share-on-google-plus" => { + call = call.share_on_google_plus(arg_from_str(value.unwrap_or("false"), err, "share-on-google-plus", "boolean")); + }, + "alt" + |"fields" + |"key" + |"oauth-token" + |"pretty-print" + |"quota-user" + |"user-ip" => { + let map = [ + ("oauth-token", "oauth_token"), + ("pretty-print", "prettyPrint"), + ("quota-user", "quotaUser"), + ("user-ip", "userIp"), + ]; + call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) + }, + _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), + } + } + let protocol = CallType::Standard; + if dry_run { + Ok(()) + } else { + assert!(err.issues.len() == 0); + for scope in self.opt.values_of("url").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(), + _ => unreachable!() + } { + Err(api_err) => Err(DoitError::ApiError(api_err)), + Ok((mut response, output_schema)) => { + serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); + Ok(()) + } + } + } + } + + fn _comment_threads_list(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + let mut call = self.hub.comment_threads().list(opt.value_of("part").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { + let (key, value) = parse_kv_arg(&*parg, err, false); + match key { + "video-id" => { + call = call.video_id(value.unwrap_or("")); + }, + "text-format" => { + call = call.text_format(value.unwrap_or("")); + }, + "search-terms" => { + call = call.search_terms(value.unwrap_or("")); + }, + "page-token" => { + call = call.page_token(value.unwrap_or("")); + }, + "moderation-status" => { + call = call.moderation_status(value.unwrap_or("")); + }, + "max-results" => { + call = call.max_results(arg_from_str(value.unwrap_or("-0"), err, "max-results", "integer")); + }, + "id" => { + call = call.id(value.unwrap_or("")); + }, + "channel-id" => { + call = call.channel_id(value.unwrap_or("")); + }, + "all-threads-related-to-channel-id" => { + call = call.all_threads_related_to_channel_id(value.unwrap_or("")); + }, + "alt" + |"fields" + |"key" + |"oauth-token" + |"pretty-print" + |"quota-user" + |"user-ip" => { + let map = [ + ("oauth-token", "oauth_token"), + ("pretty-print", "prettyPrint"), + ("quota-user", "quotaUser"), + ("user-ip", "userIp"), + ]; + call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) + }, + _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), + } + } + let protocol = CallType::Standard; + if dry_run { + Ok(()) + } else { + assert!(err.issues.len() == 0); + for scope in self.opt.values_of("url").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(), + _ => unreachable!() + } { + Err(api_err) => Err(DoitError::ApiError(api_err)), + Ok((mut response, output_schema)) => { + serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); + Ok(()) + } + } + } + } + + fn _comment_threads_update(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + + let mut request = api::CommentThread::default(); + let mut field_cursor = FieldCursor::default(); + for kvarg in opt.values_of("kv").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; + } + fn request_snippet_init(request: &mut api::CommentThread) { + if request.snippet.is_none() { + request.snippet = Some(Default::default()); + } + } + + fn request_snippet_top_level_comment_init(request: &mut api::CommentThread) { + request_snippet_init(request); + if request.snippet.as_mut().unwrap().top_level_comment.is_none() { + request.snippet.as_mut().unwrap().top_level_comment = Some(Default::default()); + } + } + + fn request_snippet_top_level_comment_snippet_author_channel_id_init(request: &mut api::CommentThread) { + request_snippet_top_level_comment_snippet_init(request); + if request.snippet.as_mut().unwrap().top_level_comment.as_mut().unwrap().snippet.as_mut().unwrap().author_channel_id.is_none() { + request.snippet.as_mut().unwrap().top_level_comment.as_mut().unwrap().snippet.as_mut().unwrap().author_channel_id = Some(Default::default()); + } + } + + fn request_snippet_top_level_comment_snippet_init(request: &mut api::CommentThread) { + request_snippet_top_level_comment_init(request); + if request.snippet.as_mut().unwrap().top_level_comment.as_mut().unwrap().snippet.is_none() { + request.snippet.as_mut().unwrap().top_level_comment.as_mut().unwrap().snippet = Some(Default::default()); + } + } + + match &temp_cursor.to_string()[..] { + "snippet.is-public" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().is_public = Some(arg_from_str(value.unwrap_or("false"), err, "snippet.is-public", "boolean")); + }, + "snippet.channel-id" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().channel_id = Some(value.unwrap_or("").to_string()); + }, + "snippet.video-id" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().video_id = Some(value.unwrap_or("").to_string()); + }, + "snippet.can-reply" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().can_reply = Some(arg_from_str(value.unwrap_or("false"), err, "snippet.can-reply", "boolean")); + }, + "snippet.total-reply-count" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().total_reply_count = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.total-reply-count", "integer")); + }, + "snippet.top-level-comment.snippet.author-channel-url" => { + request_snippet_top_level_comment_snippet_init(&mut request); + request.snippet.as_mut().unwrap().top_level_comment.as_mut().unwrap().snippet.as_mut().unwrap().author_channel_url = Some(value.unwrap_or("").to_string()); + }, + "snippet.top-level-comment.snippet.viewer-rating" => { + request_snippet_top_level_comment_snippet_init(&mut request); + request.snippet.as_mut().unwrap().top_level_comment.as_mut().unwrap().snippet.as_mut().unwrap().viewer_rating = Some(value.unwrap_or("").to_string()); + }, + "snippet.top-level-comment.snippet.author-display-name" => { + request_snippet_top_level_comment_snippet_init(&mut request); + request.snippet.as_mut().unwrap().top_level_comment.as_mut().unwrap().snippet.as_mut().unwrap().author_display_name = Some(value.unwrap_or("").to_string()); + }, + "snippet.top-level-comment.snippet.channel-id" => { + request_snippet_top_level_comment_snippet_init(&mut request); + request.snippet.as_mut().unwrap().top_level_comment.as_mut().unwrap().snippet.as_mut().unwrap().channel_id = Some(value.unwrap_or("").to_string()); + }, + "snippet.top-level-comment.snippet.video-id" => { + request_snippet_top_level_comment_snippet_init(&mut request); + request.snippet.as_mut().unwrap().top_level_comment.as_mut().unwrap().snippet.as_mut().unwrap().video_id = Some(value.unwrap_or("").to_string()); + }, + "snippet.top-level-comment.snippet.published-at" => { + request_snippet_top_level_comment_snippet_init(&mut request); + request.snippet.as_mut().unwrap().top_level_comment.as_mut().unwrap().snippet.as_mut().unwrap().published_at = Some(value.unwrap_or("").to_string()); + }, + "snippet.top-level-comment.snippet.like-count" => { + request_snippet_top_level_comment_snippet_init(&mut request); + request.snippet.as_mut().unwrap().top_level_comment.as_mut().unwrap().snippet.as_mut().unwrap().like_count = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.top-level-comment.snippet.like-count", "integer")); + }, + "snippet.top-level-comment.snippet.text-original" => { + request_snippet_top_level_comment_snippet_init(&mut request); + request.snippet.as_mut().unwrap().top_level_comment.as_mut().unwrap().snippet.as_mut().unwrap().text_original = Some(value.unwrap_or("").to_string()); + }, + "snippet.top-level-comment.snippet.author-channel-id.value" => { + request_snippet_top_level_comment_snippet_author_channel_id_init(&mut request); + request.snippet.as_mut().unwrap().top_level_comment.as_mut().unwrap().snippet.as_mut().unwrap().author_channel_id.as_mut().unwrap().value = Some(value.unwrap_or("").to_string()); + }, + "snippet.top-level-comment.snippet.parent-id" => { + request_snippet_top_level_comment_snippet_author_channel_id_init(&mut request); + request.snippet.as_mut().unwrap().top_level_comment.as_mut().unwrap().snippet.as_mut().unwrap().parent_id = Some(value.unwrap_or("").to_string()); + }, + "snippet.top-level-comment.snippet.moderation-status" => { + request_snippet_top_level_comment_snippet_author_channel_id_init(&mut request); + request.snippet.as_mut().unwrap().top_level_comment.as_mut().unwrap().snippet.as_mut().unwrap().moderation_status = Some(value.unwrap_or("").to_string()); + }, + "snippet.top-level-comment.snippet.can-rate" => { + request_snippet_top_level_comment_snippet_author_channel_id_init(&mut request); + request.snippet.as_mut().unwrap().top_level_comment.as_mut().unwrap().snippet.as_mut().unwrap().can_rate = Some(arg_from_str(value.unwrap_or("false"), err, "snippet.top-level-comment.snippet.can-rate", "boolean")); + }, + "snippet.top-level-comment.snippet.updated-at" => { + request_snippet_top_level_comment_snippet_author_channel_id_init(&mut request); + request.snippet.as_mut().unwrap().top_level_comment.as_mut().unwrap().snippet.as_mut().unwrap().updated_at = Some(value.unwrap_or("").to_string()); + }, + "snippet.top-level-comment.snippet.author-profile-image-url" => { + request_snippet_top_level_comment_snippet_author_channel_id_init(&mut request); + request.snippet.as_mut().unwrap().top_level_comment.as_mut().unwrap().snippet.as_mut().unwrap().author_profile_image_url = Some(value.unwrap_or("").to_string()); + }, + "snippet.top-level-comment.snippet.author-googleplus-profile-url" => { + request_snippet_top_level_comment_snippet_author_channel_id_init(&mut request); + request.snippet.as_mut().unwrap().top_level_comment.as_mut().unwrap().snippet.as_mut().unwrap().author_googleplus_profile_url = Some(value.unwrap_or("").to_string()); + }, + "snippet.top-level-comment.snippet.text-display" => { + request_snippet_top_level_comment_snippet_author_channel_id_init(&mut request); + request.snippet.as_mut().unwrap().top_level_comment.as_mut().unwrap().snippet.as_mut().unwrap().text_display = Some(value.unwrap_or("").to_string()); + }, + "snippet.top-level-comment.kind" => { + request_snippet_top_level_comment_snippet_init(&mut request); + request.snippet.as_mut().unwrap().top_level_comment.as_mut().unwrap().kind = Some(value.unwrap_or("").to_string()); + }, + "snippet.top-level-comment.etag" => { + request_snippet_top_level_comment_snippet_init(&mut request); + request.snippet.as_mut().unwrap().top_level_comment.as_mut().unwrap().etag = Some(value.unwrap_or("").to_string()); + }, + "snippet.top-level-comment.id" => { + request_snippet_top_level_comment_snippet_init(&mut request); + request.snippet.as_mut().unwrap().top_level_comment.as_mut().unwrap().id = Some(value.unwrap_or("").to_string()); + }, + "kind" => { + request_snippet_init(&mut request); + request.kind = Some(value.unwrap_or("").to_string()); + }, + "etag" => { + request_snippet_init(&mut request); + request.etag = Some(value.unwrap_or("").to_string()); + }, + "id" => { + request_snippet_init(&mut request); + request.id = Some(value.unwrap_or("").to_string()); + }, + _ => { + err.issues.push(CLIError::Field(FieldError::Unknown(temp_cursor.to_string()))); + } + } + } + let mut call = self.hub.comment_threads().update(request); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { + let (key, value) = parse_kv_arg(&*parg, err, false); + match key { + "alt" + |"fields" + |"key" + |"oauth-token" + |"pretty-print" + |"quota-user" + |"user-ip" => { + let map = [ + ("oauth-token", "oauth_token"), + ("pretty-print", "prettyPrint"), + ("quota-user", "quotaUser"), + ("user-ip", "userIp"), + ]; + call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) + }, + _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), + } + } + let protocol = CallType::Standard; + if dry_run { + Ok(()) + } else { + assert!(err.issues.len() == 0); + for scope in self.opt.values_of("url").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(), + _ => unreachable!() + } { + Err(api_err) => Err(DoitError::ApiError(api_err)), + Ok((mut response, output_schema)) => { + serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); + Ok(()) + } + } + } + } + + fn _comments_delete(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + let mut call = self.hub.comments().delete(opt.value_of("id").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { + let (key, value) = parse_kv_arg(&*parg, err, false); + match key { + "alt" + |"fields" + |"key" + |"oauth-token" + |"pretty-print" + |"quota-user" + |"user-ip" => { + let map = [ + ("oauth-token", "oauth_token"), + ("pretty-print", "prettyPrint"), + ("quota-user", "quotaUser"), + ("user-ip", "userIp"), + ]; + call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) + }, + _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), + } + } + let protocol = CallType::Standard; + if dry_run { + Ok(()) + } else { + assert!(err.issues.len() == 0); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); + } + match match protocol { + CallType::Standard => call.doit(), + _ => unreachable!() + } { + Err(api_err) => Err(DoitError::ApiError(api_err)), + Ok(mut response) => { + Ok(()) + } + } + } + } + + fn _comments_insert(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + + let mut request = api::Comment::default(); + let mut field_cursor = FieldCursor::default(); + for kvarg in opt.values_of("kv").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; + } + fn request_snippet_author_channel_id_init(request: &mut api::Comment) { + request_snippet_init(request); + if request.snippet.as_mut().unwrap().author_channel_id.is_none() { + request.snippet.as_mut().unwrap().author_channel_id = Some(Default::default()); + } + } + + fn request_snippet_init(request: &mut api::Comment) { + if request.snippet.is_none() { + request.snippet = Some(Default::default()); + } + } + + match &temp_cursor.to_string()[..] { + "snippet.author-channel-url" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().author_channel_url = Some(value.unwrap_or("").to_string()); + }, + "snippet.viewer-rating" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().viewer_rating = Some(value.unwrap_or("").to_string()); + }, + "snippet.author-display-name" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().author_display_name = Some(value.unwrap_or("").to_string()); + }, + "snippet.channel-id" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().channel_id = Some(value.unwrap_or("").to_string()); + }, + "snippet.video-id" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().video_id = Some(value.unwrap_or("").to_string()); + }, + "snippet.published-at" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().published_at = Some(value.unwrap_or("").to_string()); + }, + "snippet.like-count" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().like_count = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.like-count", "integer")); + }, + "snippet.text-original" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().text_original = Some(value.unwrap_or("").to_string()); + }, + "snippet.author-channel-id.value" => { + request_snippet_author_channel_id_init(&mut request); + request.snippet.as_mut().unwrap().author_channel_id.as_mut().unwrap().value = Some(value.unwrap_or("").to_string()); + }, + "snippet.parent-id" => { + request_snippet_author_channel_id_init(&mut request); + request.snippet.as_mut().unwrap().parent_id = Some(value.unwrap_or("").to_string()); + }, + "snippet.moderation-status" => { + request_snippet_author_channel_id_init(&mut request); + request.snippet.as_mut().unwrap().moderation_status = Some(value.unwrap_or("").to_string()); + }, + "snippet.can-rate" => { + request_snippet_author_channel_id_init(&mut request); + request.snippet.as_mut().unwrap().can_rate = Some(arg_from_str(value.unwrap_or("false"), err, "snippet.can-rate", "boolean")); + }, + "snippet.updated-at" => { + request_snippet_author_channel_id_init(&mut request); + request.snippet.as_mut().unwrap().updated_at = Some(value.unwrap_or("").to_string()); + }, + "snippet.author-profile-image-url" => { + request_snippet_author_channel_id_init(&mut request); + request.snippet.as_mut().unwrap().author_profile_image_url = Some(value.unwrap_or("").to_string()); + }, + "snippet.author-googleplus-profile-url" => { + request_snippet_author_channel_id_init(&mut request); + request.snippet.as_mut().unwrap().author_googleplus_profile_url = Some(value.unwrap_or("").to_string()); + }, + "snippet.text-display" => { + request_snippet_author_channel_id_init(&mut request); + request.snippet.as_mut().unwrap().text_display = Some(value.unwrap_or("").to_string()); + }, + "kind" => { + request_snippet_init(&mut request); + request.kind = Some(value.unwrap_or("").to_string()); + }, + "etag" => { + request_snippet_init(&mut request); + request.etag = Some(value.unwrap_or("").to_string()); + }, + "id" => { + request_snippet_init(&mut request); + request.id = Some(value.unwrap_or("").to_string()); + }, + _ => { + err.issues.push(CLIError::Field(FieldError::Unknown(temp_cursor.to_string()))); + } + } + } + let mut call = self.hub.comments().insert(request); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { + let (key, value) = parse_kv_arg(&*parg, err, false); + match key { + "alt" + |"fields" + |"key" + |"oauth-token" + |"pretty-print" + |"quota-user" + |"user-ip" => { + let map = [ + ("oauth-token", "oauth_token"), + ("pretty-print", "prettyPrint"), + ("quota-user", "quotaUser"), + ("user-ip", "userIp"), + ]; + call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) + }, + _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), + } + } + let protocol = CallType::Standard; + if dry_run { + Ok(()) + } else { + assert!(err.issues.len() == 0); + for scope in self.opt.values_of("url").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(), + _ => unreachable!() + } { + Err(api_err) => Err(DoitError::ApiError(api_err)), + Ok((mut response, output_schema)) => { + serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); + Ok(()) + } + } + } + } + + fn _comments_list(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + let mut call = self.hub.comments().list(opt.value_of("part").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { + let (key, value) = parse_kv_arg(&*parg, err, false); + match key { + "text-format" => { + call = call.text_format(value.unwrap_or("")); + }, + "parent-id" => { + call = call.parent_id(value.unwrap_or("")); + }, + "page-token" => { + call = call.page_token(value.unwrap_or("")); + }, + "max-results" => { + call = call.max_results(arg_from_str(value.unwrap_or("-0"), err, "max-results", "integer")); + }, + "id" => { + call = call.id(value.unwrap_or("")); + }, + "alt" + |"fields" + |"key" + |"oauth-token" + |"pretty-print" + |"quota-user" + |"user-ip" => { + let map = [ + ("oauth-token", "oauth_token"), + ("pretty-print", "prettyPrint"), + ("quota-user", "quotaUser"), + ("user-ip", "userIp"), + ]; + call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) + }, + _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), + } + } + let protocol = CallType::Standard; + if dry_run { + Ok(()) + } else { + assert!(err.issues.len() == 0); + for scope in self.opt.values_of("url").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(), + _ => unreachable!() + } { + Err(api_err) => Err(DoitError::ApiError(api_err)), + Ok((mut response, output_schema)) => { + serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); + Ok(()) + } + } + } + } + + fn _comments_mark_as_spam(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + let mut call = self.hub.comments().mark_as_spam(opt.value_of("id").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { + let (key, value) = parse_kv_arg(&*parg, err, false); + match key { + "alt" + |"fields" + |"key" + |"oauth-token" + |"pretty-print" + |"quota-user" + |"user-ip" => { + let map = [ + ("oauth-token", "oauth_token"), + ("pretty-print", "prettyPrint"), + ("quota-user", "quotaUser"), + ("user-ip", "userIp"), + ]; + call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) + }, + _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), + } + } + let protocol = CallType::Standard; + if dry_run { + Ok(()) + } else { + assert!(err.issues.len() == 0); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); + } + match match protocol { + CallType::Standard => call.doit(), + _ => unreachable!() + } { + Err(api_err) => Err(DoitError::ApiError(api_err)), + Ok(mut response) => { + Ok(()) + } + } + } + } + + fn _comments_set_moderation_status(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + let mut call = self.hub.comments().set_moderation_status(opt.value_of("id").unwrap_or(""), opt.value_of("moderation-status").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { + let (key, value) = parse_kv_arg(&*parg, err, false); + match key { + "ban-author" => { + call = call.ban_author(arg_from_str(value.unwrap_or("false"), err, "ban-author", "boolean")); + }, + "alt" + |"fields" + |"key" + |"oauth-token" + |"pretty-print" + |"quota-user" + |"user-ip" => { + let map = [ + ("oauth-token", "oauth_token"), + ("pretty-print", "prettyPrint"), + ("quota-user", "quotaUser"), + ("user-ip", "userIp"), + ]; + call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) + }, + _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), + } + } + let protocol = CallType::Standard; + if dry_run { + Ok(()) + } else { + assert!(err.issues.len() == 0); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); + } + match match protocol { + CallType::Standard => call.doit(), + _ => unreachable!() + } { + Err(api_err) => Err(DoitError::ApiError(api_err)), + Ok(mut response) => { + Ok(()) + } + } + } + } + + fn _comments_update(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + + let mut request = api::Comment::default(); + let mut field_cursor = FieldCursor::default(); + for kvarg in opt.values_of("kv").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; + } + fn request_snippet_author_channel_id_init(request: &mut api::Comment) { + request_snippet_init(request); + if request.snippet.as_mut().unwrap().author_channel_id.is_none() { + request.snippet.as_mut().unwrap().author_channel_id = Some(Default::default()); + } + } + + fn request_snippet_init(request: &mut api::Comment) { + if request.snippet.is_none() { + request.snippet = Some(Default::default()); + } + } + + match &temp_cursor.to_string()[..] { + "snippet.author-channel-url" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().author_channel_url = Some(value.unwrap_or("").to_string()); + }, + "snippet.viewer-rating" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().viewer_rating = Some(value.unwrap_or("").to_string()); + }, + "snippet.author-display-name" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().author_display_name = Some(value.unwrap_or("").to_string()); + }, + "snippet.channel-id" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().channel_id = Some(value.unwrap_or("").to_string()); + }, + "snippet.video-id" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().video_id = Some(value.unwrap_or("").to_string()); + }, + "snippet.published-at" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().published_at = Some(value.unwrap_or("").to_string()); + }, + "snippet.like-count" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().like_count = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.like-count", "integer")); + }, + "snippet.text-original" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().text_original = Some(value.unwrap_or("").to_string()); + }, + "snippet.author-channel-id.value" => { + request_snippet_author_channel_id_init(&mut request); + request.snippet.as_mut().unwrap().author_channel_id.as_mut().unwrap().value = Some(value.unwrap_or("").to_string()); + }, + "snippet.parent-id" => { + request_snippet_author_channel_id_init(&mut request); + request.snippet.as_mut().unwrap().parent_id = Some(value.unwrap_or("").to_string()); + }, + "snippet.moderation-status" => { + request_snippet_author_channel_id_init(&mut request); + request.snippet.as_mut().unwrap().moderation_status = Some(value.unwrap_or("").to_string()); + }, + "snippet.can-rate" => { + request_snippet_author_channel_id_init(&mut request); + request.snippet.as_mut().unwrap().can_rate = Some(arg_from_str(value.unwrap_or("false"), err, "snippet.can-rate", "boolean")); + }, + "snippet.updated-at" => { + request_snippet_author_channel_id_init(&mut request); + request.snippet.as_mut().unwrap().updated_at = Some(value.unwrap_or("").to_string()); + }, + "snippet.author-profile-image-url" => { + request_snippet_author_channel_id_init(&mut request); + request.snippet.as_mut().unwrap().author_profile_image_url = Some(value.unwrap_or("").to_string()); + }, + "snippet.author-googleplus-profile-url" => { + request_snippet_author_channel_id_init(&mut request); + request.snippet.as_mut().unwrap().author_googleplus_profile_url = Some(value.unwrap_or("").to_string()); + }, + "snippet.text-display" => { + request_snippet_author_channel_id_init(&mut request); + request.snippet.as_mut().unwrap().text_display = Some(value.unwrap_or("").to_string()); + }, + "kind" => { + request_snippet_init(&mut request); + request.kind = Some(value.unwrap_or("").to_string()); + }, + "etag" => { + request_snippet_init(&mut request); + request.etag = Some(value.unwrap_or("").to_string()); + }, + "id" => { + request_snippet_init(&mut request); + request.id = Some(value.unwrap_or("").to_string()); + }, + _ => { + err.issues.push(CLIError::Field(FieldError::Unknown(temp_cursor.to_string()))); + } + } + } + let mut call = self.hub.comments().update(request); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { + let (key, value) = parse_kv_arg(&*parg, err, false); + match key { + "alt" + |"fields" + |"key" + |"oauth-token" + |"pretty-print" + |"quota-user" + |"user-ip" => { + let map = [ + ("oauth-token", "oauth_token"), + ("pretty-print", "prettyPrint"), + ("quota-user", "quotaUser"), + ("user-ip", "userIp"), + ]; + call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) + }, + _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), + } + } + let protocol = CallType::Standard; + if dry_run { + Ok(()) + } else { + assert!(err.issues.len() == 0); + for scope in self.opt.values_of("url").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(), + _ => unreachable!() + } { + Err(api_err) => Err(DoitError::ApiError(api_err)), + Ok((mut response, output_schema)) => { + serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); + Ok(()) + } + } + } + } + + fn _guide_categories_list(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + let mut call = self.hub.guide_categories().list(opt.value_of("part").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { + let (key, value) = parse_kv_arg(&*parg, err, false); + match key { + "region-code" => { + call = call.region_code(value.unwrap_or("")); + }, + "id" => { + call = call.id(value.unwrap_or("")); + }, + "hl" => { + call = call.hl(value.unwrap_or("")); + }, + "alt" + |"fields" + |"key" + |"oauth-token" + |"pretty-print" + |"quota-user" + |"user-ip" => { + let map = [ + ("oauth-token", "oauth_token"), + ("pretty-print", "prettyPrint"), + ("quota-user", "quotaUser"), + ("user-ip", "userIp"), + ]; + call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) + }, + _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), + } + } + let protocol = CallType::Standard; + if dry_run { + Ok(()) + } else { + assert!(err.issues.len() == 0); + for scope in self.opt.values_of("url").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(), + _ => unreachable!() + } { + Err(api_err) => Err(DoitError::ApiError(api_err)), + Ok((mut response, output_schema)) => { + serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); + Ok(()) + } + } + } + } + + fn _i18n_languages_list(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + let mut call = self.hub.i18n_languages().list(opt.value_of("part").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { + let (key, value) = parse_kv_arg(&*parg, err, false); + match key { + "hl" => { + call = call.hl(value.unwrap_or("")); + }, + "alt" + |"fields" + |"key" + |"oauth-token" + |"pretty-print" + |"quota-user" + |"user-ip" => { + let map = [ + ("oauth-token", "oauth_token"), + ("pretty-print", "prettyPrint"), + ("quota-user", "quotaUser"), + ("user-ip", "userIp"), + ]; + call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) + }, + _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), + } + } + let protocol = CallType::Standard; + if dry_run { + Ok(()) + } else { + assert!(err.issues.len() == 0); + for scope in self.opt.values_of("url").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(), + _ => unreachable!() + } { + Err(api_err) => Err(DoitError::ApiError(api_err)), + Ok((mut response, output_schema)) => { + serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); + Ok(()) + } + } + } + } + + fn _i18n_regions_list(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + let mut call = self.hub.i18n_regions().list(opt.value_of("part").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { + let (key, value) = parse_kv_arg(&*parg, err, false); + match key { + "hl" => { + call = call.hl(value.unwrap_or("")); + }, + "alt" + |"fields" + |"key" + |"oauth-token" + |"pretty-print" + |"quota-user" + |"user-ip" => { + let map = [ + ("oauth-token", "oauth_token"), + ("pretty-print", "prettyPrint"), + ("quota-user", "quotaUser"), + ("user-ip", "userIp"), + ]; + call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) + }, + _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), + } + } + let protocol = CallType::Standard; + if dry_run { + Ok(()) + } else { + assert!(err.issues.len() == 0); + for scope in self.opt.values_of("url").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(), + _ => unreachable!() + } { + Err(api_err) => Err(DoitError::ApiError(api_err)), + Ok((mut response, output_schema)) => { + serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); + Ok(()) + } + } + } + } + + fn _live_broadcasts_bind(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + let mut call = self.hub.live_broadcasts().bind(opt.value_of("id").unwrap_or(""), opt.value_of("part").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { + let (key, value) = parse_kv_arg(&*parg, err, false); + match key { + "stream-id" => { + call = call.stream_id(value.unwrap_or("")); + }, + "on-behalf-of-content-owner-channel" => { + call = call.on_behalf_of_content_owner_channel(value.unwrap_or("")); + }, + "on-behalf-of-content-owner" => { + call = call.on_behalf_of_content_owner(value.unwrap_or("")); + }, + "alt" + |"fields" + |"key" + |"oauth-token" + |"pretty-print" + |"quota-user" + |"user-ip" => { + let map = [ + ("oauth-token", "oauth_token"), + ("pretty-print", "prettyPrint"), + ("quota-user", "quotaUser"), + ("user-ip", "userIp"), + ]; + call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) + }, + _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), + } + } + let protocol = CallType::Standard; + if dry_run { + Ok(()) + } else { + assert!(err.issues.len() == 0); + for scope in self.opt.values_of("url").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(), + _ => unreachable!() + } { + Err(api_err) => Err(DoitError::ApiError(api_err)), + Ok((mut response, output_schema)) => { + serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); + Ok(()) + } + } + } + } + + fn _live_broadcasts_control(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + let mut call = self.hub.live_broadcasts().control(opt.value_of("id").unwrap_or(""), opt.value_of("part").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { + let (key, value) = parse_kv_arg(&*parg, err, false); + match key { + "walltime" => { + call = call.walltime(value.unwrap_or("")); + }, + "on-behalf-of-content-owner-channel" => { + call = call.on_behalf_of_content_owner_channel(value.unwrap_or("")); + }, + "on-behalf-of-content-owner" => { + call = call.on_behalf_of_content_owner(value.unwrap_or("")); + }, + "offset-time-ms" => { + call = call.offset_time_ms(value.unwrap_or("")); + }, + "display-slate" => { + call = call.display_slate(arg_from_str(value.unwrap_or("false"), err, "display-slate", "boolean")); + }, + "alt" + |"fields" + |"key" + |"oauth-token" + |"pretty-print" + |"quota-user" + |"user-ip" => { + let map = [ + ("oauth-token", "oauth_token"), + ("pretty-print", "prettyPrint"), + ("quota-user", "quotaUser"), + ("user-ip", "userIp"), + ]; + call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) + }, + _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), + } + } + let protocol = CallType::Standard; + if dry_run { + Ok(()) + } else { + assert!(err.issues.len() == 0); + for scope in self.opt.values_of("url").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(), + _ => unreachable!() + } { + Err(api_err) => Err(DoitError::ApiError(api_err)), + Ok((mut response, output_schema)) => { + serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); + Ok(()) + } + } + } + } + + fn _live_broadcasts_delete(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + let mut call = self.hub.live_broadcasts().delete(opt.value_of("id").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { + let (key, value) = parse_kv_arg(&*parg, err, false); + match key { + "on-behalf-of-content-owner-channel" => { + call = call.on_behalf_of_content_owner_channel(value.unwrap_or("")); + }, + "on-behalf-of-content-owner" => { + call = call.on_behalf_of_content_owner(value.unwrap_or("")); + }, + "alt" + |"fields" + |"key" + |"oauth-token" + |"pretty-print" + |"quota-user" + |"user-ip" => { + let map = [ + ("oauth-token", "oauth_token"), + ("pretty-print", "prettyPrint"), + ("quota-user", "quotaUser"), + ("user-ip", "userIp"), + ]; + call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) + }, + _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), + } + } + let protocol = CallType::Standard; + if dry_run { + Ok(()) + } else { + assert!(err.issues.len() == 0); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); + } + match match protocol { + CallType::Standard => call.doit(), + _ => unreachable!() + } { + Err(api_err) => Err(DoitError::ApiError(api_err)), + Ok(mut response) => { + Ok(()) + } + } + } + } + + fn _live_broadcasts_insert(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + + let mut request = api::LiveBroadcast::default(); + let mut field_cursor = FieldCursor::default(); + for kvarg in opt.values_of("kv").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; + } + fn request_content_details_init(request: &mut api::LiveBroadcast) { + if request.content_details.is_none() { + request.content_details = Some(Default::default()); + } + } + + fn request_content_details_monitor_stream_init(request: &mut api::LiveBroadcast) { + request_content_details_init(request); + if request.content_details.as_mut().unwrap().monitor_stream.is_none() { + request.content_details.as_mut().unwrap().monitor_stream = Some(Default::default()); + } + } + + fn request_snippet_init(request: &mut api::LiveBroadcast) { + if request.snippet.is_none() { + request.snippet = Some(Default::default()); + } + } + + fn request_snippet_thumbnails_default_init(request: &mut api::LiveBroadcast) { + request_snippet_thumbnails_init(request); + if request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().default.is_none() { + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().default = Some(Default::default()); + } + } + + fn request_snippet_thumbnails_high_init(request: &mut api::LiveBroadcast) { + request_snippet_thumbnails_init(request); + if request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().high.is_none() { + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().high = Some(Default::default()); + } + } + + fn request_snippet_thumbnails_init(request: &mut api::LiveBroadcast) { + request_snippet_init(request); + if request.snippet.as_mut().unwrap().thumbnails.is_none() { + request.snippet.as_mut().unwrap().thumbnails = Some(Default::default()); + } + } + + fn request_snippet_thumbnails_maxres_init(request: &mut api::LiveBroadcast) { + request_snippet_thumbnails_init(request); + if request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().maxres.is_none() { + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().maxres = Some(Default::default()); + } + } + + fn request_snippet_thumbnails_medium_init(request: &mut api::LiveBroadcast) { + request_snippet_thumbnails_init(request); + if request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().medium.is_none() { + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().medium = Some(Default::default()); + } + } + + fn request_snippet_thumbnails_standard_init(request: &mut api::LiveBroadcast) { + request_snippet_thumbnails_init(request); + if request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().standard.is_none() { + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().standard = Some(Default::default()); + } + } + + fn request_status_init(request: &mut api::LiveBroadcast) { + if request.status.is_none() { + request.status = Some(Default::default()); + } + } + + match &temp_cursor.to_string()[..] { + "status.recording-status" => { + request_status_init(&mut request); + request.status.as_mut().unwrap().recording_status = Some(value.unwrap_or("").to_string()); + }, + "status.privacy-status" => { + request_status_init(&mut request); + request.status.as_mut().unwrap().privacy_status = Some(value.unwrap_or("").to_string()); + }, + "status.life-cycle-status" => { + request_status_init(&mut request); + request.status.as_mut().unwrap().life_cycle_status = Some(value.unwrap_or("").to_string()); + }, + "status.is-default-broadcast" => { + request_status_init(&mut request); + request.status.as_mut().unwrap().is_default_broadcast = Some(arg_from_str(value.unwrap_or("false"), err, "status.is-default-broadcast", "boolean")); + }, + "status.live-broadcast-priority" => { + request_status_init(&mut request); + request.status.as_mut().unwrap().live_broadcast_priority = Some(value.unwrap_or("").to_string()); + }, + "kind" => { + request_status_init(&mut request); + request.kind = Some(value.unwrap_or("").to_string()); + }, + "content-details.start-with-slate" => { + request_content_details_init(&mut request); + request.content_details.as_mut().unwrap().start_with_slate = Some(arg_from_str(value.unwrap_or("false"), err, "content-details.start-with-slate", "boolean")); + }, + "content-details.bound-stream-id" => { + request_content_details_init(&mut request); + request.content_details.as_mut().unwrap().bound_stream_id = Some(value.unwrap_or("").to_string()); + }, + "content-details.enable-embed" => { + request_content_details_init(&mut request); + request.content_details.as_mut().unwrap().enable_embed = Some(arg_from_str(value.unwrap_or("false"), err, "content-details.enable-embed", "boolean")); + }, + "content-details.enable-closed-captions" => { + request_content_details_init(&mut request); + request.content_details.as_mut().unwrap().enable_closed_captions = Some(arg_from_str(value.unwrap_or("false"), err, "content-details.enable-closed-captions", "boolean")); + }, + "content-details.enable-content-encryption" => { + request_content_details_init(&mut request); + request.content_details.as_mut().unwrap().enable_content_encryption = Some(arg_from_str(value.unwrap_or("false"), err, "content-details.enable-content-encryption", "boolean")); + }, + "content-details.record-from-start" => { + request_content_details_init(&mut request); + request.content_details.as_mut().unwrap().record_from_start = Some(arg_from_str(value.unwrap_or("false"), err, "content-details.record-from-start", "boolean")); + }, + "content-details.enable-dvr" => { + request_content_details_init(&mut request); + request.content_details.as_mut().unwrap().enable_dvr = Some(arg_from_str(value.unwrap_or("false"), err, "content-details.enable-dvr", "boolean")); + }, + "content-details.monitor-stream.broadcast-stream-delay-ms" => { + request_content_details_monitor_stream_init(&mut request); + request.content_details.as_mut().unwrap().monitor_stream.as_mut().unwrap().broadcast_stream_delay_ms = Some(arg_from_str(value.unwrap_or("-0"), err, "content-details.monitor-stream.broadcast-stream-delay-ms", "integer")); + }, + "content-details.monitor-stream.embed-html" => { + request_content_details_monitor_stream_init(&mut request); + request.content_details.as_mut().unwrap().monitor_stream.as_mut().unwrap().embed_html = Some(value.unwrap_or("").to_string()); + }, + "content-details.monitor-stream.enable-monitor-stream" => { + request_content_details_monitor_stream_init(&mut request); + request.content_details.as_mut().unwrap().monitor_stream.as_mut().unwrap().enable_monitor_stream = Some(arg_from_str(value.unwrap_or("false"), err, "content-details.monitor-stream.enable-monitor-stream", "boolean")); + }, + "snippet.actual-end-time" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().actual_end_time = Some(value.unwrap_or("").to_string()); + }, + "snippet.description" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().description = Some(value.unwrap_or("").to_string()); + }, + "snippet.title" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().title = Some(value.unwrap_or("").to_string()); + }, + "snippet.channel-id" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().channel_id = Some(value.unwrap_or("").to_string()); + }, + "snippet.published-at" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().published_at = Some(value.unwrap_or("").to_string()); + }, + "snippet.scheduled-start-time" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().scheduled_start_time = Some(value.unwrap_or("").to_string()); + }, + "snippet.actual-start-time" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().actual_start_time = Some(value.unwrap_or("").to_string()); + }, + "snippet.scheduled-end-time" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().scheduled_end_time = Some(value.unwrap_or("").to_string()); + }, + "snippet.thumbnails.default.url" => { + request_snippet_thumbnails_default_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().default.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); + }, + "snippet.thumbnails.default.width" => { + request_snippet_thumbnails_default_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().default.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.default.width", "integer")); + }, + "snippet.thumbnails.default.height" => { + request_snippet_thumbnails_default_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().default.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.default.height", "integer")); + }, + "snippet.thumbnails.high.url" => { + request_snippet_thumbnails_high_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().high.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); + }, + "snippet.thumbnails.high.width" => { + request_snippet_thumbnails_high_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().high.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.high.width", "integer")); + }, + "snippet.thumbnails.high.height" => { + request_snippet_thumbnails_high_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().high.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.high.height", "integer")); + }, + "snippet.thumbnails.medium.url" => { + request_snippet_thumbnails_medium_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().medium.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); + }, + "snippet.thumbnails.medium.width" => { + request_snippet_thumbnails_medium_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().medium.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.medium.width", "integer")); + }, + "snippet.thumbnails.medium.height" => { + request_snippet_thumbnails_medium_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().medium.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.medium.height", "integer")); + }, + "snippet.thumbnails.maxres.url" => { + request_snippet_thumbnails_maxres_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().maxres.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); + }, + "snippet.thumbnails.maxres.width" => { + request_snippet_thumbnails_maxres_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().maxres.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.maxres.width", "integer")); + }, + "snippet.thumbnails.maxres.height" => { + request_snippet_thumbnails_maxres_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().maxres.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.maxres.height", "integer")); + }, + "snippet.thumbnails.standard.url" => { + request_snippet_thumbnails_standard_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().standard.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); + }, + "snippet.thumbnails.standard.width" => { + request_snippet_thumbnails_standard_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().standard.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.standard.width", "integer")); + }, + "snippet.thumbnails.standard.height" => { + request_snippet_thumbnails_standard_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().standard.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.standard.height", "integer")); + }, + "etag" => { + request_snippet_init(&mut request); + request.etag = Some(value.unwrap_or("").to_string()); + }, + "id" => { + request_snippet_init(&mut request); + request.id = Some(value.unwrap_or("").to_string()); + }, + _ => { + err.issues.push(CLIError::Field(FieldError::Unknown(temp_cursor.to_string()))); + } + } + } + let mut call = self.hub.live_broadcasts().insert(request); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { + let (key, value) = parse_kv_arg(&*parg, err, false); + match key { + "on-behalf-of-content-owner-channel" => { + call = call.on_behalf_of_content_owner_channel(value.unwrap_or("")); + }, + "on-behalf-of-content-owner" => { + call = call.on_behalf_of_content_owner(value.unwrap_or("")); + }, + "alt" + |"fields" + |"key" + |"oauth-token" + |"pretty-print" + |"quota-user" + |"user-ip" => { + let map = [ + ("oauth-token", "oauth_token"), + ("pretty-print", "prettyPrint"), + ("quota-user", "quotaUser"), + ("user-ip", "userIp"), + ]; + call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) + }, + _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), + } + } + let protocol = CallType::Standard; + if dry_run { + Ok(()) + } else { + assert!(err.issues.len() == 0); + for scope in self.opt.values_of("url").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(), + _ => unreachable!() + } { + Err(api_err) => Err(DoitError::ApiError(api_err)), + Ok((mut response, output_schema)) => { + serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); + Ok(()) + } + } + } + } + + fn _live_broadcasts_list(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + let mut call = self.hub.live_broadcasts().list(opt.value_of("part").unwrap_or("")); + for parg in opt.values_of("v").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("")); + }, + "on-behalf-of-content-owner-channel" => { + call = call.on_behalf_of_content_owner_channel(value.unwrap_or("")); + }, + "on-behalf-of-content-owner" => { + call = call.on_behalf_of_content_owner(value.unwrap_or("")); + }, + "mine" => { + call = call.mine(arg_from_str(value.unwrap_or("false"), err, "mine", "boolean")); + }, + "max-results" => { + call = call.max_results(arg_from_str(value.unwrap_or("-0"), err, "max-results", "integer")); + }, + "id" => { + call = call.id(value.unwrap_or("")); + }, + "broadcast-status" => { + call = call.broadcast_status(value.unwrap_or("")); + }, + "alt" + |"fields" + |"key" + |"oauth-token" + |"pretty-print" + |"quota-user" + |"user-ip" => { + let map = [ + ("oauth-token", "oauth_token"), + ("pretty-print", "prettyPrint"), + ("quota-user", "quotaUser"), + ("user-ip", "userIp"), + ]; + call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) + }, + _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), + } + } + let protocol = CallType::Standard; + if dry_run { + Ok(()) + } else { + assert!(err.issues.len() == 0); + for scope in self.opt.values_of("url").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(), + _ => unreachable!() + } { + Err(api_err) => Err(DoitError::ApiError(api_err)), + Ok((mut response, output_schema)) => { + serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); + Ok(()) + } + } + } + } + + fn _live_broadcasts_transition(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + let mut call = self.hub.live_broadcasts().transition(opt.value_of("broadcast-status").unwrap_or(""), opt.value_of("id").unwrap_or(""), opt.value_of("part").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { + let (key, value) = parse_kv_arg(&*parg, err, false); + match key { + "on-behalf-of-content-owner-channel" => { + call = call.on_behalf_of_content_owner_channel(value.unwrap_or("")); + }, + "on-behalf-of-content-owner" => { + call = call.on_behalf_of_content_owner(value.unwrap_or("")); + }, + "alt" + |"fields" + |"key" + |"oauth-token" + |"pretty-print" + |"quota-user" + |"user-ip" => { + let map = [ + ("oauth-token", "oauth_token"), + ("pretty-print", "prettyPrint"), + ("quota-user", "quotaUser"), + ("user-ip", "userIp"), + ]; + call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) + }, + _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), + } + } + let protocol = CallType::Standard; + if dry_run { + Ok(()) + } else { + assert!(err.issues.len() == 0); + for scope in self.opt.values_of("url").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(), + _ => unreachable!() + } { + Err(api_err) => Err(DoitError::ApiError(api_err)), + Ok((mut response, output_schema)) => { + serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); + Ok(()) + } + } + } + } + + fn _live_broadcasts_update(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + + let mut request = api::LiveBroadcast::default(); + let mut field_cursor = FieldCursor::default(); + for kvarg in opt.values_of("kv").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; + } + fn request_content_details_init(request: &mut api::LiveBroadcast) { + if request.content_details.is_none() { + request.content_details = Some(Default::default()); + } + } + + fn request_content_details_monitor_stream_init(request: &mut api::LiveBroadcast) { + request_content_details_init(request); + if request.content_details.as_mut().unwrap().monitor_stream.is_none() { + request.content_details.as_mut().unwrap().monitor_stream = Some(Default::default()); + } + } + + fn request_snippet_init(request: &mut api::LiveBroadcast) { + if request.snippet.is_none() { + request.snippet = Some(Default::default()); + } + } + + fn request_snippet_thumbnails_default_init(request: &mut api::LiveBroadcast) { + request_snippet_thumbnails_init(request); + if request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().default.is_none() { + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().default = Some(Default::default()); + } + } + + fn request_snippet_thumbnails_high_init(request: &mut api::LiveBroadcast) { + request_snippet_thumbnails_init(request); + if request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().high.is_none() { + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().high = Some(Default::default()); + } + } + + fn request_snippet_thumbnails_init(request: &mut api::LiveBroadcast) { + request_snippet_init(request); + if request.snippet.as_mut().unwrap().thumbnails.is_none() { + request.snippet.as_mut().unwrap().thumbnails = Some(Default::default()); + } + } + + fn request_snippet_thumbnails_maxres_init(request: &mut api::LiveBroadcast) { + request_snippet_thumbnails_init(request); + if request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().maxres.is_none() { + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().maxres = Some(Default::default()); + } + } + + fn request_snippet_thumbnails_medium_init(request: &mut api::LiveBroadcast) { + request_snippet_thumbnails_init(request); + if request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().medium.is_none() { + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().medium = Some(Default::default()); + } + } + + fn request_snippet_thumbnails_standard_init(request: &mut api::LiveBroadcast) { + request_snippet_thumbnails_init(request); + if request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().standard.is_none() { + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().standard = Some(Default::default()); + } + } + + fn request_status_init(request: &mut api::LiveBroadcast) { + if request.status.is_none() { + request.status = Some(Default::default()); + } + } + + match &temp_cursor.to_string()[..] { + "status.recording-status" => { + request_status_init(&mut request); + request.status.as_mut().unwrap().recording_status = Some(value.unwrap_or("").to_string()); + }, + "status.privacy-status" => { + request_status_init(&mut request); + request.status.as_mut().unwrap().privacy_status = Some(value.unwrap_or("").to_string()); + }, + "status.life-cycle-status" => { + request_status_init(&mut request); + request.status.as_mut().unwrap().life_cycle_status = Some(value.unwrap_or("").to_string()); + }, + "status.is-default-broadcast" => { + request_status_init(&mut request); + request.status.as_mut().unwrap().is_default_broadcast = Some(arg_from_str(value.unwrap_or("false"), err, "status.is-default-broadcast", "boolean")); + }, + "status.live-broadcast-priority" => { + request_status_init(&mut request); + request.status.as_mut().unwrap().live_broadcast_priority = Some(value.unwrap_or("").to_string()); + }, + "kind" => { + request_status_init(&mut request); + request.kind = Some(value.unwrap_or("").to_string()); + }, + "content-details.start-with-slate" => { + request_content_details_init(&mut request); + request.content_details.as_mut().unwrap().start_with_slate = Some(arg_from_str(value.unwrap_or("false"), err, "content-details.start-with-slate", "boolean")); + }, + "content-details.bound-stream-id" => { + request_content_details_init(&mut request); + request.content_details.as_mut().unwrap().bound_stream_id = Some(value.unwrap_or("").to_string()); + }, + "content-details.enable-embed" => { + request_content_details_init(&mut request); + request.content_details.as_mut().unwrap().enable_embed = Some(arg_from_str(value.unwrap_or("false"), err, "content-details.enable-embed", "boolean")); + }, + "content-details.enable-closed-captions" => { + request_content_details_init(&mut request); + request.content_details.as_mut().unwrap().enable_closed_captions = Some(arg_from_str(value.unwrap_or("false"), err, "content-details.enable-closed-captions", "boolean")); + }, + "content-details.enable-content-encryption" => { + request_content_details_init(&mut request); + request.content_details.as_mut().unwrap().enable_content_encryption = Some(arg_from_str(value.unwrap_or("false"), err, "content-details.enable-content-encryption", "boolean")); + }, + "content-details.record-from-start" => { + request_content_details_init(&mut request); + request.content_details.as_mut().unwrap().record_from_start = Some(arg_from_str(value.unwrap_or("false"), err, "content-details.record-from-start", "boolean")); + }, + "content-details.enable-dvr" => { + request_content_details_init(&mut request); + request.content_details.as_mut().unwrap().enable_dvr = Some(arg_from_str(value.unwrap_or("false"), err, "content-details.enable-dvr", "boolean")); + }, + "content-details.monitor-stream.broadcast-stream-delay-ms" => { + request_content_details_monitor_stream_init(&mut request); + request.content_details.as_mut().unwrap().monitor_stream.as_mut().unwrap().broadcast_stream_delay_ms = Some(arg_from_str(value.unwrap_or("-0"), err, "content-details.monitor-stream.broadcast-stream-delay-ms", "integer")); + }, + "content-details.monitor-stream.embed-html" => { + request_content_details_monitor_stream_init(&mut request); + request.content_details.as_mut().unwrap().monitor_stream.as_mut().unwrap().embed_html = Some(value.unwrap_or("").to_string()); + }, + "content-details.monitor-stream.enable-monitor-stream" => { + request_content_details_monitor_stream_init(&mut request); + request.content_details.as_mut().unwrap().monitor_stream.as_mut().unwrap().enable_monitor_stream = Some(arg_from_str(value.unwrap_or("false"), err, "content-details.monitor-stream.enable-monitor-stream", "boolean")); + }, + "snippet.actual-end-time" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().actual_end_time = Some(value.unwrap_or("").to_string()); + }, + "snippet.description" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().description = Some(value.unwrap_or("").to_string()); + }, + "snippet.title" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().title = Some(value.unwrap_or("").to_string()); + }, + "snippet.channel-id" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().channel_id = Some(value.unwrap_or("").to_string()); + }, + "snippet.published-at" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().published_at = Some(value.unwrap_or("").to_string()); + }, + "snippet.scheduled-start-time" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().scheduled_start_time = Some(value.unwrap_or("").to_string()); + }, + "snippet.actual-start-time" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().actual_start_time = Some(value.unwrap_or("").to_string()); + }, + "snippet.scheduled-end-time" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().scheduled_end_time = Some(value.unwrap_or("").to_string()); + }, + "snippet.thumbnails.default.url" => { + request_snippet_thumbnails_default_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().default.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); + }, + "snippet.thumbnails.default.width" => { + request_snippet_thumbnails_default_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().default.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.default.width", "integer")); + }, + "snippet.thumbnails.default.height" => { + request_snippet_thumbnails_default_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().default.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.default.height", "integer")); + }, + "snippet.thumbnails.high.url" => { + request_snippet_thumbnails_high_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().high.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); + }, + "snippet.thumbnails.high.width" => { + request_snippet_thumbnails_high_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().high.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.high.width", "integer")); + }, + "snippet.thumbnails.high.height" => { + request_snippet_thumbnails_high_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().high.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.high.height", "integer")); + }, + "snippet.thumbnails.medium.url" => { + request_snippet_thumbnails_medium_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().medium.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); + }, + "snippet.thumbnails.medium.width" => { + request_snippet_thumbnails_medium_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().medium.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.medium.width", "integer")); + }, + "snippet.thumbnails.medium.height" => { + request_snippet_thumbnails_medium_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().medium.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.medium.height", "integer")); + }, + "snippet.thumbnails.maxres.url" => { + request_snippet_thumbnails_maxres_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().maxres.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); + }, + "snippet.thumbnails.maxres.width" => { + request_snippet_thumbnails_maxres_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().maxres.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.maxres.width", "integer")); + }, + "snippet.thumbnails.maxres.height" => { + request_snippet_thumbnails_maxres_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().maxres.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.maxres.height", "integer")); + }, + "snippet.thumbnails.standard.url" => { + request_snippet_thumbnails_standard_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().standard.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); + }, + "snippet.thumbnails.standard.width" => { + request_snippet_thumbnails_standard_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().standard.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.standard.width", "integer")); + }, + "snippet.thumbnails.standard.height" => { + request_snippet_thumbnails_standard_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().standard.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.standard.height", "integer")); + }, + "etag" => { + request_snippet_init(&mut request); + request.etag = Some(value.unwrap_or("").to_string()); + }, + "id" => { + request_snippet_init(&mut request); + request.id = Some(value.unwrap_or("").to_string()); + }, + _ => { + err.issues.push(CLIError::Field(FieldError::Unknown(temp_cursor.to_string()))); + } + } + } + let mut call = self.hub.live_broadcasts().update(request); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { + let (key, value) = parse_kv_arg(&*parg, err, false); + match key { + "on-behalf-of-content-owner-channel" => { + call = call.on_behalf_of_content_owner_channel(value.unwrap_or("")); + }, + "on-behalf-of-content-owner" => { + call = call.on_behalf_of_content_owner(value.unwrap_or("")); + }, + "alt" + |"fields" + |"key" + |"oauth-token" + |"pretty-print" + |"quota-user" + |"user-ip" => { + let map = [ + ("oauth-token", "oauth_token"), + ("pretty-print", "prettyPrint"), + ("quota-user", "quotaUser"), + ("user-ip", "userIp"), + ]; + call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) + }, + _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), + } + } + let protocol = CallType::Standard; + if dry_run { + Ok(()) + } else { + assert!(err.issues.len() == 0); + for scope in self.opt.values_of("url").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(), + _ => unreachable!() + } { + Err(api_err) => Err(DoitError::ApiError(api_err)), + Ok((mut response, output_schema)) => { + serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); + Ok(()) + } + } + } + } + + fn _live_streams_delete(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + let mut call = self.hub.live_streams().delete(opt.value_of("id").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { + let (key, value) = parse_kv_arg(&*parg, err, false); + match key { + "on-behalf-of-content-owner-channel" => { + call = call.on_behalf_of_content_owner_channel(value.unwrap_or("")); + }, + "on-behalf-of-content-owner" => { + call = call.on_behalf_of_content_owner(value.unwrap_or("")); + }, + "alt" + |"fields" + |"key" + |"oauth-token" + |"pretty-print" + |"quota-user" + |"user-ip" => { + let map = [ + ("oauth-token", "oauth_token"), + ("pretty-print", "prettyPrint"), + ("quota-user", "quotaUser"), + ("user-ip", "userIp"), + ]; + call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) + }, + _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), + } + } + let protocol = CallType::Standard; + if dry_run { + Ok(()) + } else { + assert!(err.issues.len() == 0); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); + } + match match protocol { + CallType::Standard => call.doit(), + _ => unreachable!() + } { + Err(api_err) => Err(DoitError::ApiError(api_err)), + Ok(mut response) => { + Ok(()) + } + } + } + } + + fn _live_streams_insert(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + + let mut request = api::LiveStream::default(); + let mut field_cursor = FieldCursor::default(); + for kvarg in opt.values_of("kv").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; + } + fn request_cdn_ingestion_info_init(request: &mut api::LiveStream) { + request_cdn_init(request); + if request.cdn.as_mut().unwrap().ingestion_info.is_none() { + request.cdn.as_mut().unwrap().ingestion_info = Some(Default::default()); + } + } + + fn request_cdn_init(request: &mut api::LiveStream) { + if request.cdn.is_none() { + request.cdn = Some(Default::default()); + } + } + + fn request_content_details_init(request: &mut api::LiveStream) { + if request.content_details.is_none() { + request.content_details = Some(Default::default()); + } + } + + fn request_snippet_init(request: &mut api::LiveStream) { + if request.snippet.is_none() { + request.snippet = Some(Default::default()); + } + } + + fn request_status_init(request: &mut api::LiveStream) { + if request.status.is_none() { + request.status = Some(Default::default()); + } + } + + match &temp_cursor.to_string()[..] { + "status.is-default-stream" => { + request_status_init(&mut request); + request.status.as_mut().unwrap().is_default_stream = Some(arg_from_str(value.unwrap_or("false"), err, "status.is-default-stream", "boolean")); + }, + "status.stream-status" => { + request_status_init(&mut request); + request.status.as_mut().unwrap().stream_status = Some(value.unwrap_or("").to_string()); + }, + "kind" => { + request_status_init(&mut request); + request.kind = Some(value.unwrap_or("").to_string()); + }, + "content-details.is-reusable" => { + request_content_details_init(&mut request); + request.content_details.as_mut().unwrap().is_reusable = Some(arg_from_str(value.unwrap_or("false"), err, "content-details.is-reusable", "boolean")); + }, + "content-details.closed-captions-ingestion-url" => { + request_content_details_init(&mut request); + request.content_details.as_mut().unwrap().closed_captions_ingestion_url = Some(value.unwrap_or("").to_string()); + }, + "cdn.ingestion-type" => { + request_cdn_init(&mut request); + request.cdn.as_mut().unwrap().ingestion_type = Some(value.unwrap_or("").to_string()); + }, + "cdn.ingestion-info.backup-ingestion-address" => { + request_cdn_ingestion_info_init(&mut request); + request.cdn.as_mut().unwrap().ingestion_info.as_mut().unwrap().backup_ingestion_address = Some(value.unwrap_or("").to_string()); + }, + "cdn.ingestion-info.stream-name" => { + request_cdn_ingestion_info_init(&mut request); + request.cdn.as_mut().unwrap().ingestion_info.as_mut().unwrap().stream_name = Some(value.unwrap_or("").to_string()); + }, + "cdn.ingestion-info.ingestion-address" => { + request_cdn_ingestion_info_init(&mut request); + request.cdn.as_mut().unwrap().ingestion_info.as_mut().unwrap().ingestion_address = Some(value.unwrap_or("").to_string()); + }, + "cdn.format" => { + request_cdn_ingestion_info_init(&mut request); + request.cdn.as_mut().unwrap().format = Some(value.unwrap_or("").to_string()); + }, + "snippet.channel-id" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().channel_id = Some(value.unwrap_or("").to_string()); + }, + "snippet.description" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().description = Some(value.unwrap_or("").to_string()); + }, + "snippet.published-at" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().published_at = Some(value.unwrap_or("").to_string()); + }, + "snippet.title" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().title = Some(value.unwrap_or("").to_string()); + }, + "etag" => { + request_snippet_init(&mut request); + request.etag = Some(value.unwrap_or("").to_string()); + }, + "id" => { + request_snippet_init(&mut request); + request.id = Some(value.unwrap_or("").to_string()); + }, + _ => { + err.issues.push(CLIError::Field(FieldError::Unknown(temp_cursor.to_string()))); + } + } + } + let mut call = self.hub.live_streams().insert(request); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { + let (key, value) = parse_kv_arg(&*parg, err, false); + match key { + "on-behalf-of-content-owner-channel" => { + call = call.on_behalf_of_content_owner_channel(value.unwrap_or("")); + }, + "on-behalf-of-content-owner" => { + call = call.on_behalf_of_content_owner(value.unwrap_or("")); + }, + "alt" + |"fields" + |"key" + |"oauth-token" + |"pretty-print" + |"quota-user" + |"user-ip" => { + let map = [ + ("oauth-token", "oauth_token"), + ("pretty-print", "prettyPrint"), + ("quota-user", "quotaUser"), + ("user-ip", "userIp"), + ]; + call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) + }, + _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), + } + } + let protocol = CallType::Standard; + if dry_run { + Ok(()) + } else { + assert!(err.issues.len() == 0); + for scope in self.opt.values_of("url").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(), + _ => unreachable!() + } { + Err(api_err) => Err(DoitError::ApiError(api_err)), + Ok((mut response, output_schema)) => { + serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); + Ok(()) + } + } + } + } + + fn _live_streams_list(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + let mut call = self.hub.live_streams().list(opt.value_of("part").unwrap_or("")); + for parg in opt.values_of("v").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("")); + }, + "on-behalf-of-content-owner-channel" => { + call = call.on_behalf_of_content_owner_channel(value.unwrap_or("")); + }, + "on-behalf-of-content-owner" => { + call = call.on_behalf_of_content_owner(value.unwrap_or("")); + }, + "mine" => { + call = call.mine(arg_from_str(value.unwrap_or("false"), err, "mine", "boolean")); + }, + "max-results" => { + call = call.max_results(arg_from_str(value.unwrap_or("-0"), err, "max-results", "integer")); + }, + "id" => { + call = call.id(value.unwrap_or("")); + }, + "alt" + |"fields" + |"key" + |"oauth-token" + |"pretty-print" + |"quota-user" + |"user-ip" => { + let map = [ + ("oauth-token", "oauth_token"), + ("pretty-print", "prettyPrint"), + ("quota-user", "quotaUser"), + ("user-ip", "userIp"), + ]; + call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) + }, + _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), + } + } + let protocol = CallType::Standard; + if dry_run { + Ok(()) + } else { + assert!(err.issues.len() == 0); + for scope in self.opt.values_of("url").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(), + _ => unreachable!() + } { + Err(api_err) => Err(DoitError::ApiError(api_err)), + Ok((mut response, output_schema)) => { + serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); + Ok(()) + } + } + } + } + + fn _live_streams_update(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + + let mut request = api::LiveStream::default(); + let mut field_cursor = FieldCursor::default(); + for kvarg in opt.values_of("kv").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; + } + fn request_cdn_ingestion_info_init(request: &mut api::LiveStream) { + request_cdn_init(request); + if request.cdn.as_mut().unwrap().ingestion_info.is_none() { + request.cdn.as_mut().unwrap().ingestion_info = Some(Default::default()); + } + } + + fn request_cdn_init(request: &mut api::LiveStream) { + if request.cdn.is_none() { + request.cdn = Some(Default::default()); + } + } + + fn request_content_details_init(request: &mut api::LiveStream) { + if request.content_details.is_none() { + request.content_details = Some(Default::default()); + } + } + + fn request_snippet_init(request: &mut api::LiveStream) { + if request.snippet.is_none() { + request.snippet = Some(Default::default()); + } + } + + fn request_status_init(request: &mut api::LiveStream) { + if request.status.is_none() { + request.status = Some(Default::default()); + } + } + + match &temp_cursor.to_string()[..] { + "status.is-default-stream" => { + request_status_init(&mut request); + request.status.as_mut().unwrap().is_default_stream = Some(arg_from_str(value.unwrap_or("false"), err, "status.is-default-stream", "boolean")); + }, + "status.stream-status" => { + request_status_init(&mut request); + request.status.as_mut().unwrap().stream_status = Some(value.unwrap_or("").to_string()); + }, + "kind" => { + request_status_init(&mut request); + request.kind = Some(value.unwrap_or("").to_string()); + }, + "content-details.is-reusable" => { + request_content_details_init(&mut request); + request.content_details.as_mut().unwrap().is_reusable = Some(arg_from_str(value.unwrap_or("false"), err, "content-details.is-reusable", "boolean")); + }, + "content-details.closed-captions-ingestion-url" => { + request_content_details_init(&mut request); + request.content_details.as_mut().unwrap().closed_captions_ingestion_url = Some(value.unwrap_or("").to_string()); + }, + "cdn.ingestion-type" => { + request_cdn_init(&mut request); + request.cdn.as_mut().unwrap().ingestion_type = Some(value.unwrap_or("").to_string()); + }, + "cdn.ingestion-info.backup-ingestion-address" => { + request_cdn_ingestion_info_init(&mut request); + request.cdn.as_mut().unwrap().ingestion_info.as_mut().unwrap().backup_ingestion_address = Some(value.unwrap_or("").to_string()); + }, + "cdn.ingestion-info.stream-name" => { + request_cdn_ingestion_info_init(&mut request); + request.cdn.as_mut().unwrap().ingestion_info.as_mut().unwrap().stream_name = Some(value.unwrap_or("").to_string()); + }, + "cdn.ingestion-info.ingestion-address" => { + request_cdn_ingestion_info_init(&mut request); + request.cdn.as_mut().unwrap().ingestion_info.as_mut().unwrap().ingestion_address = Some(value.unwrap_or("").to_string()); + }, + "cdn.format" => { + request_cdn_ingestion_info_init(&mut request); + request.cdn.as_mut().unwrap().format = Some(value.unwrap_or("").to_string()); + }, + "snippet.channel-id" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().channel_id = Some(value.unwrap_or("").to_string()); + }, + "snippet.description" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().description = Some(value.unwrap_or("").to_string()); + }, + "snippet.published-at" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().published_at = Some(value.unwrap_or("").to_string()); + }, + "snippet.title" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().title = Some(value.unwrap_or("").to_string()); + }, + "etag" => { + request_snippet_init(&mut request); + request.etag = Some(value.unwrap_or("").to_string()); + }, + "id" => { + request_snippet_init(&mut request); + request.id = Some(value.unwrap_or("").to_string()); + }, + _ => { + err.issues.push(CLIError::Field(FieldError::Unknown(temp_cursor.to_string()))); + } + } + } + let mut call = self.hub.live_streams().update(request); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { + let (key, value) = parse_kv_arg(&*parg, err, false); + match key { + "on-behalf-of-content-owner-channel" => { + call = call.on_behalf_of_content_owner_channel(value.unwrap_or("")); + }, + "on-behalf-of-content-owner" => { + call = call.on_behalf_of_content_owner(value.unwrap_or("")); + }, + "alt" + |"fields" + |"key" + |"oauth-token" + |"pretty-print" + |"quota-user" + |"user-ip" => { + let map = [ + ("oauth-token", "oauth_token"), + ("pretty-print", "prettyPrint"), + ("quota-user", "quotaUser"), + ("user-ip", "userIp"), + ]; + call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) + }, + _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), + } + } + let protocol = CallType::Standard; + if dry_run { + Ok(()) + } else { + assert!(err.issues.len() == 0); + for scope in self.opt.values_of("url").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(), + _ => unreachable!() + } { + Err(api_err) => Err(DoitError::ApiError(api_err)), + Ok((mut response, output_schema)) => { + serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); + Ok(()) + } + } + } + } + + fn _playlist_items_delete(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + let mut call = self.hub.playlist_items().delete(opt.value_of("id").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { + let (key, value) = parse_kv_arg(&*parg, err, false); + match key { + "alt" + |"fields" + |"key" + |"oauth-token" + |"pretty-print" + |"quota-user" + |"user-ip" => { + let map = [ + ("oauth-token", "oauth_token"), + ("pretty-print", "prettyPrint"), + ("quota-user", "quotaUser"), + ("user-ip", "userIp"), + ]; + call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) + }, + _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), + } + } + let protocol = CallType::Standard; + if dry_run { + Ok(()) + } else { + assert!(err.issues.len() == 0); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); + } + match match protocol { + CallType::Standard => call.doit(), + _ => unreachable!() + } { + Err(api_err) => Err(DoitError::ApiError(api_err)), + Ok(mut response) => { + Ok(()) + } + } + } + } + + fn _playlist_items_insert(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + + let mut request = api::PlaylistItem::default(); + let mut field_cursor = FieldCursor::default(); + for kvarg in opt.values_of("kv").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; + } + fn request_content_details_init(request: &mut api::PlaylistItem) { + if request.content_details.is_none() { + request.content_details = Some(Default::default()); + } + } + + fn request_snippet_init(request: &mut api::PlaylistItem) { + if request.snippet.is_none() { + request.snippet = Some(Default::default()); + } + } + + fn request_snippet_resource_id_init(request: &mut api::PlaylistItem) { + request_snippet_init(request); + if request.snippet.as_mut().unwrap().resource_id.is_none() { + request.snippet.as_mut().unwrap().resource_id = Some(Default::default()); + } + } + + fn request_snippet_thumbnails_default_init(request: &mut api::PlaylistItem) { + request_snippet_thumbnails_init(request); + if request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().default.is_none() { + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().default = Some(Default::default()); + } + } + + fn request_snippet_thumbnails_high_init(request: &mut api::PlaylistItem) { + request_snippet_thumbnails_init(request); + if request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().high.is_none() { + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().high = Some(Default::default()); + } + } + + fn request_snippet_thumbnails_init(request: &mut api::PlaylistItem) { + request_snippet_init(request); + if request.snippet.as_mut().unwrap().thumbnails.is_none() { + request.snippet.as_mut().unwrap().thumbnails = Some(Default::default()); + } + } + + fn request_snippet_thumbnails_maxres_init(request: &mut api::PlaylistItem) { + request_snippet_thumbnails_init(request); + if request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().maxres.is_none() { + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().maxres = Some(Default::default()); + } + } + + fn request_snippet_thumbnails_medium_init(request: &mut api::PlaylistItem) { + request_snippet_thumbnails_init(request); + if request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().medium.is_none() { + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().medium = Some(Default::default()); + } + } + + fn request_snippet_thumbnails_standard_init(request: &mut api::PlaylistItem) { + request_snippet_thumbnails_init(request); + if request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().standard.is_none() { + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().standard = Some(Default::default()); + } + } + + fn request_status_init(request: &mut api::PlaylistItem) { + if request.status.is_none() { + request.status = Some(Default::default()); + } + } + + match &temp_cursor.to_string()[..] { + "status.privacy-status" => { + request_status_init(&mut request); + request.status.as_mut().unwrap().privacy_status = Some(value.unwrap_or("").to_string()); + }, + "kind" => { + request_status_init(&mut request); + request.kind = Some(value.unwrap_or("").to_string()); + }, + "content-details.note" => { + request_content_details_init(&mut request); + request.content_details.as_mut().unwrap().note = Some(value.unwrap_or("").to_string()); + }, + "content-details.start-at" => { + request_content_details_init(&mut request); + request.content_details.as_mut().unwrap().start_at = Some(value.unwrap_or("").to_string()); + }, + "content-details.end-at" => { + request_content_details_init(&mut request); + request.content_details.as_mut().unwrap().end_at = Some(value.unwrap_or("").to_string()); + }, + "content-details.video-id" => { + request_content_details_init(&mut request); + request.content_details.as_mut().unwrap().video_id = Some(value.unwrap_or("").to_string()); + }, + "snippet.playlist-id" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().playlist_id = Some(value.unwrap_or("").to_string()); + }, + "snippet.description" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().description = Some(value.unwrap_or("").to_string()); + }, + "snippet.title" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().title = Some(value.unwrap_or("").to_string()); + }, + "snippet.resource-id.kind" => { + request_snippet_resource_id_init(&mut request); + request.snippet.as_mut().unwrap().resource_id.as_mut().unwrap().kind = Some(value.unwrap_or("").to_string()); + }, + "snippet.resource-id.channel-id" => { + request_snippet_resource_id_init(&mut request); + request.snippet.as_mut().unwrap().resource_id.as_mut().unwrap().channel_id = Some(value.unwrap_or("").to_string()); + }, + "snippet.resource-id.playlist-id" => { + request_snippet_resource_id_init(&mut request); + request.snippet.as_mut().unwrap().resource_id.as_mut().unwrap().playlist_id = Some(value.unwrap_or("").to_string()); + }, + "snippet.resource-id.video-id" => { + request_snippet_resource_id_init(&mut request); + request.snippet.as_mut().unwrap().resource_id.as_mut().unwrap().video_id = Some(value.unwrap_or("").to_string()); + }, + "snippet.channel-id" => { + request_snippet_resource_id_init(&mut request); + request.snippet.as_mut().unwrap().channel_id = Some(value.unwrap_or("").to_string()); + }, + "snippet.published-at" => { + request_snippet_resource_id_init(&mut request); + request.snippet.as_mut().unwrap().published_at = Some(value.unwrap_or("").to_string()); + }, + "snippet.channel-title" => { + request_snippet_resource_id_init(&mut request); + request.snippet.as_mut().unwrap().channel_title = Some(value.unwrap_or("").to_string()); + }, + "snippet.position" => { + request_snippet_resource_id_init(&mut request); + request.snippet.as_mut().unwrap().position = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.position", "integer")); + }, + "snippet.thumbnails.default.url" => { + request_snippet_thumbnails_default_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().default.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); + }, + "snippet.thumbnails.default.width" => { + request_snippet_thumbnails_default_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().default.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.default.width", "integer")); + }, + "snippet.thumbnails.default.height" => { + request_snippet_thumbnails_default_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().default.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.default.height", "integer")); + }, + "snippet.thumbnails.high.url" => { + request_snippet_thumbnails_high_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().high.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); + }, + "snippet.thumbnails.high.width" => { + request_snippet_thumbnails_high_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().high.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.high.width", "integer")); + }, + "snippet.thumbnails.high.height" => { + request_snippet_thumbnails_high_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().high.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.high.height", "integer")); + }, + "snippet.thumbnails.medium.url" => { + request_snippet_thumbnails_medium_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().medium.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); + }, + "snippet.thumbnails.medium.width" => { + request_snippet_thumbnails_medium_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().medium.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.medium.width", "integer")); + }, + "snippet.thumbnails.medium.height" => { + request_snippet_thumbnails_medium_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().medium.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.medium.height", "integer")); + }, + "snippet.thumbnails.maxres.url" => { + request_snippet_thumbnails_maxres_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().maxres.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); + }, + "snippet.thumbnails.maxres.width" => { + request_snippet_thumbnails_maxres_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().maxres.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.maxres.width", "integer")); + }, + "snippet.thumbnails.maxres.height" => { + request_snippet_thumbnails_maxres_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().maxres.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.maxres.height", "integer")); + }, + "snippet.thumbnails.standard.url" => { + request_snippet_thumbnails_standard_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().standard.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); + }, + "snippet.thumbnails.standard.width" => { + request_snippet_thumbnails_standard_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().standard.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.standard.width", "integer")); + }, + "snippet.thumbnails.standard.height" => { + request_snippet_thumbnails_standard_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().standard.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.standard.height", "integer")); + }, + "etag" => { + request_snippet_init(&mut request); + request.etag = Some(value.unwrap_or("").to_string()); + }, + "id" => { + request_snippet_init(&mut request); + request.id = Some(value.unwrap_or("").to_string()); + }, + _ => { + err.issues.push(CLIError::Field(FieldError::Unknown(temp_cursor.to_string()))); + } + } + } + let mut call = self.hub.playlist_items().insert(request); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { + let (key, value) = parse_kv_arg(&*parg, err, false); + match key { + "on-behalf-of-content-owner" => { + call = call.on_behalf_of_content_owner(value.unwrap_or("")); + }, + "alt" + |"fields" + |"key" + |"oauth-token" + |"pretty-print" + |"quota-user" + |"user-ip" => { + let map = [ + ("oauth-token", "oauth_token"), + ("pretty-print", "prettyPrint"), + ("quota-user", "quotaUser"), + ("user-ip", "userIp"), + ]; + call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) + }, + _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), + } + } + let protocol = CallType::Standard; + if dry_run { + Ok(()) + } else { + assert!(err.issues.len() == 0); + for scope in self.opt.values_of("url").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(), + _ => unreachable!() + } { + Err(api_err) => Err(DoitError::ApiError(api_err)), + Ok((mut response, output_schema)) => { + serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); + Ok(()) + } + } + } + } + + fn _playlist_items_list(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + let mut call = self.hub.playlist_items().list(opt.value_of("part").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { + let (key, value) = parse_kv_arg(&*parg, err, false); + match key { + "video-id" => { + call = call.video_id(value.unwrap_or("")); + }, + "playlist-id" => { + call = call.playlist_id(value.unwrap_or("")); + }, + "page-token" => { + call = call.page_token(value.unwrap_or("")); + }, + "on-behalf-of-content-owner" => { + call = call.on_behalf_of_content_owner(value.unwrap_or("")); + }, + "max-results" => { + call = call.max_results(arg_from_str(value.unwrap_or("-0"), err, "max-results", "integer")); + }, + "id" => { + call = call.id(value.unwrap_or("")); + }, + "alt" + |"fields" + |"key" + |"oauth-token" + |"pretty-print" + |"quota-user" + |"user-ip" => { + let map = [ + ("oauth-token", "oauth_token"), + ("pretty-print", "prettyPrint"), + ("quota-user", "quotaUser"), + ("user-ip", "userIp"), + ]; + call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) + }, + _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), + } + } + let protocol = CallType::Standard; + if dry_run { + Ok(()) + } else { + assert!(err.issues.len() == 0); + for scope in self.opt.values_of("url").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(), + _ => unreachable!() + } { + Err(api_err) => Err(DoitError::ApiError(api_err)), + Ok((mut response, output_schema)) => { + serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); + Ok(()) + } + } + } + } + + fn _playlist_items_update(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + + let mut request = api::PlaylistItem::default(); + let mut field_cursor = FieldCursor::default(); + for kvarg in opt.values_of("kv").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; + } + fn request_content_details_init(request: &mut api::PlaylistItem) { + if request.content_details.is_none() { + request.content_details = Some(Default::default()); + } + } + + fn request_snippet_init(request: &mut api::PlaylistItem) { + if request.snippet.is_none() { + request.snippet = Some(Default::default()); + } + } + + fn request_snippet_resource_id_init(request: &mut api::PlaylistItem) { + request_snippet_init(request); + if request.snippet.as_mut().unwrap().resource_id.is_none() { + request.snippet.as_mut().unwrap().resource_id = Some(Default::default()); + } + } + + fn request_snippet_thumbnails_default_init(request: &mut api::PlaylistItem) { + request_snippet_thumbnails_init(request); + if request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().default.is_none() { + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().default = Some(Default::default()); + } + } + + fn request_snippet_thumbnails_high_init(request: &mut api::PlaylistItem) { + request_snippet_thumbnails_init(request); + if request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().high.is_none() { + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().high = Some(Default::default()); + } + } + + fn request_snippet_thumbnails_init(request: &mut api::PlaylistItem) { + request_snippet_init(request); + if request.snippet.as_mut().unwrap().thumbnails.is_none() { + request.snippet.as_mut().unwrap().thumbnails = Some(Default::default()); + } + } + + fn request_snippet_thumbnails_maxres_init(request: &mut api::PlaylistItem) { + request_snippet_thumbnails_init(request); + if request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().maxres.is_none() { + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().maxres = Some(Default::default()); + } + } + + fn request_snippet_thumbnails_medium_init(request: &mut api::PlaylistItem) { + request_snippet_thumbnails_init(request); + if request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().medium.is_none() { + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().medium = Some(Default::default()); + } + } + + fn request_snippet_thumbnails_standard_init(request: &mut api::PlaylistItem) { + request_snippet_thumbnails_init(request); + if request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().standard.is_none() { + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().standard = Some(Default::default()); + } + } + + fn request_status_init(request: &mut api::PlaylistItem) { + if request.status.is_none() { + request.status = Some(Default::default()); + } + } + + match &temp_cursor.to_string()[..] { + "status.privacy-status" => { + request_status_init(&mut request); + request.status.as_mut().unwrap().privacy_status = Some(value.unwrap_or("").to_string()); + }, + "kind" => { + request_status_init(&mut request); + request.kind = Some(value.unwrap_or("").to_string()); + }, + "content-details.note" => { + request_content_details_init(&mut request); + request.content_details.as_mut().unwrap().note = Some(value.unwrap_or("").to_string()); + }, + "content-details.start-at" => { + request_content_details_init(&mut request); + request.content_details.as_mut().unwrap().start_at = Some(value.unwrap_or("").to_string()); + }, + "content-details.end-at" => { + request_content_details_init(&mut request); + request.content_details.as_mut().unwrap().end_at = Some(value.unwrap_or("").to_string()); + }, + "content-details.video-id" => { + request_content_details_init(&mut request); + request.content_details.as_mut().unwrap().video_id = Some(value.unwrap_or("").to_string()); + }, + "snippet.playlist-id" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().playlist_id = Some(value.unwrap_or("").to_string()); + }, + "snippet.description" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().description = Some(value.unwrap_or("").to_string()); + }, + "snippet.title" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().title = Some(value.unwrap_or("").to_string()); + }, + "snippet.resource-id.kind" => { + request_snippet_resource_id_init(&mut request); + request.snippet.as_mut().unwrap().resource_id.as_mut().unwrap().kind = Some(value.unwrap_or("").to_string()); + }, + "snippet.resource-id.channel-id" => { + request_snippet_resource_id_init(&mut request); + request.snippet.as_mut().unwrap().resource_id.as_mut().unwrap().channel_id = Some(value.unwrap_or("").to_string()); + }, + "snippet.resource-id.playlist-id" => { + request_snippet_resource_id_init(&mut request); + request.snippet.as_mut().unwrap().resource_id.as_mut().unwrap().playlist_id = Some(value.unwrap_or("").to_string()); + }, + "snippet.resource-id.video-id" => { + request_snippet_resource_id_init(&mut request); + request.snippet.as_mut().unwrap().resource_id.as_mut().unwrap().video_id = Some(value.unwrap_or("").to_string()); + }, + "snippet.channel-id" => { + request_snippet_resource_id_init(&mut request); + request.snippet.as_mut().unwrap().channel_id = Some(value.unwrap_or("").to_string()); + }, + "snippet.published-at" => { + request_snippet_resource_id_init(&mut request); + request.snippet.as_mut().unwrap().published_at = Some(value.unwrap_or("").to_string()); + }, + "snippet.channel-title" => { + request_snippet_resource_id_init(&mut request); + request.snippet.as_mut().unwrap().channel_title = Some(value.unwrap_or("").to_string()); + }, + "snippet.position" => { + request_snippet_resource_id_init(&mut request); + request.snippet.as_mut().unwrap().position = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.position", "integer")); + }, + "snippet.thumbnails.default.url" => { + request_snippet_thumbnails_default_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().default.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); + }, + "snippet.thumbnails.default.width" => { + request_snippet_thumbnails_default_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().default.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.default.width", "integer")); + }, + "snippet.thumbnails.default.height" => { + request_snippet_thumbnails_default_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().default.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.default.height", "integer")); + }, + "snippet.thumbnails.high.url" => { + request_snippet_thumbnails_high_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().high.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); + }, + "snippet.thumbnails.high.width" => { + request_snippet_thumbnails_high_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().high.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.high.width", "integer")); + }, + "snippet.thumbnails.high.height" => { + request_snippet_thumbnails_high_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().high.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.high.height", "integer")); + }, + "snippet.thumbnails.medium.url" => { + request_snippet_thumbnails_medium_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().medium.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); + }, + "snippet.thumbnails.medium.width" => { + request_snippet_thumbnails_medium_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().medium.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.medium.width", "integer")); + }, + "snippet.thumbnails.medium.height" => { + request_snippet_thumbnails_medium_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().medium.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.medium.height", "integer")); + }, + "snippet.thumbnails.maxres.url" => { + request_snippet_thumbnails_maxres_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().maxres.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); + }, + "snippet.thumbnails.maxres.width" => { + request_snippet_thumbnails_maxres_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().maxres.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.maxres.width", "integer")); + }, + "snippet.thumbnails.maxres.height" => { + request_snippet_thumbnails_maxres_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().maxres.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.maxres.height", "integer")); + }, + "snippet.thumbnails.standard.url" => { + request_snippet_thumbnails_standard_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().standard.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); + }, + "snippet.thumbnails.standard.width" => { + request_snippet_thumbnails_standard_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().standard.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.standard.width", "integer")); + }, + "snippet.thumbnails.standard.height" => { + request_snippet_thumbnails_standard_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().standard.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.standard.height", "integer")); + }, + "etag" => { + request_snippet_init(&mut request); + request.etag = Some(value.unwrap_or("").to_string()); + }, + "id" => { + request_snippet_init(&mut request); + request.id = Some(value.unwrap_or("").to_string()); + }, + _ => { + err.issues.push(CLIError::Field(FieldError::Unknown(temp_cursor.to_string()))); + } + } + } + let mut call = self.hub.playlist_items().update(request); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { + let (key, value) = parse_kv_arg(&*parg, err, false); + match key { + "alt" + |"fields" + |"key" + |"oauth-token" + |"pretty-print" + |"quota-user" + |"user-ip" => { + let map = [ + ("oauth-token", "oauth_token"), + ("pretty-print", "prettyPrint"), + ("quota-user", "quotaUser"), + ("user-ip", "userIp"), + ]; + call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) + }, + _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), + } + } + let protocol = CallType::Standard; + if dry_run { + Ok(()) + } else { + assert!(err.issues.len() == 0); + for scope in self.opt.values_of("url").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(), + _ => unreachable!() + } { + Err(api_err) => Err(DoitError::ApiError(api_err)), + Ok((mut response, output_schema)) => { + serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); + Ok(()) + } + } + } + } + + fn _playlists_delete(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + let mut call = self.hub.playlists().delete(opt.value_of("id").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { + let (key, value) = parse_kv_arg(&*parg, err, false); + match key { + "on-behalf-of-content-owner" => { + call = call.on_behalf_of_content_owner(value.unwrap_or("")); + }, + "alt" + |"fields" + |"key" + |"oauth-token" + |"pretty-print" + |"quota-user" + |"user-ip" => { + let map = [ + ("oauth-token", "oauth_token"), + ("pretty-print", "prettyPrint"), + ("quota-user", "quotaUser"), + ("user-ip", "userIp"), + ]; + call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) + }, + _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), + } + } + let protocol = CallType::Standard; + if dry_run { + Ok(()) + } else { + assert!(err.issues.len() == 0); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); + } + match match protocol { + CallType::Standard => call.doit(), + _ => unreachable!() + } { + Err(api_err) => Err(DoitError::ApiError(api_err)), + Ok(mut response) => { + Ok(()) + } + } + } + } + + fn _playlists_insert(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + + let mut request = api::Playlist::default(); + let mut field_cursor = FieldCursor::default(); + for kvarg in opt.values_of("kv").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; + } + fn request_content_details_init(request: &mut api::Playlist) { + if request.content_details.is_none() { + request.content_details = Some(Default::default()); + } + } + + fn request_player_init(request: &mut api::Playlist) { + if request.player.is_none() { + request.player = Some(Default::default()); + } + } + + fn request_snippet_init(request: &mut api::Playlist) { + if request.snippet.is_none() { + request.snippet = Some(Default::default()); + } + } + + fn request_snippet_localized_init(request: &mut api::Playlist) { + request_snippet_init(request); + if request.snippet.as_mut().unwrap().localized.is_none() { + request.snippet.as_mut().unwrap().localized = Some(Default::default()); + } + } + + fn request_snippet_thumbnails_default_init(request: &mut api::Playlist) { + request_snippet_thumbnails_init(request); + if request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().default.is_none() { + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().default = Some(Default::default()); + } + } + + fn request_snippet_thumbnails_high_init(request: &mut api::Playlist) { + request_snippet_thumbnails_init(request); + if request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().high.is_none() { + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().high = Some(Default::default()); + } + } + + fn request_snippet_thumbnails_init(request: &mut api::Playlist) { + request_snippet_init(request); + if request.snippet.as_mut().unwrap().thumbnails.is_none() { + request.snippet.as_mut().unwrap().thumbnails = Some(Default::default()); + } + } + + fn request_snippet_thumbnails_maxres_init(request: &mut api::Playlist) { + request_snippet_thumbnails_init(request); + if request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().maxres.is_none() { + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().maxres = Some(Default::default()); + } + } + + fn request_snippet_thumbnails_medium_init(request: &mut api::Playlist) { + request_snippet_thumbnails_init(request); + if request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().medium.is_none() { + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().medium = Some(Default::default()); + } + } + + fn request_snippet_thumbnails_standard_init(request: &mut api::Playlist) { + request_snippet_thumbnails_init(request); + if request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().standard.is_none() { + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().standard = Some(Default::default()); + } + } + + fn request_status_init(request: &mut api::Playlist) { + if request.status.is_none() { + request.status = Some(Default::default()); + } + } + + match &temp_cursor.to_string()[..] { + "status.privacy-status" => { + request_status_init(&mut request); + request.status.as_mut().unwrap().privacy_status = Some(value.unwrap_or("").to_string()); + }, + "kind" => { + request_status_init(&mut request); + request.kind = Some(value.unwrap_or("").to_string()); + }, + "content-details.item-count" => { + request_content_details_init(&mut request); + request.content_details.as_mut().unwrap().item_count = Some(arg_from_str(value.unwrap_or("-0"), err, "content-details.item-count", "integer")); + }, + "snippet.description" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().description = Some(value.unwrap_or("").to_string()); + }, + "snippet.tags" => { + request_snippet_init(&mut request); + if request.snippet.as_mut().unwrap().tags.is_none() { + request.snippet.as_mut().unwrap().tags = Some(Default::default()); + } + request.snippet.as_mut().unwrap().tags.as_mut().unwrap().push(value.unwrap_or("").to_string()); + }, + "snippet.channel-id" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().channel_id = Some(value.unwrap_or("").to_string()); + }, + "snippet.published-at" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().published_at = Some(value.unwrap_or("").to_string()); + }, + "snippet.channel-title" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().channel_title = Some(value.unwrap_or("").to_string()); + }, + "snippet.title" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().title = Some(value.unwrap_or("").to_string()); + }, + "snippet.default-language" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().default_language = Some(value.unwrap_or("").to_string()); + }, + "snippet.localized.description" => { + request_snippet_localized_init(&mut request); + request.snippet.as_mut().unwrap().localized.as_mut().unwrap().description = Some(value.unwrap_or("").to_string()); + }, + "snippet.localized.title" => { + request_snippet_localized_init(&mut request); + request.snippet.as_mut().unwrap().localized.as_mut().unwrap().title = Some(value.unwrap_or("").to_string()); + }, + "snippet.thumbnails.default.url" => { + request_snippet_thumbnails_default_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().default.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); + }, + "snippet.thumbnails.default.width" => { + request_snippet_thumbnails_default_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().default.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.default.width", "integer")); + }, + "snippet.thumbnails.default.height" => { + request_snippet_thumbnails_default_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().default.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.default.height", "integer")); + }, + "snippet.thumbnails.high.url" => { + request_snippet_thumbnails_high_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().high.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); + }, + "snippet.thumbnails.high.width" => { + request_snippet_thumbnails_high_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().high.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.high.width", "integer")); + }, + "snippet.thumbnails.high.height" => { + request_snippet_thumbnails_high_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().high.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.high.height", "integer")); + }, + "snippet.thumbnails.medium.url" => { + request_snippet_thumbnails_medium_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().medium.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); + }, + "snippet.thumbnails.medium.width" => { + request_snippet_thumbnails_medium_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().medium.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.medium.width", "integer")); + }, + "snippet.thumbnails.medium.height" => { + request_snippet_thumbnails_medium_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().medium.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.medium.height", "integer")); + }, + "snippet.thumbnails.maxres.url" => { + request_snippet_thumbnails_maxres_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().maxres.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); + }, + "snippet.thumbnails.maxres.width" => { + request_snippet_thumbnails_maxres_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().maxres.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.maxres.width", "integer")); + }, + "snippet.thumbnails.maxres.height" => { + request_snippet_thumbnails_maxres_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().maxres.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.maxres.height", "integer")); + }, + "snippet.thumbnails.standard.url" => { + request_snippet_thumbnails_standard_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().standard.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); + }, + "snippet.thumbnails.standard.width" => { + request_snippet_thumbnails_standard_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().standard.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.standard.width", "integer")); + }, + "snippet.thumbnails.standard.height" => { + request_snippet_thumbnails_standard_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().standard.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.standard.height", "integer")); + }, + "player.embed-html" => { + request_player_init(&mut request); + request.player.as_mut().unwrap().embed_html = Some(value.unwrap_or("").to_string()); + }, + "etag" => { + request_player_init(&mut request); + request.etag = Some(value.unwrap_or("").to_string()); + }, + "id" => { + request_player_init(&mut request); + request.id = Some(value.unwrap_or("").to_string()); + }, + _ => { + err.issues.push(CLIError::Field(FieldError::Unknown(temp_cursor.to_string()))); + } + } + } + let mut call = self.hub.playlists().insert(request); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { + let (key, value) = parse_kv_arg(&*parg, err, false); + match key { + "on-behalf-of-content-owner-channel" => { + call = call.on_behalf_of_content_owner_channel(value.unwrap_or("")); + }, + "on-behalf-of-content-owner" => { + call = call.on_behalf_of_content_owner(value.unwrap_or("")); + }, + "alt" + |"fields" + |"key" + |"oauth-token" + |"pretty-print" + |"quota-user" + |"user-ip" => { + let map = [ + ("oauth-token", "oauth_token"), + ("pretty-print", "prettyPrint"), + ("quota-user", "quotaUser"), + ("user-ip", "userIp"), + ]; + call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) + }, + _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), + } + } + let protocol = CallType::Standard; + if dry_run { + Ok(()) + } else { + assert!(err.issues.len() == 0); + for scope in self.opt.values_of("url").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(), + _ => unreachable!() + } { + Err(api_err) => Err(DoitError::ApiError(api_err)), + Ok((mut response, output_schema)) => { + serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); + Ok(()) + } + } + } + } + + fn _playlists_list(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + let mut call = self.hub.playlists().list(opt.value_of("part").unwrap_or("")); + for parg in opt.values_of("v").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("")); + }, + "on-behalf-of-content-owner-channel" => { + call = call.on_behalf_of_content_owner_channel(value.unwrap_or("")); + }, + "on-behalf-of-content-owner" => { + call = call.on_behalf_of_content_owner(value.unwrap_or("")); + }, + "mine" => { + call = call.mine(arg_from_str(value.unwrap_or("false"), err, "mine", "boolean")); + }, + "max-results" => { + call = call.max_results(arg_from_str(value.unwrap_or("-0"), err, "max-results", "integer")); + }, + "id" => { + call = call.id(value.unwrap_or("")); + }, + "hl" => { + call = call.hl(value.unwrap_or("")); + }, + "channel-id" => { + call = call.channel_id(value.unwrap_or("")); + }, + "alt" + |"fields" + |"key" + |"oauth-token" + |"pretty-print" + |"quota-user" + |"user-ip" => { + let map = [ + ("oauth-token", "oauth_token"), + ("pretty-print", "prettyPrint"), + ("quota-user", "quotaUser"), + ("user-ip", "userIp"), + ]; + call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) + }, + _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), + } + } + let protocol = CallType::Standard; + if dry_run { + Ok(()) + } else { + assert!(err.issues.len() == 0); + for scope in self.opt.values_of("url").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(), + _ => unreachable!() + } { + Err(api_err) => Err(DoitError::ApiError(api_err)), + Ok((mut response, output_schema)) => { + serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); + Ok(()) + } + } + } + } + + fn _playlists_update(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + + let mut request = api::Playlist::default(); + let mut field_cursor = FieldCursor::default(); + for kvarg in opt.values_of("kv").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; + } + fn request_content_details_init(request: &mut api::Playlist) { + if request.content_details.is_none() { + request.content_details = Some(Default::default()); + } + } + + fn request_player_init(request: &mut api::Playlist) { + if request.player.is_none() { + request.player = Some(Default::default()); + } + } + + fn request_snippet_init(request: &mut api::Playlist) { + if request.snippet.is_none() { + request.snippet = Some(Default::default()); + } + } + + fn request_snippet_localized_init(request: &mut api::Playlist) { + request_snippet_init(request); + if request.snippet.as_mut().unwrap().localized.is_none() { + request.snippet.as_mut().unwrap().localized = Some(Default::default()); + } + } + + fn request_snippet_thumbnails_default_init(request: &mut api::Playlist) { + request_snippet_thumbnails_init(request); + if request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().default.is_none() { + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().default = Some(Default::default()); + } + } + + fn request_snippet_thumbnails_high_init(request: &mut api::Playlist) { + request_snippet_thumbnails_init(request); + if request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().high.is_none() { + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().high = Some(Default::default()); + } + } + + fn request_snippet_thumbnails_init(request: &mut api::Playlist) { + request_snippet_init(request); + if request.snippet.as_mut().unwrap().thumbnails.is_none() { + request.snippet.as_mut().unwrap().thumbnails = Some(Default::default()); + } + } + + fn request_snippet_thumbnails_maxres_init(request: &mut api::Playlist) { + request_snippet_thumbnails_init(request); + if request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().maxres.is_none() { + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().maxres = Some(Default::default()); + } + } + + fn request_snippet_thumbnails_medium_init(request: &mut api::Playlist) { + request_snippet_thumbnails_init(request); + if request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().medium.is_none() { + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().medium = Some(Default::default()); + } + } + + fn request_snippet_thumbnails_standard_init(request: &mut api::Playlist) { + request_snippet_thumbnails_init(request); + if request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().standard.is_none() { + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().standard = Some(Default::default()); + } + } + + fn request_status_init(request: &mut api::Playlist) { + if request.status.is_none() { + request.status = Some(Default::default()); + } + } + + match &temp_cursor.to_string()[..] { + "status.privacy-status" => { + request_status_init(&mut request); + request.status.as_mut().unwrap().privacy_status = Some(value.unwrap_or("").to_string()); + }, + "kind" => { + request_status_init(&mut request); + request.kind = Some(value.unwrap_or("").to_string()); + }, + "content-details.item-count" => { + request_content_details_init(&mut request); + request.content_details.as_mut().unwrap().item_count = Some(arg_from_str(value.unwrap_or("-0"), err, "content-details.item-count", "integer")); + }, + "snippet.description" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().description = Some(value.unwrap_or("").to_string()); + }, + "snippet.tags" => { + request_snippet_init(&mut request); + if request.snippet.as_mut().unwrap().tags.is_none() { + request.snippet.as_mut().unwrap().tags = Some(Default::default()); + } + request.snippet.as_mut().unwrap().tags.as_mut().unwrap().push(value.unwrap_or("").to_string()); + }, + "snippet.channel-id" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().channel_id = Some(value.unwrap_or("").to_string()); + }, + "snippet.published-at" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().published_at = Some(value.unwrap_or("").to_string()); + }, + "snippet.channel-title" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().channel_title = Some(value.unwrap_or("").to_string()); + }, + "snippet.title" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().title = Some(value.unwrap_or("").to_string()); + }, + "snippet.default-language" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().default_language = Some(value.unwrap_or("").to_string()); + }, + "snippet.localized.description" => { + request_snippet_localized_init(&mut request); + request.snippet.as_mut().unwrap().localized.as_mut().unwrap().description = Some(value.unwrap_or("").to_string()); + }, + "snippet.localized.title" => { + request_snippet_localized_init(&mut request); + request.snippet.as_mut().unwrap().localized.as_mut().unwrap().title = Some(value.unwrap_or("").to_string()); + }, + "snippet.thumbnails.default.url" => { + request_snippet_thumbnails_default_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().default.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); + }, + "snippet.thumbnails.default.width" => { + request_snippet_thumbnails_default_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().default.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.default.width", "integer")); + }, + "snippet.thumbnails.default.height" => { + request_snippet_thumbnails_default_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().default.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.default.height", "integer")); + }, + "snippet.thumbnails.high.url" => { + request_snippet_thumbnails_high_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().high.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); + }, + "snippet.thumbnails.high.width" => { + request_snippet_thumbnails_high_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().high.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.high.width", "integer")); + }, + "snippet.thumbnails.high.height" => { + request_snippet_thumbnails_high_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().high.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.high.height", "integer")); + }, + "snippet.thumbnails.medium.url" => { + request_snippet_thumbnails_medium_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().medium.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); + }, + "snippet.thumbnails.medium.width" => { + request_snippet_thumbnails_medium_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().medium.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.medium.width", "integer")); + }, + "snippet.thumbnails.medium.height" => { + request_snippet_thumbnails_medium_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().medium.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.medium.height", "integer")); + }, + "snippet.thumbnails.maxres.url" => { + request_snippet_thumbnails_maxres_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().maxres.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); + }, + "snippet.thumbnails.maxres.width" => { + request_snippet_thumbnails_maxres_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().maxres.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.maxres.width", "integer")); + }, + "snippet.thumbnails.maxres.height" => { + request_snippet_thumbnails_maxres_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().maxres.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.maxres.height", "integer")); + }, + "snippet.thumbnails.standard.url" => { + request_snippet_thumbnails_standard_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().standard.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); + }, + "snippet.thumbnails.standard.width" => { + request_snippet_thumbnails_standard_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().standard.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.standard.width", "integer")); + }, + "snippet.thumbnails.standard.height" => { + request_snippet_thumbnails_standard_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().standard.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.standard.height", "integer")); + }, + "player.embed-html" => { + request_player_init(&mut request); + request.player.as_mut().unwrap().embed_html = Some(value.unwrap_or("").to_string()); + }, + "etag" => { + request_player_init(&mut request); + request.etag = Some(value.unwrap_or("").to_string()); + }, + "id" => { + request_player_init(&mut request); + request.id = Some(value.unwrap_or("").to_string()); + }, + _ => { + err.issues.push(CLIError::Field(FieldError::Unknown(temp_cursor.to_string()))); + } + } + } + let mut call = self.hub.playlists().update(request); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { + let (key, value) = parse_kv_arg(&*parg, err, false); + match key { + "on-behalf-of-content-owner" => { + call = call.on_behalf_of_content_owner(value.unwrap_or("")); + }, + "alt" + |"fields" + |"key" + |"oauth-token" + |"pretty-print" + |"quota-user" + |"user-ip" => { + let map = [ + ("oauth-token", "oauth_token"), + ("pretty-print", "prettyPrint"), + ("quota-user", "quotaUser"), + ("user-ip", "userIp"), + ]; + call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) + }, + _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), + } + } + let protocol = CallType::Standard; + if dry_run { + Ok(()) + } else { + assert!(err.issues.len() == 0); + for scope in self.opt.values_of("url").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(), + _ => unreachable!() + } { + Err(api_err) => Err(DoitError::ApiError(api_err)), + Ok((mut response, output_schema)) => { + serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); + Ok(()) + } + } + } + } + + fn _search_list(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + let mut call = self.hub.search().list(opt.value_of("part").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { + let (key, value) = parse_kv_arg(&*parg, err, false); + match key { + "video-type" => { + call = call.video_type(value.unwrap_or("")); + }, + "video-syndicated" => { + call = call.video_syndicated(value.unwrap_or("")); + }, + "video-license" => { + call = call.video_license(value.unwrap_or("")); + }, + "video-embeddable" => { + call = call.video_embeddable(value.unwrap_or("")); + }, + "video-duration" => { + call = call.video_duration(value.unwrap_or("")); + }, + "video-dimension" => { + call = call.video_dimension(value.unwrap_or("")); + }, + "video-definition" => { + call = call.video_definition(value.unwrap_or("")); + }, + "video-category-id" => { + call = call.video_category_id(value.unwrap_or("")); + }, + "video-caption" => { + call = call.video_caption(value.unwrap_or("")); + }, + "type" => { + call = call.type_(value.unwrap_or("")); + }, + "topic-id" => { + call = call.topic_id(value.unwrap_or("")); + }, + "safe-search" => { + call = call.safe_search(value.unwrap_or("")); + }, + "relevance-language" => { + call = call.relevance_language(value.unwrap_or("")); + }, + "related-to-video-id" => { + call = call.related_to_video_id(value.unwrap_or("")); + }, + "region-code" => { + call = call.region_code(value.unwrap_or("")); + }, + "q" => { + call = call.q(value.unwrap_or("")); + }, + "published-before" => { + call = call.published_before(value.unwrap_or("")); + }, + "published-after" => { + call = call.published_after(value.unwrap_or("")); + }, + "page-token" => { + call = call.page_token(value.unwrap_or("")); + }, + "order" => { + call = call.order(value.unwrap_or("")); + }, + "on-behalf-of-content-owner" => { + call = call.on_behalf_of_content_owner(value.unwrap_or("")); + }, + "max-results" => { + call = call.max_results(arg_from_str(value.unwrap_or("-0"), err, "max-results", "integer")); + }, + "location-radius" => { + call = call.location_radius(value.unwrap_or("")); + }, + "location" => { + call = call.location(value.unwrap_or("")); + }, + "for-mine" => { + call = call.for_mine(arg_from_str(value.unwrap_or("false"), err, "for-mine", "boolean")); + }, + "for-developer" => { + call = call.for_developer(arg_from_str(value.unwrap_or("false"), err, "for-developer", "boolean")); + }, + "for-content-owner" => { + call = call.for_content_owner(arg_from_str(value.unwrap_or("false"), err, "for-content-owner", "boolean")); + }, + "event-type" => { + call = call.event_type(value.unwrap_or("")); + }, + "channel-type" => { + call = call.channel_type(value.unwrap_or("")); + }, + "channel-id" => { + call = call.channel_id(value.unwrap_or("")); + }, + "alt" + |"fields" + |"key" + |"oauth-token" + |"pretty-print" + |"quota-user" + |"user-ip" => { + let map = [ + ("oauth-token", "oauth_token"), + ("pretty-print", "prettyPrint"), + ("quota-user", "quotaUser"), + ("user-ip", "userIp"), + ]; + call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) + }, + _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), + } + } + let protocol = CallType::Standard; + if dry_run { + Ok(()) + } else { + assert!(err.issues.len() == 0); + for scope in self.opt.values_of("url").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(), + _ => unreachable!() + } { + Err(api_err) => Err(DoitError::ApiError(api_err)), + Ok((mut response, output_schema)) => { + serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); + Ok(()) + } + } + } + } + + fn _subscriptions_delete(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + let mut call = self.hub.subscriptions().delete(opt.value_of("id").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { + let (key, value) = parse_kv_arg(&*parg, err, false); + match key { + "alt" + |"fields" + |"key" + |"oauth-token" + |"pretty-print" + |"quota-user" + |"user-ip" => { + let map = [ + ("oauth-token", "oauth_token"), + ("pretty-print", "prettyPrint"), + ("quota-user", "quotaUser"), + ("user-ip", "userIp"), + ]; + call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) + }, + _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), + } + } + let protocol = CallType::Standard; + if dry_run { + Ok(()) + } else { + assert!(err.issues.len() == 0); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); + } + match match protocol { + CallType::Standard => call.doit(), + _ => unreachable!() + } { + Err(api_err) => Err(DoitError::ApiError(api_err)), + Ok(mut response) => { + Ok(()) + } + } + } + } + + fn _subscriptions_insert(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + + let mut request = api::Subscription::default(); + let mut field_cursor = FieldCursor::default(); + for kvarg in opt.values_of("kv").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; + } + fn request_content_details_init(request: &mut api::Subscription) { + if request.content_details.is_none() { + request.content_details = Some(Default::default()); + } + } + + fn request_snippet_init(request: &mut api::Subscription) { + if request.snippet.is_none() { + request.snippet = Some(Default::default()); + } + } + + fn request_snippet_resource_id_init(request: &mut api::Subscription) { + request_snippet_init(request); + if request.snippet.as_mut().unwrap().resource_id.is_none() { + request.snippet.as_mut().unwrap().resource_id = Some(Default::default()); + } + } + + fn request_snippet_thumbnails_default_init(request: &mut api::Subscription) { + request_snippet_thumbnails_init(request); + if request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().default.is_none() { + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().default = Some(Default::default()); + } + } + + fn request_snippet_thumbnails_high_init(request: &mut api::Subscription) { + request_snippet_thumbnails_init(request); + if request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().high.is_none() { + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().high = Some(Default::default()); + } + } + + fn request_snippet_thumbnails_init(request: &mut api::Subscription) { + request_snippet_init(request); + if request.snippet.as_mut().unwrap().thumbnails.is_none() { + request.snippet.as_mut().unwrap().thumbnails = Some(Default::default()); + } + } + + fn request_snippet_thumbnails_maxres_init(request: &mut api::Subscription) { + request_snippet_thumbnails_init(request); + if request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().maxres.is_none() { + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().maxres = Some(Default::default()); + } + } + + fn request_snippet_thumbnails_medium_init(request: &mut api::Subscription) { + request_snippet_thumbnails_init(request); + if request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().medium.is_none() { + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().medium = Some(Default::default()); + } + } + + fn request_snippet_thumbnails_standard_init(request: &mut api::Subscription) { + request_snippet_thumbnails_init(request); + if request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().standard.is_none() { + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().standard = Some(Default::default()); + } + } + + fn request_subscriber_snippet_init(request: &mut api::Subscription) { + if request.subscriber_snippet.is_none() { + request.subscriber_snippet = Some(Default::default()); + } + } + + fn request_subscriber_snippet_thumbnails_default_init(request: &mut api::Subscription) { + request_subscriber_snippet_thumbnails_init(request); + if request.subscriber_snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().default.is_none() { + request.subscriber_snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().default = Some(Default::default()); + } + } + + fn request_subscriber_snippet_thumbnails_high_init(request: &mut api::Subscription) { + request_subscriber_snippet_thumbnails_init(request); + if request.subscriber_snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().high.is_none() { + request.subscriber_snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().high = Some(Default::default()); + } + } + + fn request_subscriber_snippet_thumbnails_init(request: &mut api::Subscription) { + request_subscriber_snippet_init(request); + if request.subscriber_snippet.as_mut().unwrap().thumbnails.is_none() { + request.subscriber_snippet.as_mut().unwrap().thumbnails = Some(Default::default()); + } + } + + fn request_subscriber_snippet_thumbnails_maxres_init(request: &mut api::Subscription) { + request_subscriber_snippet_thumbnails_init(request); + if request.subscriber_snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().maxres.is_none() { + request.subscriber_snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().maxres = Some(Default::default()); + } + } + + fn request_subscriber_snippet_thumbnails_medium_init(request: &mut api::Subscription) { + request_subscriber_snippet_thumbnails_init(request); + if request.subscriber_snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().medium.is_none() { + request.subscriber_snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().medium = Some(Default::default()); + } + } + + fn request_subscriber_snippet_thumbnails_standard_init(request: &mut api::Subscription) { + request_subscriber_snippet_thumbnails_init(request); + if request.subscriber_snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().standard.is_none() { + request.subscriber_snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().standard = Some(Default::default()); + } + } + + match &temp_cursor.to_string()[..] { + "kind" => { + request.kind = Some(value.unwrap_or("").to_string()); + }, + "content-details.new-item-count" => { + request_content_details_init(&mut request); + request.content_details.as_mut().unwrap().new_item_count = Some(arg_from_str(value.unwrap_or("-0"), err, "content-details.new-item-count", "integer")); + }, + "content-details.activity-type" => { + request_content_details_init(&mut request); + request.content_details.as_mut().unwrap().activity_type = Some(value.unwrap_or("").to_string()); + }, + "content-details.total-item-count" => { + request_content_details_init(&mut request); + request.content_details.as_mut().unwrap().total_item_count = Some(arg_from_str(value.unwrap_or("-0"), err, "content-details.total-item-count", "integer")); + }, + "snippet.description" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().description = Some(value.unwrap_or("").to_string()); + }, + "snippet.title" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().title = Some(value.unwrap_or("").to_string()); + }, + "snippet.resource-id.kind" => { + request_snippet_resource_id_init(&mut request); + request.snippet.as_mut().unwrap().resource_id.as_mut().unwrap().kind = Some(value.unwrap_or("").to_string()); + }, + "snippet.resource-id.channel-id" => { + request_snippet_resource_id_init(&mut request); + request.snippet.as_mut().unwrap().resource_id.as_mut().unwrap().channel_id = Some(value.unwrap_or("").to_string()); + }, + "snippet.resource-id.playlist-id" => { + request_snippet_resource_id_init(&mut request); + request.snippet.as_mut().unwrap().resource_id.as_mut().unwrap().playlist_id = Some(value.unwrap_or("").to_string()); + }, + "snippet.resource-id.video-id" => { + request_snippet_resource_id_init(&mut request); + request.snippet.as_mut().unwrap().resource_id.as_mut().unwrap().video_id = Some(value.unwrap_or("").to_string()); + }, + "snippet.channel-id" => { + request_snippet_resource_id_init(&mut request); + request.snippet.as_mut().unwrap().channel_id = Some(value.unwrap_or("").to_string()); + }, + "snippet.published-at" => { + request_snippet_resource_id_init(&mut request); + request.snippet.as_mut().unwrap().published_at = Some(value.unwrap_or("").to_string()); + }, + "snippet.channel-title" => { + request_snippet_resource_id_init(&mut request); + request.snippet.as_mut().unwrap().channel_title = Some(value.unwrap_or("").to_string()); + }, + "snippet.thumbnails.default.url" => { + request_snippet_thumbnails_default_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().default.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); + }, + "snippet.thumbnails.default.width" => { + request_snippet_thumbnails_default_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().default.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.default.width", "integer")); + }, + "snippet.thumbnails.default.height" => { + request_snippet_thumbnails_default_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().default.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.default.height", "integer")); + }, + "snippet.thumbnails.high.url" => { + request_snippet_thumbnails_high_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().high.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); + }, + "snippet.thumbnails.high.width" => { + request_snippet_thumbnails_high_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().high.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.high.width", "integer")); + }, + "snippet.thumbnails.high.height" => { + request_snippet_thumbnails_high_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().high.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.high.height", "integer")); + }, + "snippet.thumbnails.medium.url" => { + request_snippet_thumbnails_medium_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().medium.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); + }, + "snippet.thumbnails.medium.width" => { + request_snippet_thumbnails_medium_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().medium.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.medium.width", "integer")); + }, + "snippet.thumbnails.medium.height" => { + request_snippet_thumbnails_medium_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().medium.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.medium.height", "integer")); + }, + "snippet.thumbnails.maxres.url" => { + request_snippet_thumbnails_maxres_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().maxres.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); + }, + "snippet.thumbnails.maxres.width" => { + request_snippet_thumbnails_maxres_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().maxres.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.maxres.width", "integer")); + }, + "snippet.thumbnails.maxres.height" => { + request_snippet_thumbnails_maxres_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().maxres.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.maxres.height", "integer")); + }, + "snippet.thumbnails.standard.url" => { + request_snippet_thumbnails_standard_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().standard.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); + }, + "snippet.thumbnails.standard.width" => { + request_snippet_thumbnails_standard_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().standard.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.standard.width", "integer")); + }, + "snippet.thumbnails.standard.height" => { + request_snippet_thumbnails_standard_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().standard.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.standard.height", "integer")); + }, + "etag" => { + request_snippet_init(&mut request); + request.etag = Some(value.unwrap_or("").to_string()); + }, + "subscriber-snippet.title" => { + request_subscriber_snippet_init(&mut request); + request.subscriber_snippet.as_mut().unwrap().title = Some(value.unwrap_or("").to_string()); + }, + "subscriber-snippet.channel-id" => { + request_subscriber_snippet_init(&mut request); + request.subscriber_snippet.as_mut().unwrap().channel_id = Some(value.unwrap_or("").to_string()); + }, + "subscriber-snippet.description" => { + request_subscriber_snippet_init(&mut request); + request.subscriber_snippet.as_mut().unwrap().description = Some(value.unwrap_or("").to_string()); + }, + "subscriber-snippet.thumbnails.default.url" => { + request_subscriber_snippet_thumbnails_default_init(&mut request); + request.subscriber_snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().default.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); + }, + "subscriber-snippet.thumbnails.default.width" => { + request_subscriber_snippet_thumbnails_default_init(&mut request); + request.subscriber_snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().default.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "subscriber-snippet.thumbnails.default.width", "integer")); + }, + "subscriber-snippet.thumbnails.default.height" => { + request_subscriber_snippet_thumbnails_default_init(&mut request); + request.subscriber_snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().default.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "subscriber-snippet.thumbnails.default.height", "integer")); + }, + "subscriber-snippet.thumbnails.high.url" => { + request_subscriber_snippet_thumbnails_high_init(&mut request); + request.subscriber_snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().high.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); + }, + "subscriber-snippet.thumbnails.high.width" => { + request_subscriber_snippet_thumbnails_high_init(&mut request); + request.subscriber_snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().high.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "subscriber-snippet.thumbnails.high.width", "integer")); + }, + "subscriber-snippet.thumbnails.high.height" => { + request_subscriber_snippet_thumbnails_high_init(&mut request); + request.subscriber_snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().high.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "subscriber-snippet.thumbnails.high.height", "integer")); + }, + "subscriber-snippet.thumbnails.medium.url" => { + request_subscriber_snippet_thumbnails_medium_init(&mut request); + request.subscriber_snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().medium.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); + }, + "subscriber-snippet.thumbnails.medium.width" => { + request_subscriber_snippet_thumbnails_medium_init(&mut request); + request.subscriber_snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().medium.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "subscriber-snippet.thumbnails.medium.width", "integer")); + }, + "subscriber-snippet.thumbnails.medium.height" => { + request_subscriber_snippet_thumbnails_medium_init(&mut request); + request.subscriber_snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().medium.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "subscriber-snippet.thumbnails.medium.height", "integer")); + }, + "subscriber-snippet.thumbnails.maxres.url" => { + request_subscriber_snippet_thumbnails_maxres_init(&mut request); + request.subscriber_snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().maxres.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); + }, + "subscriber-snippet.thumbnails.maxres.width" => { + request_subscriber_snippet_thumbnails_maxres_init(&mut request); + request.subscriber_snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().maxres.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "subscriber-snippet.thumbnails.maxres.width", "integer")); + }, + "subscriber-snippet.thumbnails.maxres.height" => { + request_subscriber_snippet_thumbnails_maxres_init(&mut request); + request.subscriber_snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().maxres.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "subscriber-snippet.thumbnails.maxres.height", "integer")); + }, + "subscriber-snippet.thumbnails.standard.url" => { + request_subscriber_snippet_thumbnails_standard_init(&mut request); + request.subscriber_snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().standard.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); + }, + "subscriber-snippet.thumbnails.standard.width" => { + request_subscriber_snippet_thumbnails_standard_init(&mut request); + request.subscriber_snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().standard.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "subscriber-snippet.thumbnails.standard.width", "integer")); + }, + "subscriber-snippet.thumbnails.standard.height" => { + request_subscriber_snippet_thumbnails_standard_init(&mut request); + request.subscriber_snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().standard.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "subscriber-snippet.thumbnails.standard.height", "integer")); + }, + "id" => { + request_subscriber_snippet_init(&mut request); + request.id = Some(value.unwrap_or("").to_string()); + }, + _ => { + err.issues.push(CLIError::Field(FieldError::Unknown(temp_cursor.to_string()))); + } + } + } + let mut call = self.hub.subscriptions().insert(request); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { + let (key, value) = parse_kv_arg(&*parg, err, false); + match key { + "alt" + |"fields" + |"key" + |"oauth-token" + |"pretty-print" + |"quota-user" + |"user-ip" => { + let map = [ + ("oauth-token", "oauth_token"), + ("pretty-print", "prettyPrint"), + ("quota-user", "quotaUser"), + ("user-ip", "userIp"), + ]; + call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) + }, + _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), + } + } + let protocol = CallType::Standard; + if dry_run { + Ok(()) + } else { + assert!(err.issues.len() == 0); + for scope in self.opt.values_of("url").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(), + _ => unreachable!() + } { + Err(api_err) => Err(DoitError::ApiError(api_err)), + Ok((mut response, output_schema)) => { + serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); + Ok(()) + } + } + } + } + + fn _subscriptions_list(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + let mut call = self.hub.subscriptions().list(opt.value_of("part").unwrap_or("")); + for parg in opt.values_of("v").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("")); + }, + "order" => { + call = call.order(value.unwrap_or("")); + }, + "on-behalf-of-content-owner-channel" => { + call = call.on_behalf_of_content_owner_channel(value.unwrap_or("")); + }, + "on-behalf-of-content-owner" => { + call = call.on_behalf_of_content_owner(value.unwrap_or("")); + }, + "my-subscribers" => { + call = call.my_subscribers(arg_from_str(value.unwrap_or("false"), err, "my-subscribers", "boolean")); + }, + "mine" => { + call = call.mine(arg_from_str(value.unwrap_or("false"), err, "mine", "boolean")); + }, + "max-results" => { + call = call.max_results(arg_from_str(value.unwrap_or("-0"), err, "max-results", "integer")); + }, + "id" => { + call = call.id(value.unwrap_or("")); + }, + "for-channel-id" => { + call = call.for_channel_id(value.unwrap_or("")); + }, + "channel-id" => { + call = call.channel_id(value.unwrap_or("")); + }, + "alt" + |"fields" + |"key" + |"oauth-token" + |"pretty-print" + |"quota-user" + |"user-ip" => { + let map = [ + ("oauth-token", "oauth_token"), + ("pretty-print", "prettyPrint"), + ("quota-user", "quotaUser"), + ("user-ip", "userIp"), + ]; + call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) + }, + _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), + } + } + let protocol = CallType::Standard; + if dry_run { + Ok(()) + } else { + assert!(err.issues.len() == 0); + for scope in self.opt.values_of("url").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(), + _ => unreachable!() + } { + Err(api_err) => Err(DoitError::ApiError(api_err)), + Ok((mut response, output_schema)) => { + serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); + Ok(()) + } + } + } + } + + fn _thumbnails_set(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + let mut call = self.hub.thumbnails().set(opt.value_of("video-id").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { + let (key, value) = parse_kv_arg(&*parg, err, false); + match key { + "on-behalf-of-content-owner" => { + call = call.on_behalf_of_content_owner(value.unwrap_or("")); + }, + "alt" + |"fields" + |"key" + |"oauth-token" + |"pretty-print" + |"quota-user" + |"user-ip" => { + let map = [ + ("oauth-token", "oauth_token"), + ("pretty-print", "prettyPrint"), + ("quota-user", "quotaUser"), + ("user-ip", "userIp"), + ]; + call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) + }, + _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), + } + } + let vals = opt.values_of("mode").unwrap(); + let protocol = protocol_from_str(vals[0], ["simple", "resumable"].iter().map(|&v| v.to_string()).collect(), err); + let mut input_file = input_file_from_opts(vals[1], err); + let mime_type = input_mime_from_opts(opt.value_of("mime").unwrap_or("application/octet-stream"), err); + if dry_run { + Ok(()) + } else { + assert!(err.issues.len() == 0); + for scope in self.opt.values_of("url").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::Upload(UploadProtocol::Simple) => call.upload(input_file.unwrap(), mime_type.unwrap()), + CallType::Upload(UploadProtocol::Resumable) => call.upload_resumable(input_file.unwrap(), mime_type.unwrap()), + CallType::Standard => unreachable!() + } { + Err(api_err) => Err(DoitError::ApiError(api_err)), + Ok((mut response, output_schema)) => { + serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); + Ok(()) + } + } + } + } + + fn _video_abuse_report_reasons_list(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + let mut call = self.hub.video_abuse_report_reasons().list(opt.value_of("part").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { + let (key, value) = parse_kv_arg(&*parg, err, false); + match key { + "hl" => { + call = call.hl(value.unwrap_or("")); + }, + "alt" + |"fields" + |"key" + |"oauth-token" + |"pretty-print" + |"quota-user" + |"user-ip" => { + let map = [ + ("oauth-token", "oauth_token"), + ("pretty-print", "prettyPrint"), + ("quota-user", "quotaUser"), + ("user-ip", "userIp"), + ]; + call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) + }, + _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), + } + } + let protocol = CallType::Standard; + if dry_run { + Ok(()) + } else { + assert!(err.issues.len() == 0); + for scope in self.opt.values_of("url").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(), + _ => unreachable!() + } { + Err(api_err) => Err(DoitError::ApiError(api_err)), + Ok((mut response, output_schema)) => { + serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); + Ok(()) + } + } + } + } + + fn _video_categories_list(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + let mut call = self.hub.video_categories().list(opt.value_of("part").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { + let (key, value) = parse_kv_arg(&*parg, err, false); + match key { + "region-code" => { + call = call.region_code(value.unwrap_or("")); + }, + "id" => { + call = call.id(value.unwrap_or("")); + }, + "hl" => { + call = call.hl(value.unwrap_or("")); + }, + "alt" + |"fields" + |"key" + |"oauth-token" + |"pretty-print" + |"quota-user" + |"user-ip" => { + let map = [ + ("oauth-token", "oauth_token"), + ("pretty-print", "prettyPrint"), + ("quota-user", "quotaUser"), + ("user-ip", "userIp"), + ]; + call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) + }, + _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), + } + } + let protocol = CallType::Standard; + if dry_run { + Ok(()) + } else { + assert!(err.issues.len() == 0); + for scope in self.opt.values_of("url").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(), + _ => unreachable!() + } { + Err(api_err) => Err(DoitError::ApiError(api_err)), + Ok((mut response, output_schema)) => { + serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); + Ok(()) + } + } + } + } + + fn _videos_delete(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + let mut call = self.hub.videos().delete(opt.value_of("id").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { + let (key, value) = parse_kv_arg(&*parg, err, false); + match key { + "on-behalf-of-content-owner" => { + call = call.on_behalf_of_content_owner(value.unwrap_or("")); + }, + "alt" + |"fields" + |"key" + |"oauth-token" + |"pretty-print" + |"quota-user" + |"user-ip" => { + let map = [ + ("oauth-token", "oauth_token"), + ("pretty-print", "prettyPrint"), + ("quota-user", "quotaUser"), + ("user-ip", "userIp"), + ]; + call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) + }, + _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), + } + } + let protocol = CallType::Standard; + if dry_run { + Ok(()) + } else { + assert!(err.issues.len() == 0); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); + } + match match protocol { + CallType::Standard => call.doit(), + _ => unreachable!() + } { + Err(api_err) => Err(DoitError::ApiError(api_err)), + Ok(mut response) => { + Ok(()) + } + } + } + } + + fn _videos_get_rating(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + let mut call = self.hub.videos().get_rating(opt.value_of("id").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { + let (key, value) = parse_kv_arg(&*parg, err, false); + match key { + "on-behalf-of-content-owner" => { + call = call.on_behalf_of_content_owner(value.unwrap_or("")); + }, + "alt" + |"fields" + |"key" + |"oauth-token" + |"pretty-print" + |"quota-user" + |"user-ip" => { + let map = [ + ("oauth-token", "oauth_token"), + ("pretty-print", "prettyPrint"), + ("quota-user", "quotaUser"), + ("user-ip", "userIp"), + ]; + call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) + }, + _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), + } + } + let protocol = CallType::Standard; + if dry_run { + Ok(()) + } else { + assert!(err.issues.len() == 0); + for scope in self.opt.values_of("url").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(), + _ => unreachable!() + } { + Err(api_err) => Err(DoitError::ApiError(api_err)), + Ok((mut response, output_schema)) => { + serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); + Ok(()) + } + } + } + } + + fn _videos_insert(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + + let mut request = api::Video::default(); + let mut field_cursor = FieldCursor::default(); + for kvarg in opt.values_of("kv").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; + } + fn request_age_gating_init(request: &mut api::Video) { + if request.age_gating.is_none() { + request.age_gating = Some(Default::default()); + } + } + + fn request_content_details_content_rating_init(request: &mut api::Video) { + request_content_details_init(request); + if request.content_details.as_mut().unwrap().content_rating.is_none() { + request.content_details.as_mut().unwrap().content_rating = Some(Default::default()); + } + } + + fn request_content_details_country_restriction_init(request: &mut api::Video) { + request_content_details_init(request); + if request.content_details.as_mut().unwrap().country_restriction.is_none() { + request.content_details.as_mut().unwrap().country_restriction = Some(Default::default()); + } + } + + fn request_content_details_init(request: &mut api::Video) { + if request.content_details.is_none() { + request.content_details = Some(Default::default()); + } + } + + fn request_content_details_region_restriction_init(request: &mut api::Video) { + request_content_details_init(request); + if request.content_details.as_mut().unwrap().region_restriction.is_none() { + request.content_details.as_mut().unwrap().region_restriction = Some(Default::default()); + } + } + + fn request_file_details_init(request: &mut api::Video) { + if request.file_details.is_none() { + request.file_details = Some(Default::default()); + } + } + + fn request_file_details_recording_location_init(request: &mut api::Video) { + request_file_details_init(request); + if request.file_details.as_mut().unwrap().recording_location.is_none() { + request.file_details.as_mut().unwrap().recording_location = Some(Default::default()); + } + } + + fn request_live_streaming_details_init(request: &mut api::Video) { + if request.live_streaming_details.is_none() { + request.live_streaming_details = Some(Default::default()); + } + } + + fn request_monetization_details_access_init(request: &mut api::Video) { + request_monetization_details_init(request); + if request.monetization_details.as_mut().unwrap().access.is_none() { + request.monetization_details.as_mut().unwrap().access = Some(Default::default()); + } + } + + fn request_monetization_details_init(request: &mut api::Video) { + if request.monetization_details.is_none() { + request.monetization_details = Some(Default::default()); + } + } + + fn request_player_init(request: &mut api::Video) { + if request.player.is_none() { + request.player = Some(Default::default()); + } + } + + fn request_processing_details_init(request: &mut api::Video) { + if request.processing_details.is_none() { + request.processing_details = Some(Default::default()); + } + } + + fn request_processing_details_processing_progress_init(request: &mut api::Video) { + request_processing_details_init(request); + if request.processing_details.as_mut().unwrap().processing_progress.is_none() { + request.processing_details.as_mut().unwrap().processing_progress = Some(Default::default()); + } + } + + fn request_project_details_init(request: &mut api::Video) { + if request.project_details.is_none() { + request.project_details = Some(Default::default()); + } + } + + fn request_recording_details_init(request: &mut api::Video) { + if request.recording_details.is_none() { + request.recording_details = Some(Default::default()); + } + } + + fn request_recording_details_location_init(request: &mut api::Video) { + request_recording_details_init(request); + if request.recording_details.as_mut().unwrap().location.is_none() { + request.recording_details.as_mut().unwrap().location = Some(Default::default()); + } + } + + fn request_snippet_init(request: &mut api::Video) { + if request.snippet.is_none() { + request.snippet = Some(Default::default()); + } + } + + fn request_snippet_localized_init(request: &mut api::Video) { + request_snippet_init(request); + if request.snippet.as_mut().unwrap().localized.is_none() { + request.snippet.as_mut().unwrap().localized = Some(Default::default()); + } + } + + fn request_snippet_thumbnails_default_init(request: &mut api::Video) { + request_snippet_thumbnails_init(request); + if request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().default.is_none() { + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().default = Some(Default::default()); + } + } + + fn request_snippet_thumbnails_high_init(request: &mut api::Video) { + request_snippet_thumbnails_init(request); + if request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().high.is_none() { + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().high = Some(Default::default()); + } + } + + fn request_snippet_thumbnails_init(request: &mut api::Video) { + request_snippet_init(request); + if request.snippet.as_mut().unwrap().thumbnails.is_none() { + request.snippet.as_mut().unwrap().thumbnails = Some(Default::default()); + } + } + + fn request_snippet_thumbnails_maxres_init(request: &mut api::Video) { + request_snippet_thumbnails_init(request); + if request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().maxres.is_none() { + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().maxres = Some(Default::default()); + } + } + + fn request_snippet_thumbnails_medium_init(request: &mut api::Video) { + request_snippet_thumbnails_init(request); + if request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().medium.is_none() { + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().medium = Some(Default::default()); + } + } + + fn request_snippet_thumbnails_standard_init(request: &mut api::Video) { + request_snippet_thumbnails_init(request); + if request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().standard.is_none() { + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().standard = Some(Default::default()); + } + } + + fn request_statistics_init(request: &mut api::Video) { + if request.statistics.is_none() { + request.statistics = Some(Default::default()); + } + } + + fn request_status_init(request: &mut api::Video) { + if request.status.is_none() { + request.status = Some(Default::default()); + } + } + + fn request_suggestions_init(request: &mut api::Video) { + if request.suggestions.is_none() { + request.suggestions = Some(Default::default()); + } + } + + fn request_topic_details_init(request: &mut api::Video) { + if request.topic_details.is_none() { + request.topic_details = Some(Default::default()); + } + } + + match &temp_cursor.to_string()[..] { + "status.license" => { + request_status_init(&mut request); + request.status.as_mut().unwrap().license = Some(value.unwrap_or("").to_string()); + }, + "status.embeddable" => { + request_status_init(&mut request); + request.status.as_mut().unwrap().embeddable = Some(arg_from_str(value.unwrap_or("false"), err, "status.embeddable", "boolean")); + }, + "status.privacy-status" => { + request_status_init(&mut request); + request.status.as_mut().unwrap().privacy_status = Some(value.unwrap_or("").to_string()); + }, + "status.publish-at" => { + request_status_init(&mut request); + request.status.as_mut().unwrap().publish_at = Some(value.unwrap_or("").to_string()); + }, + "status.public-stats-viewable" => { + request_status_init(&mut request); + request.status.as_mut().unwrap().public_stats_viewable = Some(arg_from_str(value.unwrap_or("false"), err, "status.public-stats-viewable", "boolean")); + }, + "status.upload-status" => { + request_status_init(&mut request); + request.status.as_mut().unwrap().upload_status = Some(value.unwrap_or("").to_string()); + }, + "status.rejection-reason" => { + request_status_init(&mut request); + request.status.as_mut().unwrap().rejection_reason = Some(value.unwrap_or("").to_string()); + }, + "status.failure-reason" => { + request_status_init(&mut request); + request.status.as_mut().unwrap().failure_reason = Some(value.unwrap_or("").to_string()); + }, + "topic-details.topic-ids" => { + request_topic_details_init(&mut request); + if request.topic_details.as_mut().unwrap().topic_ids.is_none() { + request.topic_details.as_mut().unwrap().topic_ids = Some(Default::default()); + } + request.topic_details.as_mut().unwrap().topic_ids.as_mut().unwrap().push(value.unwrap_or("").to_string()); + }, + "topic-details.relevant-topic-ids" => { + request_topic_details_init(&mut request); + if request.topic_details.as_mut().unwrap().relevant_topic_ids.is_none() { + request.topic_details.as_mut().unwrap().relevant_topic_ids = Some(Default::default()); + } + request.topic_details.as_mut().unwrap().relevant_topic_ids.as_mut().unwrap().push(value.unwrap_or("").to_string()); + }, + "kind" => { + request_topic_details_init(&mut request); + request.kind = Some(value.unwrap_or("").to_string()); + }, + "statistics.comment-count" => { + request_statistics_init(&mut request); + request.statistics.as_mut().unwrap().comment_count = Some(arg_from_str(value.unwrap_or("-0"), err, "statistics.comment-count", "int64")); + }, + "statistics.view-count" => { + request_statistics_init(&mut request); + request.statistics.as_mut().unwrap().view_count = Some(arg_from_str(value.unwrap_or("-0"), err, "statistics.view-count", "int64")); + }, + "statistics.favorite-count" => { + request_statistics_init(&mut request); + request.statistics.as_mut().unwrap().favorite_count = Some(arg_from_str(value.unwrap_or("-0"), err, "statistics.favorite-count", "int64")); + }, + "statistics.dislike-count" => { + request_statistics_init(&mut request); + request.statistics.as_mut().unwrap().dislike_count = Some(arg_from_str(value.unwrap_or("-0"), err, "statistics.dislike-count", "int64")); + }, + "statistics.like-count" => { + request_statistics_init(&mut request); + request.statistics.as_mut().unwrap().like_count = Some(arg_from_str(value.unwrap_or("-0"), err, "statistics.like-count", "int64")); + }, + "content-details.definition" => { + request_content_details_init(&mut request); + request.content_details.as_mut().unwrap().definition = Some(value.unwrap_or("").to_string()); + }, + "content-details.country-restriction.exception" => { + request_content_details_country_restriction_init(&mut request); + if request.content_details.as_mut().unwrap().country_restriction.as_mut().unwrap().exception.is_none() { + request.content_details.as_mut().unwrap().country_restriction.as_mut().unwrap().exception = Some(Default::default()); + } + request.content_details.as_mut().unwrap().country_restriction.as_mut().unwrap().exception.as_mut().unwrap().push(value.unwrap_or("").to_string()); + }, + "content-details.country-restriction.allowed" => { + request_content_details_country_restriction_init(&mut request); + request.content_details.as_mut().unwrap().country_restriction.as_mut().unwrap().allowed = Some(arg_from_str(value.unwrap_or("false"), err, "content-details.country-restriction.allowed", "boolean")); + }, + "content-details.content-rating.yt-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().yt_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.catvfr-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().catvfr_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.cbfc-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().cbfc_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.bfvc-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().bfvc_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.mda-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().mda_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.acb-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().acb_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.nfvcb-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().nfvcb_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.bmukk-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().bmukk_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.chfilm-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().chfilm_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.resorteviolencia-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().resorteviolencia_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.csa-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().csa_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.moctw-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().moctw_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.anatel-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().anatel_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.catv-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().catv_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.pefilm-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().pefilm_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.djctq-rating-reasons" => { + request_content_details_content_rating_init(&mut request); + if request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().djctq_rating_reasons.is_none() { + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().djctq_rating_reasons = Some(Default::default()); + } + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().djctq_rating_reasons.as_mut().unwrap().push(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.incaa-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().incaa_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.oflc-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().oflc_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.fpb-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().fpb_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.mccaa-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().mccaa_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.tvpg-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().tvpg_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.rtc-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().rtc_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.cscf-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().cscf_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.fsk-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().fsk_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.bbfc-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().bbfc_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.kmrb-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().kmrb_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.smsa-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().smsa_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.egfilm-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().egfilm_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.cicf-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().cicf_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.nbcpl-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().nbcpl_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.nbc-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().nbc_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.djctq-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().djctq_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.ifco-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().ifco_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.fco-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().fco_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.eefilm-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().eefilm_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.medietilsynet-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().medietilsynet_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.grfilm-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().grfilm_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.ccc-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().ccc_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.rte-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().rte_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.czfilm-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().czfilm_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.lsf-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().lsf_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.fmoc-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().fmoc_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.eirin-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().eirin_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.cce-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().cce_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.nkclv-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().nkclv_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.mtrcb-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().mtrcb_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.mibac-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().mibac_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.ilfilm-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().ilfilm_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.smais-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().smais_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.russia-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().russia_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.mpaa-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().mpaa_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.kfcb-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().kfcb_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.agcom-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().agcom_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.chvrs-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().chvrs_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.cna-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().cna_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.icaa-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().icaa_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.mccyp-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().mccyp_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.nfrc-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().nfrc_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.skfilm-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().skfilm_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.moc-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().moc_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.rcnof-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().rcnof_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.meku-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().meku_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.fcbm-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().fcbm_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.kijkwijzer-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().kijkwijzer_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.caption" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().caption = Some(value.unwrap_or("").to_string()); + }, + "content-details.region-restriction.blocked" => { + request_content_details_region_restriction_init(&mut request); + if request.content_details.as_mut().unwrap().region_restriction.as_mut().unwrap().blocked.is_none() { + request.content_details.as_mut().unwrap().region_restriction.as_mut().unwrap().blocked = Some(Default::default()); + } + request.content_details.as_mut().unwrap().region_restriction.as_mut().unwrap().blocked.as_mut().unwrap().push(value.unwrap_or("").to_string()); + }, + "content-details.region-restriction.allowed" => { + request_content_details_region_restriction_init(&mut request); + if request.content_details.as_mut().unwrap().region_restriction.as_mut().unwrap().allowed.is_none() { + request.content_details.as_mut().unwrap().region_restriction.as_mut().unwrap().allowed = Some(Default::default()); + } + request.content_details.as_mut().unwrap().region_restriction.as_mut().unwrap().allowed.as_mut().unwrap().push(value.unwrap_or("").to_string()); + }, + "content-details.duration" => { + request_content_details_region_restriction_init(&mut request); + request.content_details.as_mut().unwrap().duration = Some(value.unwrap_or("").to_string()); + }, + "content-details.licensed-content" => { + request_content_details_region_restriction_init(&mut request); + request.content_details.as_mut().unwrap().licensed_content = Some(arg_from_str(value.unwrap_or("false"), err, "content-details.licensed-content", "boolean")); + }, + "content-details.dimension" => { + request_content_details_region_restriction_init(&mut request); + request.content_details.as_mut().unwrap().dimension = Some(value.unwrap_or("").to_string()); + }, + "monetization-details.access.exception" => { + request_monetization_details_access_init(&mut request); + if request.monetization_details.as_mut().unwrap().access.as_mut().unwrap().exception.is_none() { + request.monetization_details.as_mut().unwrap().access.as_mut().unwrap().exception = Some(Default::default()); + } + request.monetization_details.as_mut().unwrap().access.as_mut().unwrap().exception.as_mut().unwrap().push(value.unwrap_or("").to_string()); + }, + "monetization-details.access.allowed" => { + request_monetization_details_access_init(&mut request); + request.monetization_details.as_mut().unwrap().access.as_mut().unwrap().allowed = Some(arg_from_str(value.unwrap_or("false"), err, "monetization-details.access.allowed", "boolean")); + }, + "age-gating.restricted" => { + request_age_gating_init(&mut request); + request.age_gating.as_mut().unwrap().restricted = Some(arg_from_str(value.unwrap_or("false"), err, "age-gating.restricted", "boolean")); + }, + "age-gating.alcohol-content" => { + request_age_gating_init(&mut request); + request.age_gating.as_mut().unwrap().alcohol_content = Some(arg_from_str(value.unwrap_or("false"), err, "age-gating.alcohol-content", "boolean")); + }, + "age-gating.video-game-rating" => { + request_age_gating_init(&mut request); + request.age_gating.as_mut().unwrap().video_game_rating = Some(value.unwrap_or("").to_string()); + }, + "suggestions.processing-errors" => { + request_suggestions_init(&mut request); + if request.suggestions.as_mut().unwrap().processing_errors.is_none() { + request.suggestions.as_mut().unwrap().processing_errors = Some(Default::default()); + } + request.suggestions.as_mut().unwrap().processing_errors.as_mut().unwrap().push(value.unwrap_or("").to_string()); + }, + "suggestions.editor-suggestions" => { + request_suggestions_init(&mut request); + if request.suggestions.as_mut().unwrap().editor_suggestions.is_none() { + request.suggestions.as_mut().unwrap().editor_suggestions = Some(Default::default()); + } + request.suggestions.as_mut().unwrap().editor_suggestions.as_mut().unwrap().push(value.unwrap_or("").to_string()); + }, + "suggestions.processing-warnings" => { + request_suggestions_init(&mut request); + if request.suggestions.as_mut().unwrap().processing_warnings.is_none() { + request.suggestions.as_mut().unwrap().processing_warnings = Some(Default::default()); + } + request.suggestions.as_mut().unwrap().processing_warnings.as_mut().unwrap().push(value.unwrap_or("").to_string()); + }, + "suggestions.processing-hints" => { + request_suggestions_init(&mut request); + if request.suggestions.as_mut().unwrap().processing_hints.is_none() { + request.suggestions.as_mut().unwrap().processing_hints = Some(Default::default()); + } + request.suggestions.as_mut().unwrap().processing_hints.as_mut().unwrap().push(value.unwrap_or("").to_string()); + }, + "live-streaming-details.concurrent-viewers" => { + request_live_streaming_details_init(&mut request); + request.live_streaming_details.as_mut().unwrap().concurrent_viewers = Some(value.unwrap_or("").to_string()); + }, + "live-streaming-details.scheduled-start-time" => { + request_live_streaming_details_init(&mut request); + request.live_streaming_details.as_mut().unwrap().scheduled_start_time = Some(value.unwrap_or("").to_string()); + }, + "live-streaming-details.scheduled-end-time" => { + request_live_streaming_details_init(&mut request); + request.live_streaming_details.as_mut().unwrap().scheduled_end_time = Some(value.unwrap_or("").to_string()); + }, + "live-streaming-details.actual-start-time" => { + request_live_streaming_details_init(&mut request); + request.live_streaming_details.as_mut().unwrap().actual_start_time = Some(value.unwrap_or("").to_string()); + }, + "live-streaming-details.actual-end-time" => { + request_live_streaming_details_init(&mut request); + request.live_streaming_details.as_mut().unwrap().actual_end_time = Some(value.unwrap_or("").to_string()); + }, + "file-details.bitrate-bps" => { + request_file_details_init(&mut request); + request.file_details.as_mut().unwrap().bitrate_bps = Some(value.unwrap_or("").to_string()); + }, + "file-details.container" => { + request_file_details_init(&mut request); + request.file_details.as_mut().unwrap().container = Some(value.unwrap_or("").to_string()); + }, + "file-details.recording-location.latitude" => { + request_file_details_recording_location_init(&mut request); + request.file_details.as_mut().unwrap().recording_location.as_mut().unwrap().latitude = Some(arg_from_str(value.unwrap_or("0.0"), err, "file-details.recording-location.latitude", "number")); + }, + "file-details.recording-location.altitude" => { + request_file_details_recording_location_init(&mut request); + request.file_details.as_mut().unwrap().recording_location.as_mut().unwrap().altitude = Some(arg_from_str(value.unwrap_or("0.0"), err, "file-details.recording-location.altitude", "number")); + }, + "file-details.recording-location.longitude" => { + request_file_details_recording_location_init(&mut request); + request.file_details.as_mut().unwrap().recording_location.as_mut().unwrap().longitude = Some(arg_from_str(value.unwrap_or("0.0"), err, "file-details.recording-location.longitude", "number")); + }, + "file-details.file-type" => { + request_file_details_recording_location_init(&mut request); + request.file_details.as_mut().unwrap().file_type = Some(value.unwrap_or("").to_string()); + }, + "file-details.creation-time" => { + request_file_details_recording_location_init(&mut request); + request.file_details.as_mut().unwrap().creation_time = Some(value.unwrap_or("").to_string()); + }, + "file-details.duration-ms" => { + request_file_details_recording_location_init(&mut request); + request.file_details.as_mut().unwrap().duration_ms = Some(value.unwrap_or("").to_string()); + }, + "file-details.file-name" => { + request_file_details_recording_location_init(&mut request); + request.file_details.as_mut().unwrap().file_name = Some(value.unwrap_or("").to_string()); + }, + "file-details.file-size" => { + request_file_details_recording_location_init(&mut request); + request.file_details.as_mut().unwrap().file_size = Some(value.unwrap_or("").to_string()); + }, + "snippet.description" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().description = Some(value.unwrap_or("").to_string()); + }, + "snippet.tags" => { + request_snippet_init(&mut request); + if request.snippet.as_mut().unwrap().tags.is_none() { + request.snippet.as_mut().unwrap().tags = Some(Default::default()); + } + request.snippet.as_mut().unwrap().tags.as_mut().unwrap().push(value.unwrap_or("").to_string()); + }, + "snippet.channel-id" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().channel_id = Some(value.unwrap_or("").to_string()); + }, + "snippet.published-at" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().published_at = Some(value.unwrap_or("").to_string()); + }, + "snippet.live-broadcast-content" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().live_broadcast_content = Some(value.unwrap_or("").to_string()); + }, + "snippet.default-language" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().default_language = Some(value.unwrap_or("").to_string()); + }, + "snippet.channel-title" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().channel_title = Some(value.unwrap_or("").to_string()); + }, + "snippet.title" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().title = Some(value.unwrap_or("").to_string()); + }, + "snippet.category-id" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().category_id = Some(value.unwrap_or("").to_string()); + }, + "snippet.localized.description" => { + request_snippet_localized_init(&mut request); + request.snippet.as_mut().unwrap().localized.as_mut().unwrap().description = Some(value.unwrap_or("").to_string()); + }, + "snippet.localized.title" => { + request_snippet_localized_init(&mut request); + request.snippet.as_mut().unwrap().localized.as_mut().unwrap().title = Some(value.unwrap_or("").to_string()); + }, + "snippet.thumbnails.default.url" => { + request_snippet_thumbnails_default_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().default.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); + }, + "snippet.thumbnails.default.width" => { + request_snippet_thumbnails_default_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().default.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.default.width", "integer")); + }, + "snippet.thumbnails.default.height" => { + request_snippet_thumbnails_default_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().default.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.default.height", "integer")); + }, + "snippet.thumbnails.high.url" => { + request_snippet_thumbnails_high_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().high.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); + }, + "snippet.thumbnails.high.width" => { + request_snippet_thumbnails_high_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().high.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.high.width", "integer")); + }, + "snippet.thumbnails.high.height" => { + request_snippet_thumbnails_high_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().high.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.high.height", "integer")); + }, + "snippet.thumbnails.medium.url" => { + request_snippet_thumbnails_medium_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().medium.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); + }, + "snippet.thumbnails.medium.width" => { + request_snippet_thumbnails_medium_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().medium.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.medium.width", "integer")); + }, + "snippet.thumbnails.medium.height" => { + request_snippet_thumbnails_medium_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().medium.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.medium.height", "integer")); + }, + "snippet.thumbnails.maxres.url" => { + request_snippet_thumbnails_maxres_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().maxres.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); + }, + "snippet.thumbnails.maxres.width" => { + request_snippet_thumbnails_maxres_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().maxres.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.maxres.width", "integer")); + }, + "snippet.thumbnails.maxres.height" => { + request_snippet_thumbnails_maxres_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().maxres.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.maxres.height", "integer")); + }, + "snippet.thumbnails.standard.url" => { + request_snippet_thumbnails_standard_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().standard.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); + }, + "snippet.thumbnails.standard.width" => { + request_snippet_thumbnails_standard_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().standard.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.standard.width", "integer")); + }, + "snippet.thumbnails.standard.height" => { + request_snippet_thumbnails_standard_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().standard.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.standard.height", "integer")); + }, + "player.embed-html" => { + request_player_init(&mut request); + request.player.as_mut().unwrap().embed_html = Some(value.unwrap_or("").to_string()); + }, + "processing-details.file-details-availability" => { + request_processing_details_init(&mut request); + request.processing_details.as_mut().unwrap().file_details_availability = Some(value.unwrap_or("").to_string()); + }, + "processing-details.editor-suggestions-availability" => { + request_processing_details_init(&mut request); + request.processing_details.as_mut().unwrap().editor_suggestions_availability = Some(value.unwrap_or("").to_string()); + }, + "processing-details.processing-status" => { + request_processing_details_init(&mut request); + request.processing_details.as_mut().unwrap().processing_status = Some(value.unwrap_or("").to_string()); + }, + "processing-details.processing-issues-availability" => { + request_processing_details_init(&mut request); + request.processing_details.as_mut().unwrap().processing_issues_availability = Some(value.unwrap_or("").to_string()); + }, + "processing-details.processing-failure-reason" => { + request_processing_details_init(&mut request); + request.processing_details.as_mut().unwrap().processing_failure_reason = Some(value.unwrap_or("").to_string()); + }, + "processing-details.thumbnails-availability" => { + request_processing_details_init(&mut request); + request.processing_details.as_mut().unwrap().thumbnails_availability = Some(value.unwrap_or("").to_string()); + }, + "processing-details.processing-progress.time-left-ms" => { + request_processing_details_processing_progress_init(&mut request); + request.processing_details.as_mut().unwrap().processing_progress.as_mut().unwrap().time_left_ms = Some(value.unwrap_or("").to_string()); + }, + "processing-details.processing-progress.parts-processed" => { + request_processing_details_processing_progress_init(&mut request); + request.processing_details.as_mut().unwrap().processing_progress.as_mut().unwrap().parts_processed = Some(value.unwrap_or("").to_string()); + }, + "processing-details.processing-progress.parts-total" => { + request_processing_details_processing_progress_init(&mut request); + request.processing_details.as_mut().unwrap().processing_progress.as_mut().unwrap().parts_total = Some(value.unwrap_or("").to_string()); + }, + "processing-details.tag-suggestions-availability" => { + request_processing_details_processing_progress_init(&mut request); + request.processing_details.as_mut().unwrap().tag_suggestions_availability = Some(value.unwrap_or("").to_string()); + }, + "etag" => { + request_processing_details_init(&mut request); + request.etag = Some(value.unwrap_or("").to_string()); + }, + "project-details.tags" => { + request_project_details_init(&mut request); + if request.project_details.as_mut().unwrap().tags.is_none() { + request.project_details.as_mut().unwrap().tags = Some(Default::default()); + } + request.project_details.as_mut().unwrap().tags.as_mut().unwrap().push(value.unwrap_or("").to_string()); + }, + "recording-details.recording-date" => { + request_recording_details_init(&mut request); + request.recording_details.as_mut().unwrap().recording_date = Some(value.unwrap_or("").to_string()); + }, + "recording-details.location-description" => { + request_recording_details_init(&mut request); + request.recording_details.as_mut().unwrap().location_description = Some(value.unwrap_or("").to_string()); + }, + "recording-details.location.latitude" => { + request_recording_details_location_init(&mut request); + request.recording_details.as_mut().unwrap().location.as_mut().unwrap().latitude = Some(arg_from_str(value.unwrap_or("0.0"), err, "recording-details.location.latitude", "number")); + }, + "recording-details.location.altitude" => { + request_recording_details_location_init(&mut request); + request.recording_details.as_mut().unwrap().location.as_mut().unwrap().altitude = Some(arg_from_str(value.unwrap_or("0.0"), err, "recording-details.location.altitude", "number")); + }, + "recording-details.location.longitude" => { + request_recording_details_location_init(&mut request); + request.recording_details.as_mut().unwrap().location.as_mut().unwrap().longitude = Some(arg_from_str(value.unwrap_or("0.0"), err, "recording-details.location.longitude", "number")); + }, + "id" => { + request_recording_details_init(&mut request); + request.id = Some(value.unwrap_or("").to_string()); + }, + _ => { + err.issues.push(CLIError::Field(FieldError::Unknown(temp_cursor.to_string()))); + } + } + } + let mut call = self.hub.videos().insert(request); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { + let (key, value) = parse_kv_arg(&*parg, err, false); + match key { + "stabilize" => { + call = call.stabilize(arg_from_str(value.unwrap_or("false"), err, "stabilize", "boolean")); + }, + "on-behalf-of-content-owner-channel" => { + call = call.on_behalf_of_content_owner_channel(value.unwrap_or("")); + }, + "on-behalf-of-content-owner" => { + call = call.on_behalf_of_content_owner(value.unwrap_or("")); + }, + "notify-subscribers" => { + call = call.notify_subscribers(arg_from_str(value.unwrap_or("false"), err, "notify-subscribers", "boolean")); + }, + "auto-levels" => { + call = call.auto_levels(arg_from_str(value.unwrap_or("false"), err, "auto-levels", "boolean")); + }, + "alt" + |"fields" + |"key" + |"oauth-token" + |"pretty-print" + |"quota-user" + |"user-ip" => { + let map = [ + ("oauth-token", "oauth_token"), + ("pretty-print", "prettyPrint"), + ("quota-user", "quotaUser"), + ("user-ip", "userIp"), + ]; + call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) + }, + _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), + } + } + let vals = opt.values_of("mode").unwrap(); + let protocol = protocol_from_str(vals[0], ["simple", "resumable"].iter().map(|&v| v.to_string()).collect(), err); + let mut input_file = input_file_from_opts(vals[1], err); + let mime_type = input_mime_from_opts(opt.value_of("mime").unwrap_or("application/octet-stream"), err); + if dry_run { + Ok(()) + } else { + assert!(err.issues.len() == 0); + for scope in self.opt.values_of("url").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::Upload(UploadProtocol::Simple) => call.upload(input_file.unwrap(), mime_type.unwrap()), + CallType::Upload(UploadProtocol::Resumable) => call.upload_resumable(input_file.unwrap(), mime_type.unwrap()), + CallType::Standard => unreachable!() + } { + Err(api_err) => Err(DoitError::ApiError(api_err)), + Ok((mut response, output_schema)) => { + serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); + Ok(()) + } + } + } + } + + fn _videos_list(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + let mut call = self.hub.videos().list(opt.value_of("part").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { + let (key, value) = parse_kv_arg(&*parg, err, false); + match key { + "video-category-id" => { + call = call.video_category_id(value.unwrap_or("")); + }, + "region-code" => { + call = call.region_code(value.unwrap_or("")); + }, + "page-token" => { + call = call.page_token(value.unwrap_or("")); + }, + "on-behalf-of-content-owner" => { + call = call.on_behalf_of_content_owner(value.unwrap_or("")); + }, + "my-rating" => { + call = call.my_rating(value.unwrap_or("")); + }, + "max-results" => { + call = call.max_results(arg_from_str(value.unwrap_or("-0"), err, "max-results", "integer")); + }, + "locale" => { + call = call.locale(value.unwrap_or("")); + }, + "id" => { + call = call.id(value.unwrap_or("")); + }, + "hl" => { + call = call.hl(value.unwrap_or("")); + }, + "chart" => { + call = call.chart(value.unwrap_or("")); + }, + "alt" + |"fields" + |"key" + |"oauth-token" + |"pretty-print" + |"quota-user" + |"user-ip" => { + let map = [ + ("oauth-token", "oauth_token"), + ("pretty-print", "prettyPrint"), + ("quota-user", "quotaUser"), + ("user-ip", "userIp"), + ]; + call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) + }, + _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), + } + } + let protocol = CallType::Standard; + if dry_run { + Ok(()) + } else { + assert!(err.issues.len() == 0); + for scope in self.opt.values_of("url").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(), + _ => unreachable!() + } { + Err(api_err) => Err(DoitError::ApiError(api_err)), + Ok((mut response, output_schema)) => { + serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); + Ok(()) + } + } + } + } + + fn _videos_rate(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + let mut call = self.hub.videos().rate(opt.value_of("id").unwrap_or(""), opt.value_of("rating").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { + let (key, value) = parse_kv_arg(&*parg, err, false); + match key { + "on-behalf-of-content-owner" => { + call = call.on_behalf_of_content_owner(value.unwrap_or("")); + }, + "alt" + |"fields" + |"key" + |"oauth-token" + |"pretty-print" + |"quota-user" + |"user-ip" => { + let map = [ + ("oauth-token", "oauth_token"), + ("pretty-print", "prettyPrint"), + ("quota-user", "quotaUser"), + ("user-ip", "userIp"), + ]; + call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) + }, + _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), + } + } + let protocol = CallType::Standard; + if dry_run { + Ok(()) + } else { + assert!(err.issues.len() == 0); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); + } + match match protocol { + CallType::Standard => call.doit(), + _ => unreachable!() + } { + Err(api_err) => Err(DoitError::ApiError(api_err)), + Ok(mut response) => { + Ok(()) + } + } + } + } + + fn _videos_report_abuse(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + + let mut request = api::VideoAbuseReport::default(); + let mut field_cursor = FieldCursor::default(); + for kvarg in opt.values_of("kv").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; + } + match &temp_cursor.to_string()[..] { + "secondary-reason-id" => { + request.secondary_reason_id = Some(value.unwrap_or("").to_string()); + }, + "reason-id" => { + request.reason_id = Some(value.unwrap_or("").to_string()); + }, + "language" => { + request.language = Some(value.unwrap_or("").to_string()); + }, + "comments" => { + request.comments = Some(value.unwrap_or("").to_string()); + }, + "video-id" => { + request.video_id = Some(value.unwrap_or("").to_string()); + }, + _ => { + err.issues.push(CLIError::Field(FieldError::Unknown(temp_cursor.to_string()))); + } + } + } + let mut call = self.hub.videos().report_abuse(request); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { + let (key, value) = parse_kv_arg(&*parg, err, false); + match key { + "on-behalf-of-content-owner" => { + call = call.on_behalf_of_content_owner(value.unwrap_or("")); + }, + "alt" + |"fields" + |"key" + |"oauth-token" + |"pretty-print" + |"quota-user" + |"user-ip" => { + let map = [ + ("oauth-token", "oauth_token"), + ("pretty-print", "prettyPrint"), + ("quota-user", "quotaUser"), + ("user-ip", "userIp"), + ]; + call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) + }, + _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), + } + } + let protocol = CallType::Standard; + if dry_run { + Ok(()) + } else { + assert!(err.issues.len() == 0); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); + } + match match protocol { + CallType::Standard => call.doit(), + _ => unreachable!() + } { + Err(api_err) => Err(DoitError::ApiError(api_err)), + Ok(mut response) => { + Ok(()) + } + } + } + } + + fn _videos_update(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + + let mut request = api::Video::default(); + let mut field_cursor = FieldCursor::default(); + for kvarg in opt.values_of("kv").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; + } + fn request_age_gating_init(request: &mut api::Video) { + if request.age_gating.is_none() { + request.age_gating = Some(Default::default()); + } + } + + fn request_content_details_content_rating_init(request: &mut api::Video) { + request_content_details_init(request); + if request.content_details.as_mut().unwrap().content_rating.is_none() { + request.content_details.as_mut().unwrap().content_rating = Some(Default::default()); + } + } + + fn request_content_details_country_restriction_init(request: &mut api::Video) { + request_content_details_init(request); + if request.content_details.as_mut().unwrap().country_restriction.is_none() { + request.content_details.as_mut().unwrap().country_restriction = Some(Default::default()); + } + } + + fn request_content_details_init(request: &mut api::Video) { + if request.content_details.is_none() { + request.content_details = Some(Default::default()); + } + } + + fn request_content_details_region_restriction_init(request: &mut api::Video) { + request_content_details_init(request); + if request.content_details.as_mut().unwrap().region_restriction.is_none() { + request.content_details.as_mut().unwrap().region_restriction = Some(Default::default()); + } + } + + fn request_file_details_init(request: &mut api::Video) { + if request.file_details.is_none() { + request.file_details = Some(Default::default()); + } + } + + fn request_file_details_recording_location_init(request: &mut api::Video) { + request_file_details_init(request); + if request.file_details.as_mut().unwrap().recording_location.is_none() { + request.file_details.as_mut().unwrap().recording_location = Some(Default::default()); + } + } + + fn request_live_streaming_details_init(request: &mut api::Video) { + if request.live_streaming_details.is_none() { + request.live_streaming_details = Some(Default::default()); + } + } + + fn request_monetization_details_access_init(request: &mut api::Video) { + request_monetization_details_init(request); + if request.monetization_details.as_mut().unwrap().access.is_none() { + request.monetization_details.as_mut().unwrap().access = Some(Default::default()); + } + } + + fn request_monetization_details_init(request: &mut api::Video) { + if request.monetization_details.is_none() { + request.monetization_details = Some(Default::default()); + } + } + + fn request_player_init(request: &mut api::Video) { + if request.player.is_none() { + request.player = Some(Default::default()); + } + } + + fn request_processing_details_init(request: &mut api::Video) { + if request.processing_details.is_none() { + request.processing_details = Some(Default::default()); + } + } + + fn request_processing_details_processing_progress_init(request: &mut api::Video) { + request_processing_details_init(request); + if request.processing_details.as_mut().unwrap().processing_progress.is_none() { + request.processing_details.as_mut().unwrap().processing_progress = Some(Default::default()); + } + } + + fn request_project_details_init(request: &mut api::Video) { + if request.project_details.is_none() { + request.project_details = Some(Default::default()); + } + } + + fn request_recording_details_init(request: &mut api::Video) { + if request.recording_details.is_none() { + request.recording_details = Some(Default::default()); + } + } + + fn request_recording_details_location_init(request: &mut api::Video) { + request_recording_details_init(request); + if request.recording_details.as_mut().unwrap().location.is_none() { + request.recording_details.as_mut().unwrap().location = Some(Default::default()); + } + } + + fn request_snippet_init(request: &mut api::Video) { + if request.snippet.is_none() { + request.snippet = Some(Default::default()); + } + } + + fn request_snippet_localized_init(request: &mut api::Video) { + request_snippet_init(request); + if request.snippet.as_mut().unwrap().localized.is_none() { + request.snippet.as_mut().unwrap().localized = Some(Default::default()); + } + } + + fn request_snippet_thumbnails_default_init(request: &mut api::Video) { + request_snippet_thumbnails_init(request); + if request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().default.is_none() { + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().default = Some(Default::default()); + } + } + + fn request_snippet_thumbnails_high_init(request: &mut api::Video) { + request_snippet_thumbnails_init(request); + if request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().high.is_none() { + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().high = Some(Default::default()); + } + } + + fn request_snippet_thumbnails_init(request: &mut api::Video) { + request_snippet_init(request); + if request.snippet.as_mut().unwrap().thumbnails.is_none() { + request.snippet.as_mut().unwrap().thumbnails = Some(Default::default()); + } + } + + fn request_snippet_thumbnails_maxres_init(request: &mut api::Video) { + request_snippet_thumbnails_init(request); + if request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().maxres.is_none() { + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().maxres = Some(Default::default()); + } + } + + fn request_snippet_thumbnails_medium_init(request: &mut api::Video) { + request_snippet_thumbnails_init(request); + if request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().medium.is_none() { + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().medium = Some(Default::default()); + } + } + + fn request_snippet_thumbnails_standard_init(request: &mut api::Video) { + request_snippet_thumbnails_init(request); + if request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().standard.is_none() { + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().standard = Some(Default::default()); + } + } + + fn request_statistics_init(request: &mut api::Video) { + if request.statistics.is_none() { + request.statistics = Some(Default::default()); + } + } + + fn request_status_init(request: &mut api::Video) { + if request.status.is_none() { + request.status = Some(Default::default()); + } + } + + fn request_suggestions_init(request: &mut api::Video) { + if request.suggestions.is_none() { + request.suggestions = Some(Default::default()); + } + } + + fn request_topic_details_init(request: &mut api::Video) { + if request.topic_details.is_none() { + request.topic_details = Some(Default::default()); + } + } + + match &temp_cursor.to_string()[..] { + "status.license" => { + request_status_init(&mut request); + request.status.as_mut().unwrap().license = Some(value.unwrap_or("").to_string()); + }, + "status.embeddable" => { + request_status_init(&mut request); + request.status.as_mut().unwrap().embeddable = Some(arg_from_str(value.unwrap_or("false"), err, "status.embeddable", "boolean")); + }, + "status.privacy-status" => { + request_status_init(&mut request); + request.status.as_mut().unwrap().privacy_status = Some(value.unwrap_or("").to_string()); + }, + "status.publish-at" => { + request_status_init(&mut request); + request.status.as_mut().unwrap().publish_at = Some(value.unwrap_or("").to_string()); + }, + "status.public-stats-viewable" => { + request_status_init(&mut request); + request.status.as_mut().unwrap().public_stats_viewable = Some(arg_from_str(value.unwrap_or("false"), err, "status.public-stats-viewable", "boolean")); + }, + "status.upload-status" => { + request_status_init(&mut request); + request.status.as_mut().unwrap().upload_status = Some(value.unwrap_or("").to_string()); + }, + "status.rejection-reason" => { + request_status_init(&mut request); + request.status.as_mut().unwrap().rejection_reason = Some(value.unwrap_or("").to_string()); + }, + "status.failure-reason" => { + request_status_init(&mut request); + request.status.as_mut().unwrap().failure_reason = Some(value.unwrap_or("").to_string()); + }, + "topic-details.topic-ids" => { + request_topic_details_init(&mut request); + if request.topic_details.as_mut().unwrap().topic_ids.is_none() { + request.topic_details.as_mut().unwrap().topic_ids = Some(Default::default()); + } + request.topic_details.as_mut().unwrap().topic_ids.as_mut().unwrap().push(value.unwrap_or("").to_string()); + }, + "topic-details.relevant-topic-ids" => { + request_topic_details_init(&mut request); + if request.topic_details.as_mut().unwrap().relevant_topic_ids.is_none() { + request.topic_details.as_mut().unwrap().relevant_topic_ids = Some(Default::default()); + } + request.topic_details.as_mut().unwrap().relevant_topic_ids.as_mut().unwrap().push(value.unwrap_or("").to_string()); + }, + "kind" => { + request_topic_details_init(&mut request); + request.kind = Some(value.unwrap_or("").to_string()); + }, + "statistics.comment-count" => { + request_statistics_init(&mut request); + request.statistics.as_mut().unwrap().comment_count = Some(arg_from_str(value.unwrap_or("-0"), err, "statistics.comment-count", "int64")); + }, + "statistics.view-count" => { + request_statistics_init(&mut request); + request.statistics.as_mut().unwrap().view_count = Some(arg_from_str(value.unwrap_or("-0"), err, "statistics.view-count", "int64")); + }, + "statistics.favorite-count" => { + request_statistics_init(&mut request); + request.statistics.as_mut().unwrap().favorite_count = Some(arg_from_str(value.unwrap_or("-0"), err, "statistics.favorite-count", "int64")); + }, + "statistics.dislike-count" => { + request_statistics_init(&mut request); + request.statistics.as_mut().unwrap().dislike_count = Some(arg_from_str(value.unwrap_or("-0"), err, "statistics.dislike-count", "int64")); + }, + "statistics.like-count" => { + request_statistics_init(&mut request); + request.statistics.as_mut().unwrap().like_count = Some(arg_from_str(value.unwrap_or("-0"), err, "statistics.like-count", "int64")); + }, + "content-details.definition" => { + request_content_details_init(&mut request); + request.content_details.as_mut().unwrap().definition = Some(value.unwrap_or("").to_string()); + }, + "content-details.country-restriction.exception" => { + request_content_details_country_restriction_init(&mut request); + if request.content_details.as_mut().unwrap().country_restriction.as_mut().unwrap().exception.is_none() { + request.content_details.as_mut().unwrap().country_restriction.as_mut().unwrap().exception = Some(Default::default()); + } + request.content_details.as_mut().unwrap().country_restriction.as_mut().unwrap().exception.as_mut().unwrap().push(value.unwrap_or("").to_string()); + }, + "content-details.country-restriction.allowed" => { + request_content_details_country_restriction_init(&mut request); + request.content_details.as_mut().unwrap().country_restriction.as_mut().unwrap().allowed = Some(arg_from_str(value.unwrap_or("false"), err, "content-details.country-restriction.allowed", "boolean")); + }, + "content-details.content-rating.yt-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().yt_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.catvfr-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().catvfr_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.cbfc-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().cbfc_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.bfvc-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().bfvc_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.mda-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().mda_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.acb-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().acb_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.nfvcb-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().nfvcb_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.bmukk-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().bmukk_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.chfilm-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().chfilm_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.resorteviolencia-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().resorteviolencia_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.csa-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().csa_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.moctw-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().moctw_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.anatel-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().anatel_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.catv-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().catv_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.pefilm-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().pefilm_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.djctq-rating-reasons" => { + request_content_details_content_rating_init(&mut request); + if request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().djctq_rating_reasons.is_none() { + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().djctq_rating_reasons = Some(Default::default()); + } + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().djctq_rating_reasons.as_mut().unwrap().push(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.incaa-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().incaa_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.oflc-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().oflc_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.fpb-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().fpb_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.mccaa-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().mccaa_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.tvpg-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().tvpg_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.rtc-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().rtc_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.cscf-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().cscf_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.fsk-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().fsk_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.bbfc-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().bbfc_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.kmrb-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().kmrb_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.smsa-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().smsa_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.egfilm-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().egfilm_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.cicf-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().cicf_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.nbcpl-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().nbcpl_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.nbc-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().nbc_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.djctq-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().djctq_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.ifco-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().ifco_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.fco-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().fco_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.eefilm-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().eefilm_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.medietilsynet-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().medietilsynet_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.grfilm-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().grfilm_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.ccc-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().ccc_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.rte-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().rte_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.czfilm-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().czfilm_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.lsf-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().lsf_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.fmoc-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().fmoc_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.eirin-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().eirin_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.cce-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().cce_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.nkclv-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().nkclv_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.mtrcb-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().mtrcb_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.mibac-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().mibac_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.ilfilm-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().ilfilm_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.smais-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().smais_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.russia-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().russia_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.mpaa-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().mpaa_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.kfcb-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().kfcb_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.agcom-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().agcom_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.chvrs-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().chvrs_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.cna-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().cna_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.icaa-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().icaa_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.mccyp-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().mccyp_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.nfrc-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().nfrc_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.skfilm-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().skfilm_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.moc-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().moc_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.rcnof-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().rcnof_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.meku-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().meku_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.fcbm-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().fcbm_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.content-rating.kijkwijzer-rating" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().content_rating.as_mut().unwrap().kijkwijzer_rating = Some(value.unwrap_or("").to_string()); + }, + "content-details.caption" => { + request_content_details_content_rating_init(&mut request); + request.content_details.as_mut().unwrap().caption = Some(value.unwrap_or("").to_string()); + }, + "content-details.region-restriction.blocked" => { + request_content_details_region_restriction_init(&mut request); + if request.content_details.as_mut().unwrap().region_restriction.as_mut().unwrap().blocked.is_none() { + request.content_details.as_mut().unwrap().region_restriction.as_mut().unwrap().blocked = Some(Default::default()); + } + request.content_details.as_mut().unwrap().region_restriction.as_mut().unwrap().blocked.as_mut().unwrap().push(value.unwrap_or("").to_string()); + }, + "content-details.region-restriction.allowed" => { + request_content_details_region_restriction_init(&mut request); + if request.content_details.as_mut().unwrap().region_restriction.as_mut().unwrap().allowed.is_none() { + request.content_details.as_mut().unwrap().region_restriction.as_mut().unwrap().allowed = Some(Default::default()); + } + request.content_details.as_mut().unwrap().region_restriction.as_mut().unwrap().allowed.as_mut().unwrap().push(value.unwrap_or("").to_string()); + }, + "content-details.duration" => { + request_content_details_region_restriction_init(&mut request); + request.content_details.as_mut().unwrap().duration = Some(value.unwrap_or("").to_string()); + }, + "content-details.licensed-content" => { + request_content_details_region_restriction_init(&mut request); + request.content_details.as_mut().unwrap().licensed_content = Some(arg_from_str(value.unwrap_or("false"), err, "content-details.licensed-content", "boolean")); + }, + "content-details.dimension" => { + request_content_details_region_restriction_init(&mut request); + request.content_details.as_mut().unwrap().dimension = Some(value.unwrap_or("").to_string()); + }, + "monetization-details.access.exception" => { + request_monetization_details_access_init(&mut request); + if request.monetization_details.as_mut().unwrap().access.as_mut().unwrap().exception.is_none() { + request.monetization_details.as_mut().unwrap().access.as_mut().unwrap().exception = Some(Default::default()); + } + request.monetization_details.as_mut().unwrap().access.as_mut().unwrap().exception.as_mut().unwrap().push(value.unwrap_or("").to_string()); + }, + "monetization-details.access.allowed" => { + request_monetization_details_access_init(&mut request); + request.monetization_details.as_mut().unwrap().access.as_mut().unwrap().allowed = Some(arg_from_str(value.unwrap_or("false"), err, "monetization-details.access.allowed", "boolean")); + }, + "age-gating.restricted" => { + request_age_gating_init(&mut request); + request.age_gating.as_mut().unwrap().restricted = Some(arg_from_str(value.unwrap_or("false"), err, "age-gating.restricted", "boolean")); + }, + "age-gating.alcohol-content" => { + request_age_gating_init(&mut request); + request.age_gating.as_mut().unwrap().alcohol_content = Some(arg_from_str(value.unwrap_or("false"), err, "age-gating.alcohol-content", "boolean")); + }, + "age-gating.video-game-rating" => { + request_age_gating_init(&mut request); + request.age_gating.as_mut().unwrap().video_game_rating = Some(value.unwrap_or("").to_string()); + }, + "suggestions.processing-errors" => { + request_suggestions_init(&mut request); + if request.suggestions.as_mut().unwrap().processing_errors.is_none() { + request.suggestions.as_mut().unwrap().processing_errors = Some(Default::default()); + } + request.suggestions.as_mut().unwrap().processing_errors.as_mut().unwrap().push(value.unwrap_or("").to_string()); + }, + "suggestions.editor-suggestions" => { + request_suggestions_init(&mut request); + if request.suggestions.as_mut().unwrap().editor_suggestions.is_none() { + request.suggestions.as_mut().unwrap().editor_suggestions = Some(Default::default()); + } + request.suggestions.as_mut().unwrap().editor_suggestions.as_mut().unwrap().push(value.unwrap_or("").to_string()); + }, + "suggestions.processing-warnings" => { + request_suggestions_init(&mut request); + if request.suggestions.as_mut().unwrap().processing_warnings.is_none() { + request.suggestions.as_mut().unwrap().processing_warnings = Some(Default::default()); + } + request.suggestions.as_mut().unwrap().processing_warnings.as_mut().unwrap().push(value.unwrap_or("").to_string()); + }, + "suggestions.processing-hints" => { + request_suggestions_init(&mut request); + if request.suggestions.as_mut().unwrap().processing_hints.is_none() { + request.suggestions.as_mut().unwrap().processing_hints = Some(Default::default()); + } + request.suggestions.as_mut().unwrap().processing_hints.as_mut().unwrap().push(value.unwrap_or("").to_string()); + }, + "live-streaming-details.concurrent-viewers" => { + request_live_streaming_details_init(&mut request); + request.live_streaming_details.as_mut().unwrap().concurrent_viewers = Some(value.unwrap_or("").to_string()); + }, + "live-streaming-details.scheduled-start-time" => { + request_live_streaming_details_init(&mut request); + request.live_streaming_details.as_mut().unwrap().scheduled_start_time = Some(value.unwrap_or("").to_string()); + }, + "live-streaming-details.scheduled-end-time" => { + request_live_streaming_details_init(&mut request); + request.live_streaming_details.as_mut().unwrap().scheduled_end_time = Some(value.unwrap_or("").to_string()); + }, + "live-streaming-details.actual-start-time" => { + request_live_streaming_details_init(&mut request); + request.live_streaming_details.as_mut().unwrap().actual_start_time = Some(value.unwrap_or("").to_string()); + }, + "live-streaming-details.actual-end-time" => { + request_live_streaming_details_init(&mut request); + request.live_streaming_details.as_mut().unwrap().actual_end_time = Some(value.unwrap_or("").to_string()); + }, + "file-details.bitrate-bps" => { + request_file_details_init(&mut request); + request.file_details.as_mut().unwrap().bitrate_bps = Some(value.unwrap_or("").to_string()); + }, + "file-details.container" => { + request_file_details_init(&mut request); + request.file_details.as_mut().unwrap().container = Some(value.unwrap_or("").to_string()); + }, + "file-details.recording-location.latitude" => { + request_file_details_recording_location_init(&mut request); + request.file_details.as_mut().unwrap().recording_location.as_mut().unwrap().latitude = Some(arg_from_str(value.unwrap_or("0.0"), err, "file-details.recording-location.latitude", "number")); + }, + "file-details.recording-location.altitude" => { + request_file_details_recording_location_init(&mut request); + request.file_details.as_mut().unwrap().recording_location.as_mut().unwrap().altitude = Some(arg_from_str(value.unwrap_or("0.0"), err, "file-details.recording-location.altitude", "number")); + }, + "file-details.recording-location.longitude" => { + request_file_details_recording_location_init(&mut request); + request.file_details.as_mut().unwrap().recording_location.as_mut().unwrap().longitude = Some(arg_from_str(value.unwrap_or("0.0"), err, "file-details.recording-location.longitude", "number")); + }, + "file-details.file-type" => { + request_file_details_recording_location_init(&mut request); + request.file_details.as_mut().unwrap().file_type = Some(value.unwrap_or("").to_string()); + }, + "file-details.creation-time" => { + request_file_details_recording_location_init(&mut request); + request.file_details.as_mut().unwrap().creation_time = Some(value.unwrap_or("").to_string()); + }, + "file-details.duration-ms" => { + request_file_details_recording_location_init(&mut request); + request.file_details.as_mut().unwrap().duration_ms = Some(value.unwrap_or("").to_string()); + }, + "file-details.file-name" => { + request_file_details_recording_location_init(&mut request); + request.file_details.as_mut().unwrap().file_name = Some(value.unwrap_or("").to_string()); + }, + "file-details.file-size" => { + request_file_details_recording_location_init(&mut request); + request.file_details.as_mut().unwrap().file_size = Some(value.unwrap_or("").to_string()); + }, + "snippet.description" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().description = Some(value.unwrap_or("").to_string()); + }, + "snippet.tags" => { + request_snippet_init(&mut request); + if request.snippet.as_mut().unwrap().tags.is_none() { + request.snippet.as_mut().unwrap().tags = Some(Default::default()); + } + request.snippet.as_mut().unwrap().tags.as_mut().unwrap().push(value.unwrap_or("").to_string()); + }, + "snippet.channel-id" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().channel_id = Some(value.unwrap_or("").to_string()); + }, + "snippet.published-at" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().published_at = Some(value.unwrap_or("").to_string()); + }, + "snippet.live-broadcast-content" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().live_broadcast_content = Some(value.unwrap_or("").to_string()); + }, + "snippet.default-language" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().default_language = Some(value.unwrap_or("").to_string()); + }, + "snippet.channel-title" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().channel_title = Some(value.unwrap_or("").to_string()); + }, + "snippet.title" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().title = Some(value.unwrap_or("").to_string()); + }, + "snippet.category-id" => { + request_snippet_init(&mut request); + request.snippet.as_mut().unwrap().category_id = Some(value.unwrap_or("").to_string()); + }, + "snippet.localized.description" => { + request_snippet_localized_init(&mut request); + request.snippet.as_mut().unwrap().localized.as_mut().unwrap().description = Some(value.unwrap_or("").to_string()); + }, + "snippet.localized.title" => { + request_snippet_localized_init(&mut request); + request.snippet.as_mut().unwrap().localized.as_mut().unwrap().title = Some(value.unwrap_or("").to_string()); + }, + "snippet.thumbnails.default.url" => { + request_snippet_thumbnails_default_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().default.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); + }, + "snippet.thumbnails.default.width" => { + request_snippet_thumbnails_default_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().default.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.default.width", "integer")); + }, + "snippet.thumbnails.default.height" => { + request_snippet_thumbnails_default_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().default.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.default.height", "integer")); + }, + "snippet.thumbnails.high.url" => { + request_snippet_thumbnails_high_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().high.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); + }, + "snippet.thumbnails.high.width" => { + request_snippet_thumbnails_high_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().high.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.high.width", "integer")); + }, + "snippet.thumbnails.high.height" => { + request_snippet_thumbnails_high_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().high.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.high.height", "integer")); + }, + "snippet.thumbnails.medium.url" => { + request_snippet_thumbnails_medium_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().medium.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); + }, + "snippet.thumbnails.medium.width" => { + request_snippet_thumbnails_medium_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().medium.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.medium.width", "integer")); + }, + "snippet.thumbnails.medium.height" => { + request_snippet_thumbnails_medium_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().medium.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.medium.height", "integer")); + }, + "snippet.thumbnails.maxres.url" => { + request_snippet_thumbnails_maxres_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().maxres.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); + }, + "snippet.thumbnails.maxres.width" => { + request_snippet_thumbnails_maxres_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().maxres.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.maxres.width", "integer")); + }, + "snippet.thumbnails.maxres.height" => { + request_snippet_thumbnails_maxres_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().maxres.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.maxres.height", "integer")); + }, + "snippet.thumbnails.standard.url" => { + request_snippet_thumbnails_standard_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().standard.as_mut().unwrap().url = Some(value.unwrap_or("").to_string()); + }, + "snippet.thumbnails.standard.width" => { + request_snippet_thumbnails_standard_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().standard.as_mut().unwrap().width = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.standard.width", "integer")); + }, + "snippet.thumbnails.standard.height" => { + request_snippet_thumbnails_standard_init(&mut request); + request.snippet.as_mut().unwrap().thumbnails.as_mut().unwrap().standard.as_mut().unwrap().height = Some(arg_from_str(value.unwrap_or("-0"), err, "snippet.thumbnails.standard.height", "integer")); + }, + "player.embed-html" => { + request_player_init(&mut request); + request.player.as_mut().unwrap().embed_html = Some(value.unwrap_or("").to_string()); + }, + "processing-details.file-details-availability" => { + request_processing_details_init(&mut request); + request.processing_details.as_mut().unwrap().file_details_availability = Some(value.unwrap_or("").to_string()); + }, + "processing-details.editor-suggestions-availability" => { + request_processing_details_init(&mut request); + request.processing_details.as_mut().unwrap().editor_suggestions_availability = Some(value.unwrap_or("").to_string()); + }, + "processing-details.processing-status" => { + request_processing_details_init(&mut request); + request.processing_details.as_mut().unwrap().processing_status = Some(value.unwrap_or("").to_string()); + }, + "processing-details.processing-issues-availability" => { + request_processing_details_init(&mut request); + request.processing_details.as_mut().unwrap().processing_issues_availability = Some(value.unwrap_or("").to_string()); + }, + "processing-details.processing-failure-reason" => { + request_processing_details_init(&mut request); + request.processing_details.as_mut().unwrap().processing_failure_reason = Some(value.unwrap_or("").to_string()); + }, + "processing-details.thumbnails-availability" => { + request_processing_details_init(&mut request); + request.processing_details.as_mut().unwrap().thumbnails_availability = Some(value.unwrap_or("").to_string()); + }, + "processing-details.processing-progress.time-left-ms" => { + request_processing_details_processing_progress_init(&mut request); + request.processing_details.as_mut().unwrap().processing_progress.as_mut().unwrap().time_left_ms = Some(value.unwrap_or("").to_string()); + }, + "processing-details.processing-progress.parts-processed" => { + request_processing_details_processing_progress_init(&mut request); + request.processing_details.as_mut().unwrap().processing_progress.as_mut().unwrap().parts_processed = Some(value.unwrap_or("").to_string()); + }, + "processing-details.processing-progress.parts-total" => { + request_processing_details_processing_progress_init(&mut request); + request.processing_details.as_mut().unwrap().processing_progress.as_mut().unwrap().parts_total = Some(value.unwrap_or("").to_string()); + }, + "processing-details.tag-suggestions-availability" => { + request_processing_details_processing_progress_init(&mut request); + request.processing_details.as_mut().unwrap().tag_suggestions_availability = Some(value.unwrap_or("").to_string()); + }, + "etag" => { + request_processing_details_init(&mut request); + request.etag = Some(value.unwrap_or("").to_string()); + }, + "project-details.tags" => { + request_project_details_init(&mut request); + if request.project_details.as_mut().unwrap().tags.is_none() { + request.project_details.as_mut().unwrap().tags = Some(Default::default()); + } + request.project_details.as_mut().unwrap().tags.as_mut().unwrap().push(value.unwrap_or("").to_string()); + }, + "recording-details.recording-date" => { + request_recording_details_init(&mut request); + request.recording_details.as_mut().unwrap().recording_date = Some(value.unwrap_or("").to_string()); + }, + "recording-details.location-description" => { + request_recording_details_init(&mut request); + request.recording_details.as_mut().unwrap().location_description = Some(value.unwrap_or("").to_string()); + }, + "recording-details.location.latitude" => { + request_recording_details_location_init(&mut request); + request.recording_details.as_mut().unwrap().location.as_mut().unwrap().latitude = Some(arg_from_str(value.unwrap_or("0.0"), err, "recording-details.location.latitude", "number")); + }, + "recording-details.location.altitude" => { + request_recording_details_location_init(&mut request); + request.recording_details.as_mut().unwrap().location.as_mut().unwrap().altitude = Some(arg_from_str(value.unwrap_or("0.0"), err, "recording-details.location.altitude", "number")); + }, + "recording-details.location.longitude" => { + request_recording_details_location_init(&mut request); + request.recording_details.as_mut().unwrap().location.as_mut().unwrap().longitude = Some(arg_from_str(value.unwrap_or("0.0"), err, "recording-details.location.longitude", "number")); + }, + "id" => { + request_recording_details_init(&mut request); + request.id = Some(value.unwrap_or("").to_string()); + }, + _ => { + err.issues.push(CLIError::Field(FieldError::Unknown(temp_cursor.to_string()))); + } + } + } + let mut call = self.hub.videos().update(request); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { + let (key, value) = parse_kv_arg(&*parg, err, false); + match key { + "on-behalf-of-content-owner" => { + call = call.on_behalf_of_content_owner(value.unwrap_or("")); + }, + "alt" + |"fields" + |"key" + |"oauth-token" + |"pretty-print" + |"quota-user" + |"user-ip" => { + let map = [ + ("oauth-token", "oauth_token"), + ("pretty-print", "prettyPrint"), + ("quota-user", "quotaUser"), + ("user-ip", "userIp"), + ]; + call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) + }, + _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), + } + } + let protocol = CallType::Standard; + if dry_run { + Ok(()) + } else { + assert!(err.issues.len() == 0); + for scope in self.opt.values_of("url").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(), + _ => unreachable!() + } { + Err(api_err) => Err(DoitError::ApiError(api_err)), + Ok((mut response, output_schema)) => { + serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); + Ok(()) + } + } + } + } + + fn _watermarks_set(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + + let mut request = api::InvideoBranding::default(); + let mut field_cursor = FieldCursor::default(); + for kvarg in opt.values_of("kv").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; + } + fn request_position_init(request: &mut api::InvideoBranding) { + if request.position.is_none() { + request.position = Some(Default::default()); + } + } + + fn request_timing_init(request: &mut api::InvideoBranding) { + if request.timing.is_none() { + request.timing = Some(Default::default()); + } + } + + match &temp_cursor.to_string()[..] { + "target-channel-id" => { + request.target_channel_id = Some(value.unwrap_or("").to_string()); + }, + "position.corner-position" => { + request_position_init(&mut request); + request.position.as_mut().unwrap().corner_position = Some(value.unwrap_or("").to_string()); + }, + "position.type" => { + request_position_init(&mut request); + request.position.as_mut().unwrap().type_ = Some(value.unwrap_or("").to_string()); + }, + "image-url" => { + request_position_init(&mut request); + request.image_url = Some(value.unwrap_or("").to_string()); + }, + "timing.offset-ms" => { + request_timing_init(&mut request); + request.timing.as_mut().unwrap().offset_ms = Some(value.unwrap_or("").to_string()); + }, + "timing.type" => { + request_timing_init(&mut request); + request.timing.as_mut().unwrap().type_ = Some(value.unwrap_or("").to_string()); + }, + "timing.duration-ms" => { + request_timing_init(&mut request); + request.timing.as_mut().unwrap().duration_ms = Some(value.unwrap_or("").to_string()); + }, + "image-bytes" => { + request_timing_init(&mut request); + request.image_bytes = Some(value.unwrap_or("").to_string()); + }, + _ => { + err.issues.push(CLIError::Field(FieldError::Unknown(temp_cursor.to_string()))); + } + } + } + let mut call = self.hub.watermarks().set(request, opt.value_of("channel-id").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { + let (key, value) = parse_kv_arg(&*parg, err, false); + match key { + "on-behalf-of-content-owner" => { + call = call.on_behalf_of_content_owner(value.unwrap_or("")); + }, + "alt" + |"fields" + |"key" + |"oauth-token" + |"pretty-print" + |"quota-user" + |"user-ip" => { + let map = [ + ("oauth-token", "oauth_token"), + ("pretty-print", "prettyPrint"), + ("quota-user", "quotaUser"), + ("user-ip", "userIp"), + ]; + call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) + }, + _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), + } + } + let vals = opt.values_of("mode").unwrap(); + let protocol = protocol_from_str(vals[0], ["simple", "resumable"].iter().map(|&v| v.to_string()).collect(), err); + let mut input_file = input_file_from_opts(vals[1], err); + let mime_type = input_mime_from_opts(opt.value_of("mime").unwrap_or("application/octet-stream"), err); + if dry_run { + Ok(()) + } else { + assert!(err.issues.len() == 0); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); + } + match match protocol { + CallType::Upload(UploadProtocol::Simple) => call.upload(input_file.unwrap(), mime_type.unwrap()), + CallType::Upload(UploadProtocol::Resumable) => call.upload_resumable(input_file.unwrap(), mime_type.unwrap()), + CallType::Standard => unreachable!() + } { + Err(api_err) => Err(DoitError::ApiError(api_err)), + Ok(mut response) => { + Ok(()) + } + } + } + } + + fn _watermarks_unset(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError) + -> Result<(), DoitError> { + let mut call = self.hub.watermarks().unset(opt.value_of("channel-id").unwrap_or("")); + for parg in opt.values_of("v").unwrap_or(Vec::new()).iter() { + let (key, value) = parse_kv_arg(&*parg, err, false); + match key { + "on-behalf-of-content-owner" => { + call = call.on_behalf_of_content_owner(value.unwrap_or("")); + }, + "alt" + |"fields" + |"key" + |"oauth-token" + |"pretty-print" + |"quota-user" + |"user-ip" => { + let map = [ + ("oauth-token", "oauth_token"), + ("pretty-print", "prettyPrint"), + ("quota-user", "quotaUser"), + ("user-ip", "userIp"), + ]; + call = call.param(map.iter().find(|t| t.0 == key).unwrap_or(&("", key)).1, value.unwrap_or("unset")) + }, + _ => err.issues.push(CLIError::UnknownParameter(key.to_string())), + } + } + let protocol = CallType::Standard; + if dry_run { + Ok(()) + } else { + assert!(err.issues.len() == 0); + for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() { + call = call.add_scope(scope); + } + match match protocol { + CallType::Standard => call.doit(), + _ => unreachable!() + } { + Err(api_err) => Err(DoitError::ApiError(api_err)), + Ok(mut response) => { + Ok(()) + } + } + } + } + + fn _doit(&self, dry_run: bool) -> Result, Option> { + let mut err = InvalidOptionsError::new(); + let mut call_result: Result<(), DoitError> = Ok(()); + let mut err_opt: Option = None; + match self.opt.subcommand() { + ("activities", Some(opt)) => { + match opt.subcommand() { + ("insert", Some(opt)) => { + call_result = self._activities_insert(opt, dry_run, &mut err); + }, + ("list", Some(opt)) => { + call_result = self._activities_list(opt, dry_run, &mut err); + }, + _ => { + err.issues.push(CLIError::MissingMethodError("activities".to_string())); + writeln!(io::stderr(), "{}\n", opt.usage()).ok(); + } + } + }, + ("captions", Some(opt)) => { + match opt.subcommand() { + ("delete", Some(opt)) => { + call_result = self._captions_delete(opt, dry_run, &mut err); + }, + ("download", Some(opt)) => { + call_result = self._captions_download(opt, dry_run, &mut err); + }, + ("insert", Some(opt)) => { + call_result = self._captions_insert(opt, dry_run, &mut err); + }, + ("list", Some(opt)) => { + call_result = self._captions_list(opt, dry_run, &mut err); + }, + ("update", Some(opt)) => { + call_result = self._captions_update(opt, dry_run, &mut err); + }, + _ => { + err.issues.push(CLIError::MissingMethodError("captions".to_string())); + writeln!(io::stderr(), "{}\n", opt.usage()).ok(); + } + } + }, + ("channel-banners", Some(opt)) => { + match opt.subcommand() { + ("insert", Some(opt)) => { + call_result = self._channel_banners_insert(opt, dry_run, &mut err); + }, + _ => { + err.issues.push(CLIError::MissingMethodError("channel-banners".to_string())); + writeln!(io::stderr(), "{}\n", opt.usage()).ok(); + } + } + }, + ("channel-sections", Some(opt)) => { + match opt.subcommand() { + ("delete", Some(opt)) => { + call_result = self._channel_sections_delete(opt, dry_run, &mut err); + }, + ("insert", Some(opt)) => { + call_result = self._channel_sections_insert(opt, dry_run, &mut err); + }, + ("list", Some(opt)) => { + call_result = self._channel_sections_list(opt, dry_run, &mut err); + }, + ("update", Some(opt)) => { + call_result = self._channel_sections_update(opt, dry_run, &mut err); + }, + _ => { + err.issues.push(CLIError::MissingMethodError("channel-sections".to_string())); + writeln!(io::stderr(), "{}\n", opt.usage()).ok(); + } + } + }, + ("channels", Some(opt)) => { + match opt.subcommand() { + ("list", Some(opt)) => { + call_result = self._channels_list(opt, dry_run, &mut err); + }, + ("update", Some(opt)) => { + call_result = self._channels_update(opt, dry_run, &mut err); + }, + _ => { + err.issues.push(CLIError::MissingMethodError("channels".to_string())); + writeln!(io::stderr(), "{}\n", opt.usage()).ok(); + } + } + }, + ("comment-threads", Some(opt)) => { + match opt.subcommand() { + ("insert", Some(opt)) => { + call_result = self._comment_threads_insert(opt, dry_run, &mut err); + }, + ("list", Some(opt)) => { + call_result = self._comment_threads_list(opt, dry_run, &mut err); + }, + ("update", Some(opt)) => { + call_result = self._comment_threads_update(opt, dry_run, &mut err); + }, + _ => { + err.issues.push(CLIError::MissingMethodError("comment-threads".to_string())); + writeln!(io::stderr(), "{}\n", opt.usage()).ok(); + } + } + }, + ("comments", Some(opt)) => { + match opt.subcommand() { + ("delete", Some(opt)) => { + call_result = self._comments_delete(opt, dry_run, &mut err); + }, + ("insert", Some(opt)) => { + call_result = self._comments_insert(opt, dry_run, &mut err); + }, + ("list", Some(opt)) => { + call_result = self._comments_list(opt, dry_run, &mut err); + }, + ("mark-as-spam", Some(opt)) => { + call_result = self._comments_mark_as_spam(opt, dry_run, &mut err); + }, + ("set-moderation-status", Some(opt)) => { + call_result = self._comments_set_moderation_status(opt, dry_run, &mut err); + }, + ("update", Some(opt)) => { + call_result = self._comments_update(opt, dry_run, &mut err); + }, + _ => { + err.issues.push(CLIError::MissingMethodError("comments".to_string())); + writeln!(io::stderr(), "{}\n", opt.usage()).ok(); + } + } + }, + ("guide-categories", Some(opt)) => { + match opt.subcommand() { + ("list", Some(opt)) => { + call_result = self._guide_categories_list(opt, dry_run, &mut err); + }, + _ => { + err.issues.push(CLIError::MissingMethodError("guide-categories".to_string())); + writeln!(io::stderr(), "{}\n", opt.usage()).ok(); + } + } + }, + ("i18n-languages", Some(opt)) => { + match opt.subcommand() { + ("list", Some(opt)) => { + call_result = self._i18n_languages_list(opt, dry_run, &mut err); + }, + _ => { + err.issues.push(CLIError::MissingMethodError("i18n-languages".to_string())); + writeln!(io::stderr(), "{}\n", opt.usage()).ok(); + } + } + }, + ("i18n-regions", Some(opt)) => { + match opt.subcommand() { + ("list", Some(opt)) => { + call_result = self._i18n_regions_list(opt, dry_run, &mut err); + }, + _ => { + err.issues.push(CLIError::MissingMethodError("i18n-regions".to_string())); + writeln!(io::stderr(), "{}\n", opt.usage()).ok(); + } + } + }, + ("live-broadcasts", Some(opt)) => { + match opt.subcommand() { + ("bind", Some(opt)) => { + call_result = self._live_broadcasts_bind(opt, dry_run, &mut err); + }, + ("control", Some(opt)) => { + call_result = self._live_broadcasts_control(opt, dry_run, &mut err); + }, + ("delete", Some(opt)) => { + call_result = self._live_broadcasts_delete(opt, dry_run, &mut err); + }, + ("insert", Some(opt)) => { + call_result = self._live_broadcasts_insert(opt, dry_run, &mut err); + }, + ("list", Some(opt)) => { + call_result = self._live_broadcasts_list(opt, dry_run, &mut err); + }, + ("transition", Some(opt)) => { + call_result = self._live_broadcasts_transition(opt, dry_run, &mut err); + }, + ("update", Some(opt)) => { + call_result = self._live_broadcasts_update(opt, dry_run, &mut err); + }, + _ => { + err.issues.push(CLIError::MissingMethodError("live-broadcasts".to_string())); + writeln!(io::stderr(), "{}\n", opt.usage()).ok(); + } + } + }, + ("live-streams", Some(opt)) => { + match opt.subcommand() { + ("delete", Some(opt)) => { + call_result = self._live_streams_delete(opt, dry_run, &mut err); + }, + ("insert", Some(opt)) => { + call_result = self._live_streams_insert(opt, dry_run, &mut err); + }, + ("list", Some(opt)) => { + call_result = self._live_streams_list(opt, dry_run, &mut err); + }, + ("update", Some(opt)) => { + call_result = self._live_streams_update(opt, dry_run, &mut err); + }, + _ => { + err.issues.push(CLIError::MissingMethodError("live-streams".to_string())); + writeln!(io::stderr(), "{}\n", opt.usage()).ok(); + } + } + }, + ("playlist-items", Some(opt)) => { + match opt.subcommand() { + ("delete", Some(opt)) => { + call_result = self._playlist_items_delete(opt, dry_run, &mut err); + }, + ("insert", Some(opt)) => { + call_result = self._playlist_items_insert(opt, dry_run, &mut err); + }, + ("list", Some(opt)) => { + call_result = self._playlist_items_list(opt, dry_run, &mut err); + }, + ("update", Some(opt)) => { + call_result = self._playlist_items_update(opt, dry_run, &mut err); + }, + _ => { + err.issues.push(CLIError::MissingMethodError("playlist-items".to_string())); + writeln!(io::stderr(), "{}\n", opt.usage()).ok(); + } + } + }, + ("playlists", Some(opt)) => { + match opt.subcommand() { + ("delete", Some(opt)) => { + call_result = self._playlists_delete(opt, dry_run, &mut err); + }, + ("insert", Some(opt)) => { + call_result = self._playlists_insert(opt, dry_run, &mut err); + }, + ("list", Some(opt)) => { + call_result = self._playlists_list(opt, dry_run, &mut err); + }, + ("update", Some(opt)) => { + call_result = self._playlists_update(opt, dry_run, &mut err); + }, + _ => { + err.issues.push(CLIError::MissingMethodError("playlists".to_string())); + writeln!(io::stderr(), "{}\n", opt.usage()).ok(); + } + } + }, + ("search", Some(opt)) => { + match opt.subcommand() { + ("list", Some(opt)) => { + call_result = self._search_list(opt, dry_run, &mut err); + }, + _ => { + err.issues.push(CLIError::MissingMethodError("search".to_string())); + writeln!(io::stderr(), "{}\n", opt.usage()).ok(); + } + } + }, + ("subscriptions", Some(opt)) => { + match opt.subcommand() { + ("delete", Some(opt)) => { + call_result = self._subscriptions_delete(opt, dry_run, &mut err); + }, + ("insert", Some(opt)) => { + call_result = self._subscriptions_insert(opt, dry_run, &mut err); + }, + ("list", Some(opt)) => { + call_result = self._subscriptions_list(opt, dry_run, &mut err); + }, + _ => { + err.issues.push(CLIError::MissingMethodError("subscriptions".to_string())); + writeln!(io::stderr(), "{}\n", opt.usage()).ok(); + } + } + }, + ("thumbnails", Some(opt)) => { + match opt.subcommand() { + ("set", Some(opt)) => { + call_result = self._thumbnails_set(opt, dry_run, &mut err); + }, + _ => { + err.issues.push(CLIError::MissingMethodError("thumbnails".to_string())); + writeln!(io::stderr(), "{}\n", opt.usage()).ok(); + } + } + }, + ("video-abuse-report-reasons", Some(opt)) => { + match opt.subcommand() { + ("list", Some(opt)) => { + call_result = self._video_abuse_report_reasons_list(opt, dry_run, &mut err); + }, + _ => { + err.issues.push(CLIError::MissingMethodError("video-abuse-report-reasons".to_string())); + writeln!(io::stderr(), "{}\n", opt.usage()).ok(); + } + } + }, + ("video-categories", Some(opt)) => { + match opt.subcommand() { + ("list", Some(opt)) => { + call_result = self._video_categories_list(opt, dry_run, &mut err); + }, + _ => { + err.issues.push(CLIError::MissingMethodError("video-categories".to_string())); + writeln!(io::stderr(), "{}\n", opt.usage()).ok(); + } + } + }, + ("videos", Some(opt)) => { + match opt.subcommand() { + ("delete", Some(opt)) => { + call_result = self._videos_delete(opt, dry_run, &mut err); + }, + ("get-rating", Some(opt)) => { + call_result = self._videos_get_rating(opt, dry_run, &mut err); + }, + ("insert", Some(opt)) => { + call_result = self._videos_insert(opt, dry_run, &mut err); + }, + ("list", Some(opt)) => { + call_result = self._videos_list(opt, dry_run, &mut err); + }, + ("rate", Some(opt)) => { + call_result = self._videos_rate(opt, dry_run, &mut err); + }, + ("report-abuse", Some(opt)) => { + call_result = self._videos_report_abuse(opt, dry_run, &mut err); + }, + ("update", Some(opt)) => { + call_result = self._videos_update(opt, dry_run, &mut err); + }, + _ => { + err.issues.push(CLIError::MissingMethodError("videos".to_string())); + writeln!(io::stderr(), "{}\n", opt.usage()).ok(); + } + } + }, + ("watermarks", Some(opt)) => { + match opt.subcommand() { + ("set", Some(opt)) => { + call_result = self._watermarks_set(opt, dry_run, &mut err); + }, + ("unset", Some(opt)) => { + call_result = self._watermarks_unset(opt, dry_run, &mut err); + }, + _ => { + err.issues.push(CLIError::MissingMethodError("watermarks".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 + fn new(opt: ArgMatches<'a, 'n>) -> Result, InvalidOptionsError> { + let (config_dir, secret) = { + let config_dir = match cmn::assure_config_dir_exists(opt.value_of("folder").unwrap_or("~/.google-service-cli")) { + Err(e) => return Err(InvalidOptionsError::single(e, 3)), + Ok(p) => p, + }; + + match cmn::application_secret_from_directory(&config_dir, "youtube3-secret.json", + "{ + \"installed\": { + \"auth_uri\": \"https://accounts.google.com/o/oauth2/auth\", + \"client_secret\": \"UqkDJd5RFwnHoiG5x5Rub8SI\", + \"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\": \"14070749909-vgip2f1okm7bkvajhi9jugan6126io9v.apps.googleusercontent.com\", + \"auth_provider_x509_cert_url\": \"https://www.googleapis.com/oauth2/v1/certs\" + } +}") { + Ok(secret) => (config_dir, secret), + Err(e) => return Err(InvalidOptionsError::single(e, 4)) + } + }; + + let auth = Authenticator::new( &secret, DefaultAuthenticatorDelegate, + if opt.is_present("debug-auth") { + hyper::Client::with_connector(mock::TeeConnector { + connector: hyper::net::HttpConnector(None) + }) + } else { + hyper::Client::new() + }, + JsonTokenStorage { + program_name: "youtube3", + db_dir: config_dir.clone(), + }, None); + + let client = + if opt.is_present("debug") { + hyper::Client::with_connector(mock::TeeConnector { + connector: hyper::net::HttpConnector(None) + }) + } else { + hyper::Client::new() + }; + let engine = Engine { + opt: opt, + hub: api::YouTube::new(client, auth), + }; + + match engine._doit(true) { + Err(Some(err)) => Err(err), + Err(None) => Ok(engine), + Ok(_) => unreachable!(), + } + } + + fn doit(&self) -> Result<(), DoitError> { + match self._doit(false) { + Ok(res) => res, + Err(_) => unreachable!(), + } + } +} + fn main() { - let matches = - App::new("youtube3") + let upload_value_names = ["mode", "file"]; + let arg_data = [ + ("activities", "methods: 'insert' and 'list'", vec![ + ("insert", Some("Posts a bulletin for a specific channel. (The user submitting the request must be authorized to act on the channel's behalf.) + + Note: Even though an activity resource can contain information about actions like a user rating a video or marking a video as a favorite, you need to use other API methods to generate those activity resources. For example, you would use the API's videos.rate() method to rate a video and the playlistItems.insert() method to mark a video as a favorite."), + vec![ + (Some("kv"), + Some("r"), + Some("Set various fields of the request structure"), + Some(true), + Some(true)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ("list", Some("Returns a list of channel activity events that match the request criteria. For example, you can retrieve events associated with a particular channel, events associated with the user's subscriptions and Google+ friends, or the YouTube home page feed, which is customized for each user."), + vec![ + (Some("part"), + None, + Some("The part parameter specifies a comma-separated list of one or more activity resource properties that the API response will include. The part names that you can include in the parameter value are id, snippet, and contentDetails. + + If the parameter identifies a property that contains child properties, the child properties will be included in the response. For example, in a activity resource, the snippet property contains other properties that identify the type of activity, a display title for the activity, and so forth. If you set part=snippet, the API response will also contain all of those nested properties."), + Some(true), + Some(false)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ]), + + ("captions", "methods: 'delete', 'download', 'insert', 'list' and 'update'", vec![ + ("delete", Some("Deletes a specified caption track."), + vec![ + (Some("id"), + None, + Some("The id parameter identifies the caption track that is being deleted. The value is a caption track ID as identified by the id property in a caption resource."), + Some(true), + Some(false)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + ]), + ("download", Some("Downloads a caption track. The caption track is returned in its original format unless the request specifies a value for the tfmt parameter and in its original language unless the request specifies a value for the tlang parameter."), + vec![ + (Some("id"), + None, + Some("The id parameter identifies the caption track that is being retrieved. The value is a caption track ID as identified by the id property in a caption resource."), + Some(true), + Some(false)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ("insert", Some("Uploads a caption track."), + vec![ + (Some("kv"), + Some("r"), + Some("Set various fields of the request structure"), + Some(true), + Some(true)), + + (Some("mode"), + Some("u"), + Some("Specify the upload protocol (simple|resumable) and the file to upload"), + Some(true), + Some(true)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ("list", Some("Returns a list of caption tracks that are associated with a specified video. Note that the API response does not contain the actual captions and that the captions.download method provides the ability to retrieve a caption track."), + vec![ + (Some("part"), + None, + Some("The part parameter specifies a comma-separated list of one or more caption resource parts that the API response will include. The part names that you can include in the parameter value are id and snippet."), + Some(true), + Some(false)), + + (Some("video-id"), + None, + Some("The videoId parameter specifies the YouTube video ID of the video for which the API should return caption tracks."), + Some(true), + Some(false)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ("update", Some("Updates a caption track. When updating a caption track, you can change the track's draft status, upload a new caption file for the track, or both."), + vec![ + (Some("kv"), + Some("r"), + Some("Set various fields of the request structure"), + Some(true), + Some(true)), + + (Some("mode"), + Some("u"), + Some("Specify the upload protocol (simple|resumable) and the file to upload"), + Some(true), + Some(true)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ]), + + ("channel-banners", "methods: 'insert'", vec![ + ("insert", Some("Uploads a channel banner image to YouTube. This method represents the first two steps in a three-step process to update the banner image for a channel: + + - Call the channelBanners.insert method to upload the binary image data to YouTube. The image must have a 16:9 aspect ratio and be at least 2120x1192 pixels. + - Extract the url property's value from the response that the API returns for step 1. + - Call the channels.update method to update the channel's branding settings. Set the brandingSettings.image.bannerExternalUrl property's value to the URL obtained in step 2."), + vec![ + (Some("kv"), + Some("r"), + Some("Set various fields of the request structure"), + Some(true), + Some(true)), + + (Some("mode"), + Some("u"), + Some("Specify the upload protocol (simple|resumable) and the file to upload"), + Some(true), + Some(true)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ]), + + ("channel-sections", "methods: 'delete', 'insert', 'list' and 'update'", vec![ + ("delete", Some("Deletes a channelSection."), + vec![ + (Some("id"), + None, + Some("The id parameter specifies the YouTube channelSection ID for the resource that is being deleted. In a channelSection resource, the id property specifies the YouTube channelSection ID."), + Some(true), + Some(false)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + ]), + ("insert", Some("Adds a channelSection for the authenticated user's channel."), + vec![ + (Some("kv"), + Some("r"), + Some("Set various fields of the request structure"), + Some(true), + Some(true)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ("list", Some("Returns channelSection resources that match the API request criteria."), + vec![ + (Some("part"), + None, + Some("The part parameter specifies a comma-separated list of one or more channelSection resource properties that the API response will include. The part names that you can include in the parameter value are id, snippet, and contentDetails. + + If the parameter identifies a property that contains child properties, the child properties will be included in the response. For example, in a channelSection resource, the snippet property contains other properties, such as a display title for the channelSection. If you set part=snippet, the API response will also contain all of those nested properties."), + Some(true), + Some(false)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ("update", Some("Update a channelSection."), + vec![ + (Some("kv"), + Some("r"), + Some("Set various fields of the request structure"), + Some(true), + Some(true)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ]), + + ("channels", "methods: 'list' and 'update'", vec![ + ("list", Some("Returns a collection of zero or more channel resources that match the request criteria."), + vec![ + (Some("part"), + None, + Some("The part parameter specifies a comma-separated list of one or more channel resource properties that the API response will include. The part names that you can include in the parameter value are id, snippet, contentDetails, statistics, topicDetails, and invideoPromotion. + + If the parameter identifies a property that contains child properties, the child properties will be included in the response. For example, in a channel resource, the contentDetails property contains other properties, such as the uploads properties. As such, if you set part=contentDetails, the API response will also contain all of those nested properties."), + Some(true), + Some(false)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ("update", Some("Updates a channel's metadata."), + vec![ + (Some("kv"), + Some("r"), + Some("Set various fields of the request structure"), + Some(true), + Some(true)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ]), + + ("comment-threads", "methods: 'insert', 'list' and 'update'", vec![ + ("insert", Some("Creates a new comment thread and top level comment."), + vec![ + (Some("kv"), + Some("r"), + Some("Set various fields of the request structure"), + Some(true), + Some(true)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ("list", Some("Returns a list of comment threads that match the API request parameters."), + vec![ + (Some("part"), + None, + Some("The part parameter specifies the commentThread resource parts that the API response will include. Supported values are id, snippet and replies."), + Some(true), + Some(false)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ("update", Some("Modifies an existing comment."), + vec![ + (Some("kv"), + Some("r"), + Some("Set various fields of the request structure"), + Some(true), + Some(true)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ]), + + ("comments", "methods: 'delete', 'insert', 'list', 'mark-as-spam', 'set-moderation-status' and 'update'", vec![ + ("delete", Some("Deletes a comment."), + vec![ + (Some("id"), + None, + Some("The id parameter specifies the comment ID for the resource that should be deleted."), + Some(true), + Some(false)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + ]), + ("insert", Some("Creates a new comment. + + Note: to create a top level comment it is also necessary to create a comment thread. Both are accomplished through the commentThreads resource."), + vec![ + (Some("kv"), + Some("r"), + Some("Set various fields of the request structure"), + Some(true), + Some(true)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ("list", Some("Returns a list of comments that match the API request parameters."), + vec![ + (Some("part"), + None, + Some("The part parameter specifies the comment resource parts that the API response will include. Supported values are id and snippet."), + Some(true), + Some(false)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ("mark-as-spam", Some("Expresses the caller's opinion that a comment is spam."), + vec![ + (Some("id"), + None, + Some("The id parameter specifies a comma-separated list of IDs of comments which should get flagged as spam."), + Some(true), + Some(false)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + ]), + ("set-moderation-status", Some("Sets the moderation status of one or more comments."), + vec![ + (Some("id"), + None, + Some("The id parameter specifies a comma-separated list of IDs of comments whose moderation status should be updated."), + Some(true), + Some(false)), + + (Some("moderation-status"), + None, + Some("Determines the new moderation status of the specified comments."), + Some(true), + Some(false)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + ]), + ("update", Some("Modifies an existing comment."), + vec![ + (Some("kv"), + Some("r"), + Some("Set various fields of the request structure"), + Some(true), + Some(true)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ]), + + ("guide-categories", "methods: 'list'", vec![ + ("list", Some("Returns a list of categories that can be associated with YouTube channels."), + vec![ + (Some("part"), + None, + Some("The part parameter specifies a comma-separated list of one or more guideCategory resource properties that the API response will include. The part names that you can include in the parameter value are id and snippet. + + If the parameter identifies a property that contains child properties, the child properties will be included in the response. For example, in a guideCategory resource, the snippet property contains other properties, such as the category's title. If you set part=snippet, the API response will also contain all of those nested properties."), + Some(true), + Some(false)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ]), + + ("i18n-languages", "methods: 'list'", vec![ + ("list", Some("Returns a list of supported languages."), + vec![ + (Some("part"), + None, + Some("The part parameter specifies a comma-separated list of one or more i18nLanguage resource properties that the API response will include. The part names that you can include in the parameter value are id and snippet."), + Some(true), + Some(false)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ]), + + ("i18n-regions", "methods: 'list'", vec![ + ("list", Some("Returns a list of supported regions."), + vec![ + (Some("part"), + None, + Some("The part parameter specifies a comma-separated list of one or more i18nRegion resource properties that the API response will include. The part names that you can include in the parameter value are id and snippet."), + Some(true), + Some(false)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ]), + + ("live-broadcasts", "methods: 'bind', 'control', 'delete', 'insert', 'list', 'transition' and 'update'", vec![ + ("bind", Some("Binds a YouTube broadcast to a stream or removes an existing binding between a broadcast and a stream. A broadcast can only be bound to one video stream."), + vec![ + (Some("id"), + None, + Some("The id parameter specifies the unique ID of the broadcast that is being bound to a video stream."), + Some(true), + Some(false)), + + (Some("part"), + None, + Some("The part parameter specifies a comma-separated list of one or more liveBroadcast resource properties that the API response will include. The part names that you can include in the parameter value are id, snippet, contentDetails, and status."), + Some(true), + Some(false)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ("control", Some("Controls the settings for a slate that can be displayed in the broadcast stream."), + vec![ + (Some("id"), + None, + Some("The id parameter specifies the YouTube live broadcast ID that uniquely identifies the broadcast in which the slate is being updated."), + Some(true), + Some(false)), + + (Some("part"), + None, + Some("The part parameter specifies a comma-separated list of one or more liveBroadcast resource properties that the API response will include. The part names that you can include in the parameter value are id, snippet, contentDetails, and status."), + Some(true), + Some(false)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ("delete", Some("Deletes a broadcast."), + vec![ + (Some("id"), + None, + Some("The id parameter specifies the YouTube live broadcast ID for the resource that is being deleted."), + Some(true), + Some(false)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + ]), + ("insert", Some("Creates a broadcast."), + vec![ + (Some("kv"), + Some("r"), + Some("Set various fields of the request structure"), + Some(true), + Some(true)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ("list", Some("Returns a list of YouTube broadcasts that match the API request parameters."), + vec![ + (Some("part"), + None, + Some("The part parameter specifies a comma-separated list of one or more liveBroadcast resource properties that the API response will include. The part names that you can include in the parameter value are id, snippet, contentDetails, and status."), + Some(true), + Some(false)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ("transition", Some("Changes the status of a YouTube live broadcast and initiates any processes associated with the new status. For example, when you transition a broadcast's status to testing, YouTube starts to transmit video to that broadcast's monitor stream. Before calling this method, you should confirm that the value of the status.streamStatus property for the stream bound to your broadcast is active."), + vec![ + (Some("broadcast-status"), + None, + Some("The broadcastStatus parameter identifies the state to which the broadcast is changing. Note that to transition a broadcast to either the testing or live state, the status.streamStatus must be active for the stream that the broadcast is bound to."), + Some(true), + Some(false)), + + (Some("id"), + None, + Some("The id parameter specifies the unique ID of the broadcast that is transitioning to another status."), + Some(true), + Some(false)), + + (Some("part"), + None, + Some("The part parameter specifies a comma-separated list of one or more liveBroadcast resource properties that the API response will include. The part names that you can include in the parameter value are id, snippet, contentDetails, and status."), + Some(true), + Some(false)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ("update", Some("Updates a broadcast. For example, you could modify the broadcast settings defined in the liveBroadcast resource's contentDetails object."), + vec![ + (Some("kv"), + Some("r"), + Some("Set various fields of the request structure"), + Some(true), + Some(true)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ]), + + ("live-streams", "methods: 'delete', 'insert', 'list' and 'update'", vec![ + ("delete", Some("Deletes a video stream."), + vec![ + (Some("id"), + None, + Some("The id parameter specifies the YouTube live stream ID for the resource that is being deleted."), + Some(true), + Some(false)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + ]), + ("insert", Some("Creates a video stream. The stream enables you to send your video to YouTube, which can then broadcast the video to your audience."), + vec![ + (Some("kv"), + Some("r"), + Some("Set various fields of the request structure"), + Some(true), + Some(true)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ("list", Some("Returns a list of video streams that match the API request parameters."), + vec![ + (Some("part"), + None, + Some("The part parameter specifies a comma-separated list of one or more liveStream resource properties that the API response will include. The part names that you can include in the parameter value are id, snippet, cdn, and status."), + Some(true), + Some(false)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ("update", Some("Updates a video stream. If the properties that you want to change cannot be updated, then you need to create a new stream with the proper settings."), + vec![ + (Some("kv"), + Some("r"), + Some("Set various fields of the request structure"), + Some(true), + Some(true)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ]), + + ("playlist-items", "methods: 'delete', 'insert', 'list' and 'update'", vec![ + ("delete", Some("Deletes a playlist item."), + vec![ + (Some("id"), + None, + Some("The id parameter specifies the YouTube playlist item ID for the playlist item that is being deleted. In a playlistItem resource, the id property specifies the playlist item's ID."), + Some(true), + Some(false)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + ]), + ("insert", Some("Adds a resource to a playlist."), + vec![ + (Some("kv"), + Some("r"), + Some("Set various fields of the request structure"), + Some(true), + Some(true)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ("list", Some("Returns a collection of playlist items that match the API request parameters. You can retrieve all of the playlist items in a specified playlist or retrieve one or more playlist items by their unique IDs."), + vec![ + (Some("part"), + None, + Some("The part parameter specifies a comma-separated list of one or more playlistItem resource properties that the API response will include. The part names that you can include in the parameter value are id, snippet, contentDetails, and status. + + If the parameter identifies a property that contains child properties, the child properties will be included in the response. For example, in a playlistItem resource, the snippet property contains numerous fields, including the title, description, position, and resourceId properties. As such, if you set part=snippet, the API response will contain all of those properties."), + Some(true), + Some(false)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ("update", Some("Modifies a playlist item. For example, you could update the item's position in the playlist."), + vec![ + (Some("kv"), + Some("r"), + Some("Set various fields of the request structure"), + Some(true), + Some(true)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ]), + + ("playlists", "methods: 'delete', 'insert', 'list' and 'update'", vec![ + ("delete", Some("Deletes a playlist."), + vec![ + (Some("id"), + None, + Some("The id parameter specifies the YouTube playlist ID for the playlist that is being deleted. In a playlist resource, the id property specifies the playlist's ID."), + Some(true), + Some(false)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + ]), + ("insert", Some("Creates a playlist."), + vec![ + (Some("kv"), + Some("r"), + Some("Set various fields of the request structure"), + Some(true), + Some(true)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ("list", Some("Returns a collection of playlists that match the API request parameters. For example, you can retrieve all playlists that the authenticated user owns, or you can retrieve one or more playlists by their unique IDs."), + vec![ + (Some("part"), + None, + Some("The part parameter specifies a comma-separated list of one or more playlist resource properties that the API response will include. The part names that you can include in the parameter value are id, snippet, status, and contentDetails. + + If the parameter identifies a property that contains child properties, the child properties will be included in the response. For example, in a playlist resource, the snippet property contains properties like author, title, description, tags, and timeCreated. As such, if you set part=snippet, the API response will contain all of those properties."), + Some(true), + Some(false)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ("update", Some("Modifies a playlist. For example, you could change a playlist's title, description, or privacy status."), + vec![ + (Some("kv"), + Some("r"), + Some("Set various fields of the request structure"), + Some(true), + Some(true)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ]), + + ("search", "methods: 'list'", vec![ + ("list", Some("Returns a collection of search results that match the query parameters specified in the API request. By default, a search result set identifies matching video, channel, and playlist resources, but you can also configure queries to only retrieve a specific type of resource."), + vec![ + (Some("part"), + None, + Some("The part parameter specifies a comma-separated list of one or more search resource properties that the API response will include. The part names that you can include in the parameter value are id and snippet. + + If the parameter identifies a property that contains child properties, the child properties will be included in the response. For example, in a search result, the snippet property contains other properties that identify the result's title, description, and so forth. If you set part=snippet, the API response will also contain all of those nested properties."), + Some(true), + Some(false)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ]), + + ("subscriptions", "methods: 'delete', 'insert' and 'list'", vec![ + ("delete", Some("Deletes a subscription."), + vec![ + (Some("id"), + None, + Some("The id parameter specifies the YouTube subscription ID for the resource that is being deleted. In a subscription resource, the id property specifies the YouTube subscription ID."), + Some(true), + Some(false)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + ]), + ("insert", Some("Adds a subscription for the authenticated user's channel."), + vec![ + (Some("kv"), + Some("r"), + Some("Set various fields of the request structure"), + Some(true), + Some(true)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ("list", Some("Returns subscription resources that match the API request criteria."), + vec![ + (Some("part"), + None, + Some("The part parameter specifies a comma-separated list of one or more subscription resource properties that the API response will include. The part names that you can include in the parameter value are id, snippet, and contentDetails. + + If the parameter identifies a property that contains child properties, the child properties will be included in the response. For example, in a subscription resource, the snippet property contains other properties, such as a display title for the subscription. If you set part=snippet, the API response will also contain all of those nested properties."), + Some(true), + Some(false)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ]), + + ("thumbnails", "methods: 'set'", vec![ + ("set", Some("Uploads a custom video thumbnail to YouTube and sets it for a video."), + vec![ + (Some("video-id"), + None, + Some("The videoId parameter specifies a YouTube video ID for which the custom video thumbnail is being provided."), + Some(true), + Some(false)), + + (Some("mode"), + Some("u"), + Some("Specify the upload protocol (simple|resumable) and the file to upload"), + Some(true), + Some(true)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ]), + + ("video-abuse-report-reasons", "methods: 'list'", vec![ + ("list", Some("Returns a list of abuse reasons that can be used for reporting abusive videos."), + vec![ + (Some("part"), + None, + Some("The part parameter specifies the videoCategory resource parts that the API response will include. Supported values are id and snippet."), + Some(true), + Some(false)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ]), + + ("video-categories", "methods: 'list'", vec![ + ("list", Some("Returns a list of categories that can be associated with YouTube videos."), + vec![ + (Some("part"), + None, + Some("The part parameter specifies the videoCategory resource parts that the API response will include. Supported values are id and snippet."), + Some(true), + Some(false)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ]), + + ("videos", "methods: 'delete', 'get-rating', 'insert', 'list', 'rate', 'report-abuse' and 'update'", vec![ + ("delete", Some("Deletes a YouTube video."), + vec![ + (Some("id"), + None, + Some("The id parameter specifies the YouTube video ID for the resource that is being deleted. In a video resource, the id property specifies the video's ID."), + Some(true), + Some(false)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + ]), + ("get-rating", Some("Retrieves the ratings that the authorized user gave to a list of specified videos."), + vec![ + (Some("id"), + None, + Some("The id parameter specifies a comma-separated list of the YouTube video ID(s) for the resource(s) for which you are retrieving rating data. In a video resource, the id property specifies the video's ID."), + Some(true), + Some(false)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ("insert", Some("Uploads a video to YouTube and optionally sets the video's metadata."), + vec![ + (Some("kv"), + Some("r"), + Some("Set various fields of the request structure"), + Some(true), + Some(true)), + + (Some("mode"), + Some("u"), + Some("Specify the upload protocol (simple|resumable) and the file to upload"), + Some(true), + Some(true)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ("list", Some("Returns a list of videos that match the API request parameters."), + vec![ + (Some("part"), + None, + Some("The part parameter specifies a comma-separated list of one or more video resource properties that the API response will include. The part names that you can include in the parameter value are id, snippet, contentDetails, fileDetails, liveStreamingDetails, localizations, player, processingDetails, recordingDetails, statistics, status, suggestions, and topicDetails. + + If the parameter identifies a property that contains child properties, the child properties will be included in the response. For example, in a video resource, the snippet property contains the channelId, title, description, tags, and categoryId properties. As such, if you set part=snippet, the API response will contain all of those properties."), + Some(true), + Some(false)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ("rate", Some("Add a like or dislike rating to a video or remove a rating from a video."), + vec![ + (Some("id"), + None, + Some("The id parameter specifies the YouTube video ID of the video that is being rated or having its rating removed."), + Some(true), + Some(false)), + + (Some("rating"), + None, + Some("Specifies the rating to record."), + Some(true), + Some(false)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + ]), + ("report-abuse", Some("Report abuse for a video."), + vec![ + (Some("kv"), + Some("r"), + Some("Set various fields of the request structure"), + Some(true), + Some(true)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + ]), + ("update", Some("Updates a video's metadata."), + vec![ + (Some("kv"), + Some("r"), + Some("Set various fields of the request structure"), + Some(true), + Some(true)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + + (Some("out"), + Some("o"), + Some("Specify the file into which to write the programs output"), + Some(false), + Some(false)), + ]), + ]), + + ("watermarks", "methods: 'set' and 'unset'", vec![ + ("set", Some("Uploads a watermark image to YouTube and sets it for a channel."), + vec![ + (Some("channel-id"), + None, + Some("The channelId parameter specifies a YouTube channel ID for which the watermark is being provided."), + Some(true), + Some(false)), + + (Some("kv"), + Some("r"), + Some("Set various fields of the request structure"), + Some(true), + Some(true)), + + (Some("mode"), + Some("u"), + Some("Specify the upload protocol (simple|resumable) and the file to upload"), + Some(true), + Some(true)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + ]), + ("unset", Some("Deletes a watermark."), + vec![ + (Some("channel-id"), + None, + Some("The channelId parameter specifies a YouTube channel ID for which the watermark is being unset."), + Some(true), + Some(false)), + + (Some("v"), + Some("p"), + Some("Set various fields of the request structure"), + Some(false), + Some(true)), + ]), + ]), + + ]; + + let mut app = App::new("youtube3") .author("Sebastian Thiel ") - .version("0.2.0") + .version("0.2.0+20150414") .about("Programmatic access to YouTube features.") - .after_help("All documentation details can be found athttp://byron.github.io/google-apis-rs/google_youtube3_cli/index.html") + .after_help("All documentation details can be found at http://byron.github.io/google-apis-rs/google_youtube3_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: ${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("Output all server communication to standard error. `tx` and `rx` are placed into the same stream.") + .multiple(false) .takes_value(false)) .arg(Arg::with_name("debug-auth") .long("debug-auth") .help("Output all communication related to authentication to standard error. `tx` and `rx` are placed into the same stream.") - .takes_value(false)) - .subcommand( - SubCommand::new("activities") - .subcommand( - SubCommand::new("insert") - .about("Posts a bulletin for a specific channel. (The user submitting the request must be authorized to act on the channel's behalf.) + .multiple(false) + .takes_value(false)); - Note: Even though an activity resource can contain information about actions like a user rating a video or marking a video as a favorite, you need to use other API methods to generate those activity resources. For example, you would use the API's videos.rate() method to rate a video and the playlistItems.insert() method to mark a video as a favorite.") - .after_help("Posts a bulletin for a specific channel. (The user submitting the request must be authorized to act on the channel's behalf.) + for &(main_command_name, ref about, ref subcommands) in arg_data.iter() { + let mut mcmd = SubCommand::new(main_command_name).about(about); - Note: Even though an activity resource can contain information about actions like a user rating a video or marking a video as a favorite, you need to use other API methods to generate those activity resources. For example, you would use the API's videos.rate() method to rate a video and the playlistItems.insert() method to mark a video as a favorite.") - .arg( - Arg::with_name("kv") - .short("r") - .help("Set various fields of the request structure") - .takes_value(true) - .required(true) - .multiple(true)) - .arg( - Arg::with_name("v") - .short("p") - .help("Set various fields of the request structure") - .takes_value(true) - .required(false) - .multiple(true)) - .arg( - Arg::with_name("") - .short("o") - .help("Specify the file into which to write the programs output") - .takes_value(true) - .required(false) - .multiple(false)) - ) - .subcommand( - SubCommand::new("list") - .about("Returns a list of channel activity events that match the request criteria. For example, you can retrieve events associated with a particular channel, events associated with the user's subscriptions and Google+ friends, or the YouTube home page feed, which is customized for each user.") - .after_help("Returns a list of channel activity events that match the request criteria. For example, you can retrieve events associated with a particular channel, events associated with the user's subscriptions and Google+ friends, or the YouTube home page feed, which is customized for each user.") - .arg( - Arg::with_name("part") - .help("The part parameter specifies a comma-separated list of one or more activity resource properties that the API response will include. The part names that you can include in the parameter value are id, snippet, and contentDetails. + for &(sub_command_name, ref desc, ref args) in subcommands { + let mut scmd = SubCommand::new(sub_command_name); + if let &Some(desc) = desc { + scmd = scmd.about(desc); + } - If the parameter identifies a property that contains child properties, the child properties will be included in the response. For example, in a activity resource, the snippet property contains other properties that identify the type of activity, a display title for the activity, and so forth. If you set part=snippet, the API response will also contain all of those nested properties.") - .required(true) - .multiple(false)) - .arg( - Arg::with_name("v") - .short("p") - .help("Set various fields of the request structure") - .takes_value(true) - .required(false) - .multiple(true)) - .arg( - Arg::with_name("") - .short("o") - .help("Specify the file into which to write the programs output") - .takes_value(true) - .required(false) - .multiple(false)) - ) - ) - .subcommand( - SubCommand::new("captions") - .subcommand( - SubCommand::new("delete") - .about("Deletes a specified caption track.") - .after_help("Deletes a specified caption track.") - .arg( - Arg::with_name("id") - .help("The id parameter identifies the caption track that is being deleted. The value is a caption track ID as identified by the id property in a caption resource.") - .required(true) - .multiple(false)) - .arg( - Arg::with_name("v") - .short("p") - .help("Set various fields of the request structure") - .takes_value(true) - .required(false) - .multiple(true)) - ) - .subcommand( - SubCommand::new("download") - .about("Downloads a caption track. The caption track is returned in its original format unless the request specifies a value for the tfmt parameter and in its original language unless the request specifies a value for the tlang parameter.") - .after_help("Downloads a caption track. The caption track is returned in its original format unless the request specifies a value for the tfmt parameter and in its original language unless the request specifies a value for the tlang parameter.") - .arg( - Arg::with_name("id") - .help("The id parameter identifies the caption track that is being retrieved. The value is a caption track ID as identified by the id property in a caption resource.") - .required(true) - .multiple(false)) - .arg( - Arg::with_name("v") - .short("p") - .help("Set various fields of the request structure") - .takes_value(true) - .required(false) - .multiple(true)) - .arg( - Arg::with_name("") - .short("o") - .help("Specify the file into which to write the programs output") - .takes_value(true) - .required(false) - .multiple(false)) - ) - .subcommand( - SubCommand::new("insert") - .about("Uploads a caption track.") - .after_help("Uploads a caption track.") - .arg( - Arg::with_name("kv") - .short("r") - .help("Set various fields of the request structure") - .takes_value(true) - .required(true) - .multiple(true)) - .arg( - Arg::with_name("mode") - .short("u") - .help("Specify which file to upload") - .takes_value(true) - .required(true) - .multiple(true)) - .arg( - Arg::with_name("v") - .short("p") - .help("Set various fields of the request structure") - .takes_value(true) - .required(false) - .multiple(true)) - .arg( - Arg::with_name("") - .short("o") - .help("Specify the file into which to write the programs output") - .takes_value(true) - .required(false) - .multiple(false)) - ) - .subcommand( - SubCommand::new("list") - .about("Returns a list of caption tracks that are associated with a specified video. Note that the API response does not contain the actual captions and that the captions.download method provides the ability to retrieve a caption track.") - .after_help("Returns a list of caption tracks that are associated with a specified video. Note that the API response does not contain the actual captions and that the captions.download method provides the ability to retrieve a caption track.") - .arg( - Arg::with_name("part") - .help("The part parameter specifies a comma-separated list of one or more caption resource parts that the API response will include. The part names that you can include in the parameter value are id and snippet.") - .required(true) - .multiple(false)) - .arg( - Arg::with_name("video-id") - .help("The videoId parameter specifies the YouTube video ID of the video for which the API should return caption tracks.") - .required(true) - .multiple(false)) - .arg( - Arg::with_name("v") - .short("p") - .help("Set various fields of the request structure") - .takes_value(true) - .required(false) - .multiple(true)) - .arg( - Arg::with_name("") - .short("o") - .help("Specify the file into which to write the programs output") - .takes_value(true) - .required(false) - .multiple(false)) - ) - .subcommand( - SubCommand::new("update") - .about("Updates a caption track. When updating a caption track, you can change the track's draft status, upload a new caption file for the track, or both.") - .after_help("Updates a caption track. When updating a caption track, you can change the track's draft status, upload a new caption file for the track, or both.") - .arg( - Arg::with_name("kv") - .short("r") - .help("Set various fields of the request structure") - .takes_value(true) - .required(true) - .multiple(true)) - .arg( - Arg::with_name("mode") - .short("u") - .help("Specify which file to upload") - .takes_value(true) - .required(true) - .multiple(true)) - .arg( - Arg::with_name("v") - .short("p") - .help("Set various fields of the request structure") - .takes_value(true) - .required(false) - .multiple(true)) - .arg( - Arg::with_name("") - .short("o") - .help("Specify the file into which to write the programs output") - .takes_value(true) - .required(false) - .multiple(false)) - ) - ) - .subcommand( - SubCommand::new("channel-banners") - .subcommand( - SubCommand::new("insert") - .about("Uploads a channel banner image to YouTube. This method represents the first two steps in a three-step process to update the banner image for a channel: + 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); + 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); + } + if arg_name_str == "mode" { + arg = arg.number_of_values(2); + arg = arg.value_names(&upload_value_names); - - Call the channelBanners.insert method to upload the binary image data to YouTube. The image must have a 16:9 aspect ratio and be at least 2120x1192 pixels. - - Extract the url property's value from the response that the API returns for step 1. - - Call the channels.update method to update the channel's branding settings. Set the brandingSettings.image.bannerExternalUrl property's value to the URL obtained in step 2.") - .after_help("Uploads a channel banner image to YouTube. This method represents the first two steps in a three-step process to update the banner image for a channel: + scmd = scmd.arg(Arg::with_name("mime") + .short("m") + .requires("mode") + .required(false) + .help("The file's mime time, like 'application/octet-stream'") + .takes_value(true)); + } + scmd = scmd.arg(arg); + } + mcmd = mcmd.subcommand(scmd); + } + app = app.subcommand(mcmd); + } - - Call the channelBanners.insert method to upload the binary image data to YouTube. The image must have a 16:9 aspect ratio and be at least 2120x1192 pixels. - - Extract the url property's value from the response that the API returns for step 1. - - Call the channels.update method to update the channel's branding settings. Set the brandingSettings.image.bannerExternalUrl property's value to the URL obtained in step 2.") - .arg( - Arg::with_name("kv") - .short("r") - .help("Set various fields of the request structure") - .takes_value(true) - .required(true) - .multiple(true)) - .arg( - Arg::with_name("mode") - .short("u") - .help("Specify which file to upload") - .takes_value(true) - .required(true) - .multiple(true)) - .arg( - Arg::with_name("v") - .short("p") - .help("Set various fields of the request structure") - .takes_value(true) - .required(false) - .multiple(true)) - .arg( - Arg::with_name("") - .short("o") - .help("Specify the file into which to write the programs output") - .takes_value(true) - .required(false) - .multiple(false)) - ) - ) - .subcommand( - SubCommand::new("channel-sections") - .subcommand( - SubCommand::new("delete") - .about("Deletes a channelSection.") - .after_help("Deletes a channelSection.") - .arg( - Arg::with_name("id") - .help("The id parameter specifies the YouTube channelSection ID for the resource that is being deleted. In a channelSection resource, the id property specifies the YouTube channelSection ID.") - .required(true) - .multiple(false)) - .arg( - Arg::with_name("v") - .short("p") - .help("Set various fields of the request structure") - .takes_value(true) - .required(false) - .multiple(true)) - ) - .subcommand( - SubCommand::new("insert") - .about("Adds a channelSection for the authenticated user's channel.") - .after_help("Adds a channelSection for the authenticated user's channel.") - .arg( - Arg::with_name("kv") - .short("r") - .help("Set various fields of the request structure") - .takes_value(true) - .required(true) - .multiple(true)) - .arg( - Arg::with_name("v") - .short("p") - .help("Set various fields of the request structure") - .takes_value(true) - .required(false) - .multiple(true)) - .arg( - Arg::with_name("") - .short("o") - .help("Specify the file into which to write the programs output") - .takes_value(true) - .required(false) - .multiple(false)) - ) - .subcommand( - SubCommand::new("list") - .about("Returns channelSection resources that match the API request criteria.") - .after_help("Returns channelSection resources that match the API request criteria.") - .arg( - Arg::with_name("part") - .help("The part parameter specifies a comma-separated list of one or more channelSection resource properties that the API response will include. The part names that you can include in the parameter value are id, snippet, and contentDetails. - - If the parameter identifies a property that contains child properties, the child properties will be included in the response. For example, in a channelSection resource, the snippet property contains other properties, such as a display title for the channelSection. If you set part=snippet, the API response will also contain all of those nested properties.") - .required(true) - .multiple(false)) - .arg( - Arg::with_name("v") - .short("p") - .help("Set various fields of the request structure") - .takes_value(true) - .required(false) - .multiple(true)) - .arg( - Arg::with_name("") - .short("o") - .help("Specify the file into which to write the programs output") - .takes_value(true) - .required(false) - .multiple(false)) - ) - .subcommand( - SubCommand::new("update") - .about("Update a channelSection.") - .after_help("Update a channelSection.") - .arg( - Arg::with_name("kv") - .short("r") - .help("Set various fields of the request structure") - .takes_value(true) - .required(true) - .multiple(true)) - .arg( - Arg::with_name("v") - .short("p") - .help("Set various fields of the request structure") - .takes_value(true) - .required(false) - .multiple(true)) - .arg( - Arg::with_name("") - .short("o") - .help("Specify the file into which to write the programs output") - .takes_value(true) - .required(false) - .multiple(false)) - ) - ) - .subcommand( - SubCommand::new("channels") - .subcommand( - SubCommand::new("list") - .about("Returns a collection of zero or more channel resources that match the request criteria.") - .after_help("Returns a collection of zero or more channel resources that match the request criteria.") - .arg( - Arg::with_name("part") - .help("The part parameter specifies a comma-separated list of one or more channel resource properties that the API response will include. The part names that you can include in the parameter value are id, snippet, contentDetails, statistics, topicDetails, and invideoPromotion. - - If the parameter identifies a property that contains child properties, the child properties will be included in the response. For example, in a channel resource, the contentDetails property contains other properties, such as the uploads properties. As such, if you set part=contentDetails, the API response will also contain all of those nested properties.") - .required(true) - .multiple(false)) - .arg( - Arg::with_name("v") - .short("p") - .help("Set various fields of the request structure") - .takes_value(true) - .required(false) - .multiple(true)) - .arg( - Arg::with_name("") - .short("o") - .help("Specify the file into which to write the programs output") - .takes_value(true) - .required(false) - .multiple(false)) - ) - .subcommand( - SubCommand::new("update") - .about("Updates a channel's metadata.") - .after_help("Updates a channel's metadata.") - .arg( - Arg::with_name("kv") - .short("r") - .help("Set various fields of the request structure") - .takes_value(true) - .required(true) - .multiple(true)) - .arg( - Arg::with_name("v") - .short("p") - .help("Set various fields of the request structure") - .takes_value(true) - .required(false) - .multiple(true)) - .arg( - Arg::with_name("") - .short("o") - .help("Specify the file into which to write the programs output") - .takes_value(true) - .required(false) - .multiple(false)) - ) - ) - .subcommand( - SubCommand::new("comment-threads") - .subcommand( - SubCommand::new("insert") - .about("Creates a new comment thread and top level comment.") - .after_help("Creates a new comment thread and top level comment.") - .arg( - Arg::with_name("kv") - .short("r") - .help("Set various fields of the request structure") - .takes_value(true) - .required(true) - .multiple(true)) - .arg( - Arg::with_name("v") - .short("p") - .help("Set various fields of the request structure") - .takes_value(true) - .required(false) - .multiple(true)) - .arg( - Arg::with_name("") - .short("o") - .help("Specify the file into which to write the programs output") - .takes_value(true) - .required(false) - .multiple(false)) - ) - .subcommand( - SubCommand::new("list") - .about("Returns a list of comment threads that match the API request parameters.") - .after_help("Returns a list of comment threads that match the API request parameters.") - .arg( - Arg::with_name("part") - .help("The part parameter specifies the commentThread resource parts that the API response will include. Supported values are id, snippet and replies.") - .required(true) - .multiple(false)) - .arg( - Arg::with_name("v") - .short("p") - .help("Set various fields of the request structure") - .takes_value(true) - .required(false) - .multiple(true)) - .arg( - Arg::with_name("") - .short("o") - .help("Specify the file into which to write the programs output") - .takes_value(true) - .required(false) - .multiple(false)) - ) - .subcommand( - SubCommand::new("update") - .about("Modifies an existing comment.") - .after_help("Modifies an existing comment.") - .arg( - Arg::with_name("kv") - .short("r") - .help("Set various fields of the request structure") - .takes_value(true) - .required(true) - .multiple(true)) - .arg( - Arg::with_name("v") - .short("p") - .help("Set various fields of the request structure") - .takes_value(true) - .required(false) - .multiple(true)) - .arg( - Arg::with_name("") - .short("o") - .help("Specify the file into which to write the programs output") - .takes_value(true) - .required(false) - .multiple(false)) - ) - ) - .subcommand( - SubCommand::new("comments") - .subcommand( - SubCommand::new("delete") - .about("Deletes a comment.") - .after_help("Deletes a comment.") - .arg( - Arg::with_name("id") - .help("The id parameter specifies the comment ID for the resource that should be deleted.") - .required(true) - .multiple(false)) - .arg( - Arg::with_name("v") - .short("p") - .help("Set various fields of the request structure") - .takes_value(true) - .required(false) - .multiple(true)) - ) - .subcommand( - SubCommand::new("insert") - .about("Creates a new comment. - - Note: to create a top level comment it is also necessary to create a comment thread. Both are accomplished through the commentThreads resource.") - .after_help("Creates a new comment. - - Note: to create a top level comment it is also necessary to create a comment thread. Both are accomplished through the commentThreads resource.") - .arg( - Arg::with_name("kv") - .short("r") - .help("Set various fields of the request structure") - .takes_value(true) - .required(true) - .multiple(true)) - .arg( - Arg::with_name("v") - .short("p") - .help("Set various fields of the request structure") - .takes_value(true) - .required(false) - .multiple(true)) - .arg( - Arg::with_name("") - .short("o") - .help("Specify the file into which to write the programs output") - .takes_value(true) - .required(false) - .multiple(false)) - ) - .subcommand( - SubCommand::new("list") - .about("Returns a list of comments that match the API request parameters.") - .after_help("Returns a list of comments that match the API request parameters.") - .arg( - Arg::with_name("part") - .help("The part parameter specifies the comment resource parts that the API response will include. Supported values are id and snippet.") - .required(true) - .multiple(false)) - .arg( - Arg::with_name("v") - .short("p") - .help("Set various fields of the request structure") - .takes_value(true) - .required(false) - .multiple(true)) - .arg( - Arg::with_name("") - .short("o") - .help("Specify the file into which to write the programs output") - .takes_value(true) - .required(false) - .multiple(false)) - ) - .subcommand( - SubCommand::new("mark-as-spam") - .about("Expresses the caller's opinion that a comment is spam.") - .after_help("Expresses the caller's opinion that a comment is spam.") - .arg( - Arg::with_name("id") - .help("The id parameter specifies a comma-separated list of IDs of comments which should get flagged as spam.") - .required(true) - .multiple(false)) - .arg( - Arg::with_name("v") - .short("p") - .help("Set various fields of the request structure") - .takes_value(true) - .required(false) - .multiple(true)) - ) - .subcommand( - SubCommand::new("set-moderation-status") - .about("Sets the moderation status of one or more comments.") - .after_help("Sets the moderation status of one or more comments.") - .arg( - Arg::with_name("id") - .help("The id parameter specifies a comma-separated list of IDs of comments whose moderation status should be updated.") - .required(true) - .multiple(false)) - .arg( - Arg::with_name("moderation-status") - .help("Determines the new moderation status of the specified comments.") - .required(true) - .multiple(false)) - .arg( - Arg::with_name("v") - .short("p") - .help("Set various fields of the request structure") - .takes_value(true) - .required(false) - .multiple(true)) - ) - .subcommand( - SubCommand::new("update") - .about("Modifies an existing comment.") - .after_help("Modifies an existing comment.") - .arg( - Arg::with_name("kv") - .short("r") - .help("Set various fields of the request structure") - .takes_value(true) - .required(true) - .multiple(true)) - .arg( - Arg::with_name("v") - .short("p") - .help("Set various fields of the request structure") - .takes_value(true) - .required(false) - .multiple(true)) - .arg( - Arg::with_name("") - .short("o") - .help("Specify the file into which to write the programs output") - .takes_value(true) - .required(false) - .multiple(false)) - ) - ) - .subcommand( - SubCommand::new("guide-categories") - .subcommand( - SubCommand::new("list") - .about("Returns a list of categories that can be associated with YouTube channels.") - .after_help("Returns a list of categories that can be associated with YouTube channels.") - .arg( - Arg::with_name("part") - .help("The part parameter specifies a comma-separated list of one or more guideCategory resource properties that the API response will include. The part names that you can include in the parameter value are id and snippet. - - If the parameter identifies a property that contains child properties, the child properties will be included in the response. For example, in a guideCategory resource, the snippet property contains other properties, such as the category's title. If you set part=snippet, the API response will also contain all of those nested properties.") - .required(true) - .multiple(false)) - .arg( - Arg::with_name("v") - .short("p") - .help("Set various fields of the request structure") - .takes_value(true) - .required(false) - .multiple(true)) - .arg( - Arg::with_name("") - .short("o") - .help("Specify the file into which to write the programs output") - .takes_value(true) - .required(false) - .multiple(false)) - ) - ) - .subcommand( - SubCommand::new("i18n-languages") - .subcommand( - SubCommand::new("list") - .about("Returns a list of supported languages.") - .after_help("Returns a list of supported languages.") - .arg( - Arg::with_name("part") - .help("The part parameter specifies a comma-separated list of one or more i18nLanguage resource properties that the API response will include. The part names that you can include in the parameter value are id and snippet.") - .required(true) - .multiple(false)) - .arg( - Arg::with_name("v") - .short("p") - .help("Set various fields of the request structure") - .takes_value(true) - .required(false) - .multiple(true)) - .arg( - Arg::with_name("") - .short("o") - .help("Specify the file into which to write the programs output") - .takes_value(true) - .required(false) - .multiple(false)) - ) - ) - .subcommand( - SubCommand::new("i18n-regions") - .subcommand( - SubCommand::new("list") - .about("Returns a list of supported regions.") - .after_help("Returns a list of supported regions.") - .arg( - Arg::with_name("part") - .help("The part parameter specifies a comma-separated list of one or more i18nRegion resource properties that the API response will include. The part names that you can include in the parameter value are id and snippet.") - .required(true) - .multiple(false)) - .arg( - Arg::with_name("v") - .short("p") - .help("Set various fields of the request structure") - .takes_value(true) - .required(false) - .multiple(true)) - .arg( - Arg::with_name("") - .short("o") - .help("Specify the file into which to write the programs output") - .takes_value(true) - .required(false) - .multiple(false)) - ) - ) - .subcommand( - SubCommand::new("live-broadcasts") - .subcommand( - SubCommand::new("bind") - .about("Binds a YouTube broadcast to a stream or removes an existing binding between a broadcast and a stream. A broadcast can only be bound to one video stream.") - .after_help("Binds a YouTube broadcast to a stream or removes an existing binding between a broadcast and a stream. A broadcast can only be bound to one video stream.") - .arg( - Arg::with_name("id") - .help("The id parameter specifies the unique ID of the broadcast that is being bound to a video stream.") - .required(true) - .multiple(false)) - .arg( - Arg::with_name("part") - .help("The part parameter specifies a comma-separated list of one or more liveBroadcast resource properties that the API response will include. The part names that you can include in the parameter value are id, snippet, contentDetails, and status.") - .required(true) - .multiple(false)) - .arg( - Arg::with_name("v") - .short("p") - .help("Set various fields of the request structure") - .takes_value(true) - .required(false) - .multiple(true)) - .arg( - Arg::with_name("") - .short("o") - .help("Specify the file into which to write the programs output") - .takes_value(true) - .required(false) - .multiple(false)) - ) - .subcommand( - SubCommand::new("control") - .about("Controls the settings for a slate that can be displayed in the broadcast stream.") - .after_help("Controls the settings for a slate that can be displayed in the broadcast stream.") - .arg( - Arg::with_name("id") - .help("The id parameter specifies the YouTube live broadcast ID that uniquely identifies the broadcast in which the slate is being updated.") - .required(true) - .multiple(false)) - .arg( - Arg::with_name("part") - .help("The part parameter specifies a comma-separated list of one or more liveBroadcast resource properties that the API response will include. The part names that you can include in the parameter value are id, snippet, contentDetails, and status.") - .required(true) - .multiple(false)) - .arg( - Arg::with_name("v") - .short("p") - .help("Set various fields of the request structure") - .takes_value(true) - .required(false) - .multiple(true)) - .arg( - Arg::with_name("") - .short("o") - .help("Specify the file into which to write the programs output") - .takes_value(true) - .required(false) - .multiple(false)) - ) - .subcommand( - SubCommand::new("delete") - .about("Deletes a broadcast.") - .after_help("Deletes a broadcast.") - .arg( - Arg::with_name("id") - .help("The id parameter specifies the YouTube live broadcast ID for the resource that is being deleted.") - .required(true) - .multiple(false)) - .arg( - Arg::with_name("v") - .short("p") - .help("Set various fields of the request structure") - .takes_value(true) - .required(false) - .multiple(true)) - ) - .subcommand( - SubCommand::new("insert") - .about("Creates a broadcast.") - .after_help("Creates a broadcast.") - .arg( - Arg::with_name("kv") - .short("r") - .help("Set various fields of the request structure") - .takes_value(true) - .required(true) - .multiple(true)) - .arg( - Arg::with_name("v") - .short("p") - .help("Set various fields of the request structure") - .takes_value(true) - .required(false) - .multiple(true)) - .arg( - Arg::with_name("") - .short("o") - .help("Specify the file into which to write the programs output") - .takes_value(true) - .required(false) - .multiple(false)) - ) - .subcommand( - SubCommand::new("list") - .about("Returns a list of YouTube broadcasts that match the API request parameters.") - .after_help("Returns a list of YouTube broadcasts that match the API request parameters.") - .arg( - Arg::with_name("part") - .help("The part parameter specifies a comma-separated list of one or more liveBroadcast resource properties that the API response will include. The part names that you can include in the parameter value are id, snippet, contentDetails, and status.") - .required(true) - .multiple(false)) - .arg( - Arg::with_name("v") - .short("p") - .help("Set various fields of the request structure") - .takes_value(true) - .required(false) - .multiple(true)) - .arg( - Arg::with_name("") - .short("o") - .help("Specify the file into which to write the programs output") - .takes_value(true) - .required(false) - .multiple(false)) - ) - .subcommand( - SubCommand::new("transition") - .about("Changes the status of a YouTube live broadcast and initiates any processes associated with the new status. For example, when you transition a broadcast's status to testing, YouTube starts to transmit video to that broadcast's monitor stream. Before calling this method, you should confirm that the value of the status.streamStatus property for the stream bound to your broadcast is active.") - .after_help("Changes the status of a YouTube live broadcast and initiates any processes associated with the new status. For example, when you transition a broadcast's status to testing, YouTube starts to transmit video to that broadcast's monitor stream. Before calling this method, you should confirm that the value of the status.streamStatus property for the stream bound to your broadcast is active.") - .arg( - Arg::with_name("broadcast-status") - .help("The broadcastStatus parameter identifies the state to which the broadcast is changing. Note that to transition a broadcast to either the testing or live state, the status.streamStatus must be active for the stream that the broadcast is bound to.") - .required(true) - .multiple(false)) - .arg( - Arg::with_name("id") - .help("The id parameter specifies the unique ID of the broadcast that is transitioning to another status.") - .required(true) - .multiple(false)) - .arg( - Arg::with_name("part") - .help("The part parameter specifies a comma-separated list of one or more liveBroadcast resource properties that the API response will include. The part names that you can include in the parameter value are id, snippet, contentDetails, and status.") - .required(true) - .multiple(false)) - .arg( - Arg::with_name("v") - .short("p") - .help("Set various fields of the request structure") - .takes_value(true) - .required(false) - .multiple(true)) - .arg( - Arg::with_name("") - .short("o") - .help("Specify the file into which to write the programs output") - .takes_value(true) - .required(false) - .multiple(false)) - ) - .subcommand( - SubCommand::new("update") - .about("Updates a broadcast. For example, you could modify the broadcast settings defined in the liveBroadcast resource's contentDetails object.") - .after_help("Updates a broadcast. For example, you could modify the broadcast settings defined in the liveBroadcast resource's contentDetails object.") - .arg( - Arg::with_name("kv") - .short("r") - .help("Set various fields of the request structure") - .takes_value(true) - .required(true) - .multiple(true)) - .arg( - Arg::with_name("v") - .short("p") - .help("Set various fields of the request structure") - .takes_value(true) - .required(false) - .multiple(true)) - .arg( - Arg::with_name("") - .short("o") - .help("Specify the file into which to write the programs output") - .takes_value(true) - .required(false) - .multiple(false)) - ) - ) - .subcommand( - SubCommand::new("live-streams") - .subcommand( - SubCommand::new("delete") - .about("Deletes a video stream.") - .after_help("Deletes a video stream.") - .arg( - Arg::with_name("id") - .help("The id parameter specifies the YouTube live stream ID for the resource that is being deleted.") - .required(true) - .multiple(false)) - .arg( - Arg::with_name("v") - .short("p") - .help("Set various fields of the request structure") - .takes_value(true) - .required(false) - .multiple(true)) - ) - .subcommand( - SubCommand::new("insert") - .about("Creates a video stream. The stream enables you to send your video to YouTube, which can then broadcast the video to your audience.") - .after_help("Creates a video stream. The stream enables you to send your video to YouTube, which can then broadcast the video to your audience.") - .arg( - Arg::with_name("kv") - .short("r") - .help("Set various fields of the request structure") - .takes_value(true) - .required(true) - .multiple(true)) - .arg( - Arg::with_name("v") - .short("p") - .help("Set various fields of the request structure") - .takes_value(true) - .required(false) - .multiple(true)) - .arg( - Arg::with_name("") - .short("o") - .help("Specify the file into which to write the programs output") - .takes_value(true) - .required(false) - .multiple(false)) - ) - .subcommand( - SubCommand::new("list") - .about("Returns a list of video streams that match the API request parameters.") - .after_help("Returns a list of video streams that match the API request parameters.") - .arg( - Arg::with_name("part") - .help("The part parameter specifies a comma-separated list of one or more liveStream resource properties that the API response will include. The part names that you can include in the parameter value are id, snippet, cdn, and status.") - .required(true) - .multiple(false)) - .arg( - Arg::with_name("v") - .short("p") - .help("Set various fields of the request structure") - .takes_value(true) - .required(false) - .multiple(true)) - .arg( - Arg::with_name("") - .short("o") - .help("Specify the file into which to write the programs output") - .takes_value(true) - .required(false) - .multiple(false)) - ) - .subcommand( - SubCommand::new("update") - .about("Updates a video stream. If the properties that you want to change cannot be updated, then you need to create a new stream with the proper settings.") - .after_help("Updates a video stream. If the properties that you want to change cannot be updated, then you need to create a new stream with the proper settings.") - .arg( - Arg::with_name("kv") - .short("r") - .help("Set various fields of the request structure") - .takes_value(true) - .required(true) - .multiple(true)) - .arg( - Arg::with_name("v") - .short("p") - .help("Set various fields of the request structure") - .takes_value(true) - .required(false) - .multiple(true)) - .arg( - Arg::with_name("") - .short("o") - .help("Specify the file into which to write the programs output") - .takes_value(true) - .required(false) - .multiple(false)) - ) - ) - .subcommand( - SubCommand::new("playlist-items") - .subcommand( - SubCommand::new("delete") - .about("Deletes a playlist item.") - .after_help("Deletes a playlist item.") - .arg( - Arg::with_name("id") - .help("The id parameter specifies the YouTube playlist item ID for the playlist item that is being deleted. In a playlistItem resource, the id property specifies the playlist item's ID.") - .required(true) - .multiple(false)) - .arg( - Arg::with_name("v") - .short("p") - .help("Set various fields of the request structure") - .takes_value(true) - .required(false) - .multiple(true)) - ) - .subcommand( - SubCommand::new("insert") - .about("Adds a resource to a playlist.") - .after_help("Adds a resource to a playlist.") - .arg( - Arg::with_name("kv") - .short("r") - .help("Set various fields of the request structure") - .takes_value(true) - .required(true) - .multiple(true)) - .arg( - Arg::with_name("v") - .short("p") - .help("Set various fields of the request structure") - .takes_value(true) - .required(false) - .multiple(true)) - .arg( - Arg::with_name("") - .short("o") - .help("Specify the file into which to write the programs output") - .takes_value(true) - .required(false) - .multiple(false)) - ) - .subcommand( - SubCommand::new("list") - .about("Returns a collection of playlist items that match the API request parameters. You can retrieve all of the playlist items in a specified playlist or retrieve one or more playlist items by their unique IDs.") - .after_help("Returns a collection of playlist items that match the API request parameters. You can retrieve all of the playlist items in a specified playlist or retrieve one or more playlist items by their unique IDs.") - .arg( - Arg::with_name("part") - .help("The part parameter specifies a comma-separated list of one or more playlistItem resource properties that the API response will include. The part names that you can include in the parameter value are id, snippet, contentDetails, and status. - - If the parameter identifies a property that contains child properties, the child properties will be included in the response. For example, in a playlistItem resource, the snippet property contains numerous fields, including the title, description, position, and resourceId properties. As such, if you set part=snippet, the API response will contain all of those properties.") - .required(true) - .multiple(false)) - .arg( - Arg::with_name("v") - .short("p") - .help("Set various fields of the request structure") - .takes_value(true) - .required(false) - .multiple(true)) - .arg( - Arg::with_name("") - .short("o") - .help("Specify the file into which to write the programs output") - .takes_value(true) - .required(false) - .multiple(false)) - ) - .subcommand( - SubCommand::new("update") - .about("Modifies a playlist item. For example, you could update the item's position in the playlist.") - .after_help("Modifies a playlist item. For example, you could update the item's position in the playlist.") - .arg( - Arg::with_name("kv") - .short("r") - .help("Set various fields of the request structure") - .takes_value(true) - .required(true) - .multiple(true)) - .arg( - Arg::with_name("v") - .short("p") - .help("Set various fields of the request structure") - .takes_value(true) - .required(false) - .multiple(true)) - .arg( - Arg::with_name("") - .short("o") - .help("Specify the file into which to write the programs output") - .takes_value(true) - .required(false) - .multiple(false)) - ) - ) - .subcommand( - SubCommand::new("playlists") - .subcommand( - SubCommand::new("delete") - .about("Deletes a playlist.") - .after_help("Deletes a playlist.") - .arg( - Arg::with_name("id") - .help("The id parameter specifies the YouTube playlist ID for the playlist that is being deleted. In a playlist resource, the id property specifies the playlist's ID.") - .required(true) - .multiple(false)) - .arg( - Arg::with_name("v") - .short("p") - .help("Set various fields of the request structure") - .takes_value(true) - .required(false) - .multiple(true)) - ) - .subcommand( - SubCommand::new("insert") - .about("Creates a playlist.") - .after_help("Creates a playlist.") - .arg( - Arg::with_name("kv") - .short("r") - .help("Set various fields of the request structure") - .takes_value(true) - .required(true) - .multiple(true)) - .arg( - Arg::with_name("v") - .short("p") - .help("Set various fields of the request structure") - .takes_value(true) - .required(false) - .multiple(true)) - .arg( - Arg::with_name("") - .short("o") - .help("Specify the file into which to write the programs output") - .takes_value(true) - .required(false) - .multiple(false)) - ) - .subcommand( - SubCommand::new("list") - .about("Returns a collection of playlists that match the API request parameters. For example, you can retrieve all playlists that the authenticated user owns, or you can retrieve one or more playlists by their unique IDs.") - .after_help("Returns a collection of playlists that match the API request parameters. For example, you can retrieve all playlists that the authenticated user owns, or you can retrieve one or more playlists by their unique IDs.") - .arg( - Arg::with_name("part") - .help("The part parameter specifies a comma-separated list of one or more playlist resource properties that the API response will include. The part names that you can include in the parameter value are id, snippet, status, and contentDetails. - - If the parameter identifies a property that contains child properties, the child properties will be included in the response. For example, in a playlist resource, the snippet property contains properties like author, title, description, tags, and timeCreated. As such, if you set part=snippet, the API response will contain all of those properties.") - .required(true) - .multiple(false)) - .arg( - Arg::with_name("v") - .short("p") - .help("Set various fields of the request structure") - .takes_value(true) - .required(false) - .multiple(true)) - .arg( - Arg::with_name("") - .short("o") - .help("Specify the file into which to write the programs output") - .takes_value(true) - .required(false) - .multiple(false)) - ) - .subcommand( - SubCommand::new("update") - .about("Modifies a playlist. For example, you could change a playlist's title, description, or privacy status.") - .after_help("Modifies a playlist. For example, you could change a playlist's title, description, or privacy status.") - .arg( - Arg::with_name("kv") - .short("r") - .help("Set various fields of the request structure") - .takes_value(true) - .required(true) - .multiple(true)) - .arg( - Arg::with_name("v") - .short("p") - .help("Set various fields of the request structure") - .takes_value(true) - .required(false) - .multiple(true)) - .arg( - Arg::with_name("") - .short("o") - .help("Specify the file into which to write the programs output") - .takes_value(true) - .required(false) - .multiple(false)) - ) - ) - .subcommand( - SubCommand::new("search") - .subcommand( - SubCommand::new("list") - .about("Returns a collection of search results that match the query parameters specified in the API request. By default, a search result set identifies matching video, channel, and playlist resources, but you can also configure queries to only retrieve a specific type of resource.") - .after_help("Returns a collection of search results that match the query parameters specified in the API request. By default, a search result set identifies matching video, channel, and playlist resources, but you can also configure queries to only retrieve a specific type of resource.") - .arg( - Arg::with_name("part") - .help("The part parameter specifies a comma-separated list of one or more search resource properties that the API response will include. The part names that you can include in the parameter value are id and snippet. - - If the parameter identifies a property that contains child properties, the child properties will be included in the response. For example, in a search result, the snippet property contains other properties that identify the result's title, description, and so forth. If you set part=snippet, the API response will also contain all of those nested properties.") - .required(true) - .multiple(false)) - .arg( - Arg::with_name("v") - .short("p") - .help("Set various fields of the request structure") - .takes_value(true) - .required(false) - .multiple(true)) - .arg( - Arg::with_name("") - .short("o") - .help("Specify the file into which to write the programs output") - .takes_value(true) - .required(false) - .multiple(false)) - ) - ) - .subcommand( - SubCommand::new("subscriptions") - .subcommand( - SubCommand::new("delete") - .about("Deletes a subscription.") - .after_help("Deletes a subscription.") - .arg( - Arg::with_name("id") - .help("The id parameter specifies the YouTube subscription ID for the resource that is being deleted. In a subscription resource, the id property specifies the YouTube subscription ID.") - .required(true) - .multiple(false)) - .arg( - Arg::with_name("v") - .short("p") - .help("Set various fields of the request structure") - .takes_value(true) - .required(false) - .multiple(true)) - ) - .subcommand( - SubCommand::new("insert") - .about("Adds a subscription for the authenticated user's channel.") - .after_help("Adds a subscription for the authenticated user's channel.") - .arg( - Arg::with_name("kv") - .short("r") - .help("Set various fields of the request structure") - .takes_value(true) - .required(true) - .multiple(true)) - .arg( - Arg::with_name("v") - .short("p") - .help("Set various fields of the request structure") - .takes_value(true) - .required(false) - .multiple(true)) - .arg( - Arg::with_name("") - .short("o") - .help("Specify the file into which to write the programs output") - .takes_value(true) - .required(false) - .multiple(false)) - ) - .subcommand( - SubCommand::new("list") - .about("Returns subscription resources that match the API request criteria.") - .after_help("Returns subscription resources that match the API request criteria.") - .arg( - Arg::with_name("part") - .help("The part parameter specifies a comma-separated list of one or more subscription resource properties that the API response will include. The part names that you can include in the parameter value are id, snippet, and contentDetails. - - If the parameter identifies a property that contains child properties, the child properties will be included in the response. For example, in a subscription resource, the snippet property contains other properties, such as a display title for the subscription. If you set part=snippet, the API response will also contain all of those nested properties.") - .required(true) - .multiple(false)) - .arg( - Arg::with_name("v") - .short("p") - .help("Set various fields of the request structure") - .takes_value(true) - .required(false) - .multiple(true)) - .arg( - Arg::with_name("") - .short("o") - .help("Specify the file into which to write the programs output") - .takes_value(true) - .required(false) - .multiple(false)) - ) - ) - .subcommand( - SubCommand::new("thumbnails") - .subcommand( - SubCommand::new("set") - .about("Uploads a custom video thumbnail to YouTube and sets it for a video.") - .after_help("Uploads a custom video thumbnail to YouTube and sets it for a video.") - .arg( - Arg::with_name("video-id") - .help("The videoId parameter specifies a YouTube video ID for which the custom video thumbnail is being provided.") - .required(true) - .multiple(false)) - .arg( - Arg::with_name("mode") - .short("u") - .help("Specify which file to upload") - .takes_value(true) - .required(true) - .multiple(true)) - .arg( - Arg::with_name("v") - .short("p") - .help("Set various fields of the request structure") - .takes_value(true) - .required(false) - .multiple(true)) - .arg( - Arg::with_name("") - .short("o") - .help("Specify the file into which to write the programs output") - .takes_value(true) - .required(false) - .multiple(false)) - ) - ) - .subcommand( - SubCommand::new("video-abuse-report-reasons") - .subcommand( - SubCommand::new("list") - .about("Returns a list of abuse reasons that can be used for reporting abusive videos.") - .after_help("Returns a list of abuse reasons that can be used for reporting abusive videos.") - .arg( - Arg::with_name("part") - .help("The part parameter specifies the videoCategory resource parts that the API response will include. Supported values are id and snippet.") - .required(true) - .multiple(false)) - .arg( - Arg::with_name("v") - .short("p") - .help("Set various fields of the request structure") - .takes_value(true) - .required(false) - .multiple(true)) - .arg( - Arg::with_name("") - .short("o") - .help("Specify the file into which to write the programs output") - .takes_value(true) - .required(false) - .multiple(false)) - ) - ) - .subcommand( - SubCommand::new("video-categories") - .subcommand( - SubCommand::new("list") - .about("Returns a list of categories that can be associated with YouTube videos.") - .after_help("Returns a list of categories that can be associated with YouTube videos.") - .arg( - Arg::with_name("part") - .help("The part parameter specifies the videoCategory resource parts that the API response will include. Supported values are id and snippet.") - .required(true) - .multiple(false)) - .arg( - Arg::with_name("v") - .short("p") - .help("Set various fields of the request structure") - .takes_value(true) - .required(false) - .multiple(true)) - .arg( - Arg::with_name("") - .short("o") - .help("Specify the file into which to write the programs output") - .takes_value(true) - .required(false) - .multiple(false)) - ) - ) - .subcommand( - SubCommand::new("videos") - .subcommand( - SubCommand::new("delete") - .about("Deletes a YouTube video.") - .after_help("Deletes a YouTube video.") - .arg( - Arg::with_name("id") - .help("The id parameter specifies the YouTube video ID for the resource that is being deleted. In a video resource, the id property specifies the video's ID.") - .required(true) - .multiple(false)) - .arg( - Arg::with_name("v") - .short("p") - .help("Set various fields of the request structure") - .takes_value(true) - .required(false) - .multiple(true)) - ) - .subcommand( - SubCommand::new("get-rating") - .about("Retrieves the ratings that the authorized user gave to a list of specified videos.") - .after_help("Retrieves the ratings that the authorized user gave to a list of specified videos.") - .arg( - Arg::with_name("id") - .help("The id parameter specifies a comma-separated list of the YouTube video ID(s) for the resource(s) for which you are retrieving rating data. In a video resource, the id property specifies the video's ID.") - .required(true) - .multiple(false)) - .arg( - Arg::with_name("v") - .short("p") - .help("Set various fields of the request structure") - .takes_value(true) - .required(false) - .multiple(true)) - .arg( - Arg::with_name("") - .short("o") - .help("Specify the file into which to write the programs output") - .takes_value(true) - .required(false) - .multiple(false)) - ) - .subcommand( - SubCommand::new("insert") - .about("Uploads a video to YouTube and optionally sets the video's metadata.") - .after_help("Uploads a video to YouTube and optionally sets the video's metadata.") - .arg( - Arg::with_name("kv") - .short("r") - .help("Set various fields of the request structure") - .takes_value(true) - .required(true) - .multiple(true)) - .arg( - Arg::with_name("mode") - .short("u") - .help("Specify which file to upload") - .takes_value(true) - .required(true) - .multiple(true)) - .arg( - Arg::with_name("v") - .short("p") - .help("Set various fields of the request structure") - .takes_value(true) - .required(false) - .multiple(true)) - .arg( - Arg::with_name("") - .short("o") - .help("Specify the file into which to write the programs output") - .takes_value(true) - .required(false) - .multiple(false)) - ) - .subcommand( - SubCommand::new("list") - .about("Returns a list of videos that match the API request parameters.") - .after_help("Returns a list of videos that match the API request parameters.") - .arg( - Arg::with_name("part") - .help("The part parameter specifies a comma-separated list of one or more video resource properties that the API response will include. The part names that you can include in the parameter value are id, snippet, contentDetails, fileDetails, liveStreamingDetails, localizations, player, processingDetails, recordingDetails, statistics, status, suggestions, and topicDetails. - - If the parameter identifies a property that contains child properties, the child properties will be included in the response. For example, in a video resource, the snippet property contains the channelId, title, description, tags, and categoryId properties. As such, if you set part=snippet, the API response will contain all of those properties.") - .required(true) - .multiple(false)) - .arg( - Arg::with_name("v") - .short("p") - .help("Set various fields of the request structure") - .takes_value(true) - .required(false) - .multiple(true)) - .arg( - Arg::with_name("") - .short("o") - .help("Specify the file into which to write the programs output") - .takes_value(true) - .required(false) - .multiple(false)) - ) - .subcommand( - SubCommand::new("rate") - .about("Add a like or dislike rating to a video or remove a rating from a video.") - .after_help("Add a like or dislike rating to a video or remove a rating from a video.") - .arg( - Arg::with_name("id") - .help("The id parameter specifies the YouTube video ID of the video that is being rated or having its rating removed.") - .required(true) - .multiple(false)) - .arg( - Arg::with_name("rating") - .help("Specifies the rating to record.") - .required(true) - .multiple(false)) - .arg( - Arg::with_name("v") - .short("p") - .help("Set various fields of the request structure") - .takes_value(true) - .required(false) - .multiple(true)) - ) - .subcommand( - SubCommand::new("report-abuse") - .about("Report abuse for a video.") - .after_help("Report abuse for a video.") - .arg( - Arg::with_name("kv") - .short("r") - .help("Set various fields of the request structure") - .takes_value(true) - .required(true) - .multiple(true)) - .arg( - Arg::with_name("v") - .short("p") - .help("Set various fields of the request structure") - .takes_value(true) - .required(false) - .multiple(true)) - ) - .subcommand( - SubCommand::new("update") - .about("Updates a video's metadata.") - .after_help("Updates a video's metadata.") - .arg( - Arg::with_name("kv") - .short("r") - .help("Set various fields of the request structure") - .takes_value(true) - .required(true) - .multiple(true)) - .arg( - Arg::with_name("v") - .short("p") - .help("Set various fields of the request structure") - .takes_value(true) - .required(false) - .multiple(true)) - .arg( - Arg::with_name("") - .short("o") - .help("Specify the file into which to write the programs output") - .takes_value(true) - .required(false) - .multiple(false)) - ) - ) - .subcommand( - SubCommand::new("watermarks") - .subcommand( - SubCommand::new("set") - .about("Uploads a watermark image to YouTube and sets it for a channel.") - .after_help("Uploads a watermark image to YouTube and sets it for a channel.") - .arg( - Arg::with_name("channel-id") - .help("The channelId parameter specifies a YouTube channel ID for which the watermark is being provided.") - .required(true) - .multiple(false)) - .arg( - Arg::with_name("kv") - .short("r") - .help("Set various fields of the request structure") - .takes_value(true) - .required(true) - .multiple(true)) - .arg( - Arg::with_name("mode") - .short("u") - .help("Specify which file to upload") - .takes_value(true) - .required(true) - .multiple(true)) - .arg( - Arg::with_name("v") - .short("p") - .help("Set various fields of the request structure") - .takes_value(true) - .required(false) - .multiple(true)) - ) - .subcommand( - SubCommand::new("unset") - .about("Deletes a watermark.") - .after_help("Deletes a watermark.") - .arg( - Arg::with_name("channel-id") - .help("The channelId parameter specifies a YouTube channel ID for which the watermark is being unset.") - .required(true) - .multiple(false)) - .arg( - Arg::with_name("v") - .short("p") - .help("Set various fields of the request structure") - .takes_value(true) - .required(false) - .multiple(true)) - ) - ) - .get_matches(); - - + let matches = app.get_matches(); + + let debug = matches.is_present("debug"); + match Engine::new(matches) { + Err(err) => { + env::set_exit_status(err.exit_code); + writeln!(io::stderr(), "{}", err).ok(); + }, + Ok(engine) => { + if let Err(doit_err) = engine.doit() { + env::set_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(); + } + } + } + } + } + } } \ No newline at end of file diff --git a/gen/youtube3/README.md b/gen/youtube3/README.md index 2e8ceeb4ca..bb86b7dcfb 100644 --- a/gen/youtube3/README.md +++ b/gen/youtube3/README.md @@ -5,7 +5,7 @@ DO NOT EDIT ! --> The `google-youtube3` library allows access to all features of the *Google YouTube* service. -This documentation was generated from *YouTube* crate version *0.1.6+20150414*, where *20150414* is the exact revision of the *youtube:v3* schema built by the [mako](http://www.makotemplates.org/) code generator *v0.1.6*. +This documentation was generated from *YouTube* crate version *0.1.7+20150414*, where *20150414* is the exact revision of the *youtube:v3* schema built by the [mako](http://www.makotemplates.org/) code generator *v0.1.7*. Everything else about the *YouTube* *v3* API can be found at the [official documentation site](https://developers.google.com/youtube/v3). diff --git a/gen/youtube3/cargo.toml b/gen/youtube3/cargo.toml index e67d792cab..16da8ddc46 100644 --- a/gen/youtube3/cargo.toml +++ b/gen/youtube3/cargo.toml @@ -4,7 +4,7 @@ [package] name = "google-youtube3" -version = "0.1.6+20150414" +version = "0.1.7+20150414" authors = ["Sebastian Thiel "] description = "A complete library to interact with YouTube (protocol v3)" repository = "https://github.com/Byron/google-apis-rs/tree/master/gen/youtube3" diff --git a/gen/youtube3/src/cmn.rs b/gen/youtube3/src/cmn.rs index b7665b194b..b65c5301bb 100644 --- a/gen/youtube3/src/cmn.rs +++ b/gen/youtube3/src/cmn.rs @@ -173,7 +173,10 @@ pub trait Delegate { /// Called after we have retrieved a new upload URL for a resumable upload to store it /// in case we fail or cancel. That way, we can attempt to resume the upload later, /// see `upload_url()`. - fn store_upload_url(&mut self, url: &str) { + /// It will also be called with None after a successful upload, which allows the delegate + /// to forget the URL. That way, we will not attempt to resume an upload that has already + /// finished. + fn store_upload_url(&mut self, url: Option<&str>) { let _ = url; } @@ -459,6 +462,16 @@ impl<'a> Read for MultiPartReader<'a> { header!{ #[doc="The `X-Upload-Content-Type` header."] (XUploadContentType, "X-Upload-Content-Type") => [Mime] + + xupload_content_type { + test_header!( + test1, + vec![b"text/plain"], + Some(HeaderField( + vec![Mime(TopLevel::Text, SubLevel::Plain, Vec::new())] + ))); + + } } #[derive(Clone, PartialEq, Debug)] diff --git a/gen/youtube3/src/lib.rs b/gen/youtube3/src/lib.rs index 5cbc95f436..392e7ad07c 100644 --- a/gen/youtube3/src/lib.rs +++ b/gen/youtube3/src/lib.rs @@ -2,7 +2,7 @@ // This file was generated automatically from 'src/mako/api/lib.rs.mako' // DO NOT EDIT ! -//! This documentation was generated from *YouTube* crate version *0.1.6+20150414*, where *20150414* is the exact revision of the *youtube:v3* schema built by the [mako](http://www.makotemplates.org/) code generator *v0.1.6*. +//! This documentation was generated from *YouTube* crate version *0.1.7+20150414*, where *20150414* is the exact revision of the *youtube:v3* schema built by the [mako](http://www.makotemplates.org/) code generator *v0.1.7*. //! //! Everything else about the *YouTube* *v3* API can be found at the //! [official documentation site](https://developers.google.com/youtube/v3). @@ -240,7 +240,6 @@ //! [google-go-api]: https://github.com/google/google-api-go-client //! //! -#![feature(std_misc)] // Unused attributes happen thanks to defined, but unused structures // We don't warn about this, as depending on the API, some data structures or facilities are never used. // Instead of pre-determining this, we just disable the lint. It's manually tuned to not have any @@ -402,7 +401,7 @@ impl<'a, C, A> YouTube YouTube { client: RefCell::new(client), auth: RefCell::new(authenticator), - _user_agent: "google-api-rust-client/0.1.6".to_string(), + _user_agent: "google-api-rust-client/0.1.7".to_string(), } } @@ -471,7 +470,7 @@ impl<'a, C, A> YouTube } /// Set the user-agent header field to use in all requests to the server. - /// It defaults to `google-api-rust-client/0.1.6`. + /// It defaults to `google-api-rust-client/0.1.7`. /// /// Returns the previously set user-agent. pub fn user_agent(&mut self, agent_name: String) -> String { @@ -7577,7 +7576,7 @@ impl<'a, C, A> ChannelBannerInsertCall<'a, C, A> where C: BorrowMut().expect("Location header is part of protocol").0; if upload_url_from_server { - dlg.store_upload_url(url_str); + dlg.store_upload_url(Some(url_str)); } cmn::ResumableUploadHelper { @@ -7605,6 +7604,7 @@ impl<'a, C, A> ChannelBannerInsertCall<'a, C, A> where C: BorrowMut { res = upload_result; if !res.status.is_success() { + dlg.store_upload_url(None); dlg.finished(false); return Err(Error::Failure(res)) } @@ -10458,7 +10458,7 @@ impl<'a, C, A> ThumbnailSetCall<'a, C, A> where C: BorrowMut, A: let upload_result = { let url_str = &res.headers.get::().expect("Location header is part of protocol").0; if upload_url_from_server { - dlg.store_upload_url(url_str); + dlg.store_upload_url(Some(url_str)); } cmn::ResumableUploadHelper { @@ -10486,6 +10486,7 @@ impl<'a, C, A> ThumbnailSetCall<'a, C, A> where C: BorrowMut, A: Some(Ok(upload_result)) => { res = upload_result; if !res.status.is_success() { + dlg.store_upload_url(None); dlg.finished(false); return Err(Error::Failure(res)) } @@ -12502,7 +12503,7 @@ impl<'a, C, A> VideoInsertCall<'a, C, A> where C: BorrowMut, A: o let upload_result = { let url_str = &res.headers.get::().expect("Location header is part of protocol").0; if upload_url_from_server { - dlg.store_upload_url(url_str); + dlg.store_upload_url(Some(url_str)); } cmn::ResumableUploadHelper { @@ -12530,6 +12531,7 @@ impl<'a, C, A> VideoInsertCall<'a, C, A> where C: BorrowMut, A: o Some(Ok(upload_result)) => { res = upload_result; if !res.status.is_success() { + dlg.store_upload_url(None); dlg.finished(false); return Err(Error::Failure(res)) } @@ -20182,7 +20184,7 @@ impl<'a, C, A> WatermarkSetCall<'a, C, A> where C: BorrowMut, A: let upload_result = { let url_str = &res.headers.get::().expect("Location header is part of protocol").0; if upload_url_from_server { - dlg.store_upload_url(url_str); + dlg.store_upload_url(Some(url_str)); } cmn::ResumableUploadHelper { @@ -20210,6 +20212,7 @@ impl<'a, C, A> WatermarkSetCall<'a, C, A> where C: BorrowMut, A: Some(Ok(upload_result)) => { res = upload_result; if !res.status.is_success() { + dlg.store_upload_url(None); dlg.finished(false); return Err(Error::Failure(res)) } @@ -23087,7 +23090,7 @@ impl<'a, C, A> CaptionInsertCall<'a, C, A> where C: BorrowMut, A: let upload_result = { let url_str = &res.headers.get::().expect("Location header is part of protocol").0; if upload_url_from_server { - dlg.store_upload_url(url_str); + dlg.store_upload_url(Some(url_str)); } cmn::ResumableUploadHelper { @@ -23115,6 +23118,7 @@ impl<'a, C, A> CaptionInsertCall<'a, C, A> where C: BorrowMut, A: Some(Ok(upload_result)) => { res = upload_result; if !res.status.is_success() { + dlg.store_upload_url(None); dlg.finished(false); return Err(Error::Failure(res)) } @@ -24044,7 +24048,7 @@ impl<'a, C, A> CaptionUpdateCall<'a, C, A> where C: BorrowMut, A: let upload_result = { let url_str = &res.headers.get::().expect("Location header is part of protocol").0; if upload_url_from_server { - dlg.store_upload_url(url_str); + dlg.store_upload_url(Some(url_str)); } cmn::ResumableUploadHelper { @@ -24072,6 +24076,7 @@ impl<'a, C, A> CaptionUpdateCall<'a, C, A> where C: BorrowMut, A: Some(Ok(upload_result)) => { res = upload_result; if !res.status.is_success() { + dlg.store_upload_url(None); dlg.finished(false); return Err(Error::Failure(res)) }