fix(CLI): added latest reference CLI code

Just to have something to link to
This commit is contained in:
Sebastian Thiel
2015-05-02 10:22:55 +02:00
parent 89432cc646
commit d2a4e2ff8b
26 changed files with 16333 additions and 4482 deletions

View File

@@ -4,7 +4,7 @@
[package] [package]
name = "google-drive2-cli" name = "google-drive2-cli"
version = "0.1.0+20150326" version = "0.2.0+20150326"
authors = ["Sebastian Thiel <byronimo@gmail.com>"] authors = ["Sebastian Thiel <byronimo@gmail.com>"]
description = "A complete library to interact with drive (protocol v2)" description = "A complete library to interact with drive (protocol v2)"
repository = "https://github.com/Byron/google-apis-rs/tree/master/gen/drive2-cli" repository = "https://github.com/Byron/google-apis-rs/tree/master/gen/drive2-cli"
@@ -20,9 +20,7 @@ name = "drive2"
hyper = "*" hyper = "*"
mime = "*" mime = "*"
yup-oauth2 = "*" yup-oauth2 = "*"
docopt = "*" clap = "*"
docopt_macros = "*"
rustc-serialize = "*"
yup-hyper-mock = "*" yup-hyper-mock = "*"
serde = ">= 0.3.0" serde = ">= 0.3.0"
serde_macros = "*" serde_macros = "*"

View File

@@ -10,77 +10,94 @@ 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. 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 # 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 ```bash
drive2 [options] about get [-p <v>...] [-o <out>] drive2 [options]
drive2 [options] apps get <app-id> [-p <v>...] [-o <out>] about
drive2 [options] apps list [-p <v>...] [-o <out>] get [-p <v>]... [-o <out>]
drive2 [options] changes get <change-id> [-p <v>...] [-o <out>] apps
drive2 [options] changes list [-p <v>...] [-o <out>] get <app-id> [-p <v>]... [-o <out>]
drive2 [options] changes watch -r <kv>... [-p <v>...] [-o <out>] list [-p <v>]... [-o <out>]
drive2 [options] channels stop -r <kv>... [-p <v>...] changes
drive2 [options] children delete <folder-id> <child-id> [-p <v>...] get <change-id> [-p <v>]... [-o <out>]
drive2 [options] children get <folder-id> <child-id> [-p <v>...] [-o <out>] list [-p <v>]... [-o <out>]
drive2 [options] children insert <folder-id> -r <kv>... [-p <v>...] [-o <out>] watch (-r <kv>)... [-p <v>]... [-o <out>]
drive2 [options] children list <folder-id> [-p <v>...] [-o <out>] channels
drive2 [options] comments delete <file-id> <comment-id> [-p <v>...] stop (-r <kv>)... [-p <v>]...
drive2 [options] comments get <file-id> <comment-id> [-p <v>...] [-o <out>] children
drive2 [options] comments insert <file-id> -r <kv>... [-p <v>...] [-o <out>] delete <folder-id> <child-id> [-p <v>]...
drive2 [options] comments list <file-id> [-p <v>...] [-o <out>] get <folder-id> <child-id> [-p <v>]... [-o <out>]
drive2 [options] comments patch <file-id> <comment-id> -r <kv>... [-p <v>...] [-o <out>] insert <folder-id> (-r <kv>)... [-p <v>]... [-o <out>]
drive2 [options] comments update <file-id> <comment-id> -r <kv>... [-p <v>...] [-o <out>] list <folder-id> [-p <v>]... [-o <out>]
drive2 [options] files copy <file-id> -r <kv>... [-p <v>...] [-o <out>] comments
drive2 [options] files delete <file-id> [-p <v>...] delete <file-id> <comment-id> [-p <v>]...
drive2 [options] files empty-trash [-p <v>...] get <file-id> <comment-id> [-p <v>]... [-o <out>]
drive2 [options] files get <file-id> [-p <v>...] [-o <out>] insert <file-id> (-r <kv>)... [-p <v>]... [-o <out>]
drive2 [options] files insert -r <kv>... -u (simple|resumable) <file> <mime> [-p <v>...] [-o <out>] list <file-id> [-p <v>]... [-o <out>]
drive2 [options] files list [-p <v>...] [-o <out>] patch <file-id> <comment-id> (-r <kv>)... [-p <v>]... [-o <out>]
drive2 [options] files patch <file-id> -r <kv>... [-p <v>...] [-o <out>] update <file-id> <comment-id> (-r <kv>)... [-p <v>]... [-o <out>]
drive2 [options] files touch <file-id> [-p <v>...] [-o <out>] files
drive2 [options] files trash <file-id> [-p <v>...] [-o <out>] copy <file-id> (-r <kv>)... [-p <v>]... [-o <out>]
drive2 [options] files untrash <file-id> [-p <v>...] [-o <out>] delete <file-id> [-p <v>]...
drive2 [options] files update <file-id> -r <kv>... -u (simple|resumable) <file> <mime> [-p <v>...] [-o <out>] empty-trash [-p <v>]...
drive2 [options] files watch <file-id> -r <kv>... [-p <v>...] [-o <out>] get <file-id> [-p <v>]... [-o <out>]
drive2 [options] parents delete <file-id> <parent-id> [-p <v>...] insert (-r <kv>)... (-u (simple|resumable) -f <file> [-m <mime>]) [-p <v>]... [-o <out>]
drive2 [options] parents get <file-id> <parent-id> [-p <v>...] [-o <out>] list [-p <v>]... [-o <out>]
drive2 [options] parents insert <file-id> -r <kv>... [-p <v>...] [-o <out>] patch <file-id> (-r <kv>)... [-p <v>]... [-o <out>]
drive2 [options] parents list <file-id> [-p <v>...] [-o <out>] touch <file-id> [-p <v>]... [-o <out>]
drive2 [options] permissions delete <file-id> <permission-id> [-p <v>...] trash <file-id> [-p <v>]... [-o <out>]
drive2 [options] permissions get <file-id> <permission-id> [-p <v>...] [-o <out>] untrash <file-id> [-p <v>]... [-o <out>]
drive2 [options] permissions get-id-for-email <email> [-p <v>...] [-o <out>] update <file-id> (-r <kv>)... (-u (simple|resumable) -f <file> [-m <mime>]) [-p <v>]... [-o <out>]
drive2 [options] permissions insert <file-id> -r <kv>... [-p <v>...] [-o <out>] watch <file-id> (-r <kv>)... [-p <v>]... [-o <out>]
drive2 [options] permissions list <file-id> [-p <v>...] [-o <out>] parents
drive2 [options] permissions patch <file-id> <permission-id> -r <kv>... [-p <v>...] [-o <out>] delete <file-id> <parent-id> [-p <v>]...
drive2 [options] permissions update <file-id> <permission-id> -r <kv>... [-p <v>...] [-o <out>] get <file-id> <parent-id> [-p <v>]... [-o <out>]
drive2 [options] properties delete <file-id> <property-key> [-p <v>...] insert <file-id> (-r <kv>)... [-p <v>]... [-o <out>]
drive2 [options] properties get <file-id> <property-key> [-p <v>...] [-o <out>] list <file-id> [-p <v>]... [-o <out>]
drive2 [options] properties insert <file-id> -r <kv>... [-p <v>...] [-o <out>] permissions
drive2 [options] properties list <file-id> [-p <v>...] [-o <out>] delete <file-id> <permission-id> [-p <v>]...
drive2 [options] properties patch <file-id> <property-key> -r <kv>... [-p <v>...] [-o <out>] get <file-id> <permission-id> [-p <v>]... [-o <out>]
drive2 [options] properties update <file-id> <property-key> -r <kv>... [-p <v>...] [-o <out>] get-id-for-email <email> [-p <v>]... [-o <out>]
drive2 [options] realtime get <file-id> [-p <v>...] [-o <out>] insert <file-id> (-r <kv>)... [-p <v>]... [-o <out>]
drive2 [options] realtime update <file-id> -u (simple|resumable) <file> <mime> [-p <v>...] list <file-id> [-p <v>]... [-o <out>]
drive2 [options] replies delete <file-id> <comment-id> <reply-id> [-p <v>...] patch <file-id> <permission-id> (-r <kv>)... [-p <v>]... [-o <out>]
drive2 [options] replies get <file-id> <comment-id> <reply-id> [-p <v>...] [-o <out>] update <file-id> <permission-id> (-r <kv>)... [-p <v>]... [-o <out>]
drive2 [options] replies insert <file-id> <comment-id> -r <kv>... [-p <v>...] [-o <out>] properties
drive2 [options] replies list <file-id> <comment-id> [-p <v>...] [-o <out>] delete <file-id> <property-key> [-p <v>]...
drive2 [options] replies patch <file-id> <comment-id> <reply-id> -r <kv>... [-p <v>...] [-o <out>] get <file-id> <property-key> [-p <v>]... [-o <out>]
drive2 [options] replies update <file-id> <comment-id> <reply-id> -r <kv>... [-p <v>...] [-o <out>] insert <file-id> (-r <kv>)... [-p <v>]... [-o <out>]
drive2 [options] revisions delete <file-id> <revision-id> [-p <v>...] list <file-id> [-p <v>]... [-o <out>]
drive2 [options] revisions get <file-id> <revision-id> [-p <v>...] [-o <out>] patch <file-id> <property-key> (-r <kv>)... [-p <v>]... [-o <out>]
drive2 [options] revisions list <file-id> [-p <v>...] [-o <out>] update <file-id> <property-key> (-r <kv>)... [-p <v>]... [-o <out>]
drive2 [options] revisions patch <file-id> <revision-id> -r <kv>... [-p <v>...] [-o <out>] realtime
drive2 [options] revisions update <file-id> <revision-id> -r <kv>... [-p <v>...] [-o <out>] get <file-id> [-p <v>]... [-o <out>]
update <file-id> (-u (simple|resumable) -f <file> [-m <mime>]) [-p <v>]...
replies
delete <file-id> <comment-id> <reply-id> [-p <v>]...
get <file-id> <comment-id> <reply-id> [-p <v>]... [-o <out>]
insert <file-id> <comment-id> (-r <kv>)... [-p <v>]... [-o <out>]
list <file-id> <comment-id> [-p <v>]... [-o <out>]
patch <file-id> <comment-id> <reply-id> (-r <kv>)... [-p <v>]... [-o <out>]
update <file-id> <comment-id> <reply-id> (-r <kv>)... [-p <v>]... [-o <out>]
revisions
delete <file-id> <revision-id> [-p <v>]...
get <file-id> <revision-id> [-p <v>]... [-o <out>]
list <file-id> [-p <v>]... [-o <out>]
patch <file-id> <revision-id> (-r <kv>)... [-p <v>]... [-o <out>]
update <file-id> <revision-id> (-r <kv>)... [-p <v>]... [-o <out>]
drive2 --help drive2 --help
All documentation details can be found at 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: Configuration:
--scope <url> [--scope <url>]...
Specify the authentication a method should be executed in. Each 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. If unset, it defaults to the shortest scope url for a particular method.

View File

@@ -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_url: http://byron.github.io/google-apis-rs/google-drive2-cli
site_description: Write integrating applications with bcore site_description: Write integrating applications with bcore

View File

@@ -1,8 +1,9 @@
// COPY OF 'src/rust/cli/cmn.rs' // COPY OF 'src/rust/cli/cmn.rs'
// DO NOT EDIT // DO NOT EDIT
use oauth2::{ApplicationSecret, ConsoleApplicationSecret, TokenStorage, Token}; use oauth2::{ApplicationSecret, ConsoleApplicationSecret, TokenStorage, Token};
use rustc_serialize::json; use serde::json;
use mime::Mime; use mime::Mime;
use clap::{App, SubCommand};
use std::fs; use std::fs;
use std::env; use std::env;
@@ -17,6 +18,46 @@ use std::default::Default;
const FIELD_SEP: char = '.'; const FIELD_SEP: char = '.';
pub enum CallType {
Upload(UploadProtocol),
Standard,
}
pub enum UploadProtocol {
Simple,
Resumable,
}
impl AsRef<str> for UploadProtocol {
fn as_ref(&self) -> &str {
match *self {
UploadProtocol::Simple => "simple",
UploadProtocol::Resumable => "resumable"
}
}
}
impl AsRef<str> 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<UploadProtocol, String> {
match s {
"simple" => Ok(UploadProtocol::Simple),
"resumable" => Ok(UploadProtocol::Resumable),
_ => Err(format!("Protocol '{}' is unknown", s)),
}
}
}
#[derive(Clone, Default)] #[derive(Clone, Default)]
pub struct FieldCursor(Vec<String>); pub struct FieldCursor(Vec<String>);
@@ -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<String>, err: &mut InvalidOptionsError) -> CallType {
CallType::Upload(
match UploadProtocol::from_str(name) {
Ok(up) => up,
Err(msg) => {
err.issues.push(CLIError::InvalidUploadProtocol(name.to_string(), valid_protocols));
UploadProtocol::Simple
}
})
}
pub fn input_file_from_opts(file_path: &str, err: &mut InvalidOptionsError) -> Option<fs::File> { pub fn input_file_from_opts(file_path: &str, err: &mut InvalidOptionsError) -> Option<fs::File> {
match fs::File::open(file_path) { match fs::File::open(file_path) {
Ok(f) => Some(f), 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 pub fn writer_from_opts(arg: Option<&str>) -> Result<Box<Write>, io::Error> {
// kind of error: TODO: fix this architecture :) let f = arg.unwrap_or("-");
pub fn writer_from_opts(flag: bool, arg: &str) -> Box<Write> { match f {
if !flag || arg == "-" { "-" => Ok(Box::new(stdout())),
Box::new(stdout()) _ => match fs::OpenOptions::new().create(true).write(true).open(f) {
} else { Ok(f) => Ok(Box::new(f)),
Box::new(fs::OpenOptions::new().create(true).write(true).open(arg).unwrap()) Err(io_err) => Err(io_err),
}
} }
} }
@@ -151,7 +204,7 @@ pub fn arg_from_str<T>(arg: &str, err: &mut InvalidOptionsError,
match FromStr::from_str(arg) { match FromStr::from_str(arg) {
Err(perr) => { Err(perr) => {
err.issues.push( 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() Default::default()
}, },
@@ -171,49 +224,47 @@ impl JsonTokenStorage {
} }
impl TokenStorage for JsonTokenStorage { impl TokenStorage for JsonTokenStorage {
type Error = io::Error; type Error = json::Error;
// NOTE: logging might be interesting, currently we swallow all errors // NOTE: logging might be interesting, currently we swallow all errors
fn set(&mut self, scope_hash: u64, _: &Vec<&str>, token: Option<Token>) -> Option<io::Error> { fn set(&mut self, scope_hash: u64, _: &Vec<&str>, token: Option<Token>) -> Result<(), json::Error> {
match token { match token {
None => { None => {
match fs::remove_file(self.path(scope_hash)) { match fs::remove_file(self.path(scope_hash)) {
Err(err) => Err(err) =>
match err.kind() { match err.kind() {
io::ErrorKind::NotFound => None, io::ErrorKind::NotFound => Ok(()),
_ => Some(err) _ => Err(json::Error::IoError(err))
}, },
Ok(_) => None Ok(_) => Ok(()),
} }
} }
Some(token) => { Some(token) => {
let json_token = json::encode(&token).unwrap();
match fs::OpenOptions::new().create(true).write(true).open(&self.path(scope_hash)) { match fs::OpenOptions::new().create(true).write(true).open(&self.path(scope_hash)) {
Ok(mut f) => { Ok(mut f) => {
match f.write(json_token.as_bytes()) { match json::to_writer_pretty(&mut f, &token) {
Ok(_) => None, Ok(_) => Ok(()),
Err(io_err) => Some(io_err), 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<Option<Token>, io::Error> { fn get(&self, scope_hash: u64, _: &Vec<&str>) -> Result<Option<Token>, json::Error> {
match fs::File::open(&self.path(scope_hash)) { match fs::File::open(&self.path(scope_hash)) {
Ok(mut f) => { Ok(mut f) => {
let mut json_string = String::new(); match json::de::from_reader(f) {
match f.read_to_string(&mut json_string) { Ok(token) => Ok(Some(token)),
Ok(_) => Ok(Some(json::decode::<Token>(&json_string).unwrap())), Err(err) => Err(err),
Err(io_err) => Err(io_err),
} }
}, },
Err(io_err) => { Err(io_err) => {
match io_err.kind() { match io_err.kind() {
io::ErrorKind::NotFound => Ok(None), io::ErrorKind::NotFound => Ok(None),
_ => Err(io_err) _ => Err(json::Error::IoError(io_err))
} }
} }
} }
@@ -223,7 +274,7 @@ impl TokenStorage for JsonTokenStorage {
#[derive(Debug)] #[derive(Debug)]
pub enum ApplicationSecretError { pub enum ApplicationSecretError {
DecoderError((String, json::DecoderError)), DecoderError((String, json::Error)),
FormatError(String), FormatError(String),
} }
@@ -311,11 +362,14 @@ impl fmt::Display for FieldError {
#[derive(Debug)] #[derive(Debug)]
pub enum CLIError { pub enum CLIError {
Configuration(ConfigurationError), Configuration(ConfigurationError),
ParseError((&'static str, &'static str, String, String)), ParseError(&'static str, &'static str, String, String),
UnknownParameter(String), UnknownParameter(String),
InvalidUploadProtocol(String, Vec<String>),
InvalidKeyValueSyntax(String, bool), InvalidKeyValueSyntax(String, bool),
Input(InputError), Input(InputError),
Field(FieldError), Field(FieldError),
MissingCommandError,
MissingMethodError(String),
} }
impl fmt::Display for CLIError { impl fmt::Display for CLIError {
@@ -324,7 +378,9 @@ impl fmt::Display for CLIError {
CLIError::Configuration(ref err) => write!(f, "Configuration -> {}", err), CLIError::Configuration(ref err) => write!(f, "Configuration -> {}", err),
CLIError::Input(ref err) => write!(f, "Input -> {}", err), CLIError::Input(ref err) => write!(f, "Input -> {}", err),
CLIError::Field(ref err) => write!(f, "Field -> {}", 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: {}", => writeln!(f, "Failed to parse argument '{}' with value '{}' as {} with error: {}",
arg_name, value, type_name, err_desc), arg_name, value, type_name, err_desc),
CLIError::UnknownParameter(ref param_name) CLIError::UnknownParameter(ref param_name)
@@ -333,6 +389,8 @@ impl fmt::Display for CLIError {
let hashmap_info = if is_hashmap { "hashmap " } else { "" }; let hashmap_info = if is_hashmap { "hashmap " } else { "" };
writeln!(f, "'{}' does not match {}pattern <key>=<value>", kv, hashmap_info) writeln!(f, "'{}' does not match {}pattern <key>=<value>", kv, hashmap_info)
}, },
CLIError::MissingCommandError => writeln!(f, "Please specify the main sub-command"),
CLIError::MissingMethodError(ref cmd) => writeln!(f, "Please specify the method to call on the '{}' command", cmd),
} }
} }
} }
@@ -399,7 +457,7 @@ pub fn assure_config_dir_exists(dir: &str) -> Result<String, CLIError> {
pub fn application_secret_from_directory(dir: &str, pub fn application_secret_from_directory(dir: &str,
secret_basename: &str, secret_basename: &str,
json_app_secret: &str) json_console_secret: &str)
-> Result<ApplicationSecret, CLIError> { -> Result<ApplicationSecret, CLIError> {
let secret_path = Path::new(dir).join(secret_basename); let secret_path = Path::new(dir).join(secret_basename);
let secret_str = || secret_path.as_path().to_str().unwrap().to_string(); 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 = match fs::OpenOptions::new().create(true).write(true).open(&secret_path) {
Err(cfe) => cfe, Err(cfe) => cfe,
Ok(mut f) => { 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, Err(io_err) => io_err,
Ok(_) => continue, Ok(_) => continue,
} }
@@ -429,23 +490,24 @@ pub fn application_secret_from_directory(dir: &str,
return secret_io_error(err) return secret_io_error(err)
}, },
Ok(mut f) => { Ok(mut f) => {
let mut json_encoded_secret = String::new(); match json::de::from_reader::<_, ConsoleApplicationSecret>(f) {
if let Err(io_err) = f.read_to_string(&mut json_encoded_secret) { Err(json::Error::IoError(err)) =>
return secret_io_error(io_err) return secret_io_error(err),
} Err(json_err) =>
match json::decode::<ConsoleApplicationSecret>(&json_encoded_secret) { return Err(CLIError::Configuration(
Err(json_decode_error) => return Err(CLIError::Configuration( ConfigurationError::Secret(
ConfigurationError::Secret(ApplicationSecretError::DecoderError( ApplicationSecretError::DecoderError(
(secret_str(), json_decode_error) (secret_str(), json_err)
)))), )))),
Ok(console_secret) => match console_secret.installed { Ok(console_secret) =>
Some(secret) => return Ok(secret), match console_secret.installed {
None => return Err( Some(secret) => return Ok(secret),
CLIError::Configuration( None => return Err(
ConfigurationError::Secret( CLIError::Configuration(
ApplicationSecretError::FormatError(secret_str()) ConfigurationError::Secret(
))) ApplicationSecretError::FormatError(secret_str())
}, )))
},
} }
} }
} }

File diff suppressed because it is too large Load Diff

View File

@@ -4,7 +4,7 @@
[package] [package]
name = "google-drive2" name = "google-drive2"
version = "0.1.6+20150326" version = "0.1.7+20150326"
authors = ["Sebastian Thiel <byronimo@gmail.com>"] authors = ["Sebastian Thiel <byronimo@gmail.com>"]
description = "A complete library to interact with drive (protocol v2)" description = "A complete library to interact with drive (protocol v2)"
repository = "https://github.com/Byron/google-apis-rs/tree/master/gen/drive2" repository = "https://github.com/Byron/google-apis-rs/tree/master/gen/drive2"

View File

@@ -5,7 +5,7 @@ DO NOT EDIT !
--> -->
The `google-drive2` library allows access to all features of the *Google drive* service. 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 Everything else about the *drive* *v2* API can be found at the
[official documentation site](https://developers.google.com/drive/). [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 * [PODs][wiki-pod] are handed by copy
* strings are passed as `&str` * 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. Arguments will always be copied or cloned into the builder, to make them independent of their original life times.

View File

@@ -173,7 +173,10 @@ pub trait Delegate {
/// Called after we have retrieved a new upload URL for a resumable upload to store it /// 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()`. /// 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; let _ = url;
} }
@@ -459,6 +462,16 @@ impl<'a> Read for MultiPartReader<'a> {
header!{ header!{
#[doc="The `X-Upload-Content-Type` header."] #[doc="The `X-Upload-Content-Type` header."]
(XUploadContentType, "X-Upload-Content-Type") => [Mime] (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)] #[derive(Clone, PartialEq, Debug)]

View File

@@ -2,7 +2,7 @@
// This file was generated automatically from 'src/mako/api/lib.rs.mako' // This file was generated automatically from 'src/mako/api/lib.rs.mako'
// DO NOT EDIT ! // 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 //! Everything else about the *drive* *v2* API can be found at the
//! [official documentation site](https://developers.google.com/drive/). //! [official documentation site](https://developers.google.com/drive/).
@@ -231,7 +231,7 @@
//! //!
//! * [PODs][wiki-pod] are handed by copy //! * [PODs][wiki-pod] are handed by copy
//! * strings are passed as `&str` //! * 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. //! 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 //! [google-go-api]: https://github.com/google/google-api-go-client
//! //!
//! //!
#![feature(std_misc)]
// Unused attributes happen thanks to defined, but unused structures // 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. // 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
@@ -418,7 +417,7 @@ impl<'a, C, A> Drive<C, A>
Drive { Drive {
client: RefCell::new(client), client: RefCell::new(client),
auth: RefCell::new(authenticator), 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<C, A>
} }
/// Set the user-agent header field to use in all requests to the server. /// 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. /// Returns the previously set user-agent.
pub fn user_agent(&mut self, agent_name: String) -> String { 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<hyper::Client>, A: oau
request_value_reader.seek(io::SeekFrom::Start(0)).unwrap(); request_value_reader.seek(io::SeekFrom::Start(0)).unwrap();
let mut req_result = { let mut req_result = {
let mut client = &mut *self.hub.client.borrow_mut(); 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(UserAgent(self.hub._user_agent.clone()))
.header(auth_header.clone()) .header(auth_header.clone())
.header(ContentType(json_mime_type.clone())) .header(ContentType(json_mime_type.clone()))
@@ -4129,7 +4128,7 @@ impl<'a, C, A> FileInsertCall<'a, C, A> where C: BorrowMut<hyper::Client>, A: oa
_ => (&mut request_value_reader as &mut io::Read, ContentType(json_mime_type.clone())), _ => (&mut request_value_reader as &mut io::Read, ContentType(json_mime_type.clone())),
}; };
let mut client = &mut *self.hub.client.borrow_mut(); 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(UserAgent(self.hub._user_agent.clone()))
.header(auth_header.clone()) .header(auth_header.clone())
.header(content_type) .header(content_type)
@@ -4179,7 +4178,7 @@ impl<'a, C, A> FileInsertCall<'a, C, A> where C: BorrowMut<hyper::Client>, A: oa
let upload_result = { let upload_result = {
let url_str = &res.headers.get::<Location>().expect("Location header is part of protocol").0; let url_str = &res.headers.get::<Location>().expect("Location header is part of protocol").0;
if upload_url_from_server { if upload_url_from_server {
dlg.store_upload_url(url_str); dlg.store_upload_url(Some(url_str));
} }
cmn::ResumableUploadHelper { cmn::ResumableUploadHelper {
@@ -4207,6 +4206,7 @@ impl<'a, C, A> FileInsertCall<'a, C, A> where C: BorrowMut<hyper::Client>, A: oa
Some(Ok(upload_result)) => { Some(Ok(upload_result)) => {
res = upload_result; res = upload_result;
if !res.status.is_success() { if !res.status.is_success() {
dlg.store_upload_url(None);
dlg.finished(false); dlg.finished(false);
return Err(Error::Failure(res)) return Err(Error::Failure(res))
} }
@@ -4500,7 +4500,7 @@ impl<'a, C, A> FileUntrashCall<'a, C, A> where C: BorrowMut<hyper::Client>, A: o
access_token: token.access_token }); access_token: token.access_token });
let mut req_result = { let mut req_result = {
let mut client = &mut *self.hub.client.borrow_mut(); 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(UserAgent(self.hub._user_agent.clone()))
.header(auth_header.clone()); .header(auth_header.clone());
@@ -4786,7 +4786,7 @@ impl<'a, C, A> FileCopyCall<'a, C, A> where C: BorrowMut<hyper::Client>, A: oaut
request_value_reader.seek(io::SeekFrom::Start(0)).unwrap(); request_value_reader.seek(io::SeekFrom::Start(0)).unwrap();
let mut req_result = { let mut req_result = {
let mut client = &mut *self.hub.client.borrow_mut(); 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(UserAgent(self.hub._user_agent.clone()))
.header(auth_header.clone()) .header(auth_header.clone())
.header(ContentType(json_mime_type.clone())) .header(ContentType(json_mime_type.clone()))
@@ -5086,7 +5086,7 @@ impl<'a, C, A> FileTrashCall<'a, C, A> where C: BorrowMut<hyper::Client>, A: oau
access_token: token.access_token }); access_token: token.access_token });
let mut req_result = { let mut req_result = {
let mut client = &mut *self.hub.client.borrow_mut(); 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(UserAgent(self.hub._user_agent.clone()))
.header(auth_header.clone()); .header(auth_header.clone());
@@ -5298,7 +5298,7 @@ impl<'a, C, A> FileEmptyTrashCall<'a, C, A> where C: BorrowMut<hyper::Client>, A
access_token: token.access_token }); access_token: token.access_token });
let mut req_result = { let mut req_result = {
let mut client = &mut *self.hub.client.borrow_mut(); 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(UserAgent(self.hub._user_agent.clone()))
.header(auth_header.clone()); .header(auth_header.clone());
@@ -5516,7 +5516,7 @@ impl<'a, C, A> FileListCall<'a, C, A> where C: BorrowMut<hyper::Client>, A: oaut
access_token: token.access_token }); access_token: token.access_token });
let mut req_result = { let mut req_result = {
let mut client = &mut *self.hub.client.borrow_mut(); 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(UserAgent(self.hub._user_agent.clone()))
.header(auth_header.clone()); .header(auth_header.clone());
@@ -5780,7 +5780,7 @@ impl<'a, C, A> FileTouchCall<'a, C, A> where C: BorrowMut<hyper::Client>, A: oau
access_token: token.access_token }); access_token: token.access_token });
let mut req_result = { let mut req_result = {
let mut client = &mut *self.hub.client.borrow_mut(); 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(UserAgent(self.hub._user_agent.clone()))
.header(auth_header.clone()); .header(auth_header.clone());
@@ -6133,7 +6133,7 @@ impl<'a, C, A> FileUpdateCall<'a, C, A> where C: BorrowMut<hyper::Client>, A: oa
_ => (&mut request_value_reader as &mut io::Read, ContentType(json_mime_type.clone())), _ => (&mut request_value_reader as &mut io::Read, ContentType(json_mime_type.clone())),
}; };
let mut client = &mut *self.hub.client.borrow_mut(); 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(UserAgent(self.hub._user_agent.clone()))
.header(auth_header.clone()) .header(auth_header.clone())
.header(content_type) .header(content_type)
@@ -6183,7 +6183,7 @@ impl<'a, C, A> FileUpdateCall<'a, C, A> where C: BorrowMut<hyper::Client>, A: oa
let upload_result = { let upload_result = {
let url_str = &res.headers.get::<Location>().expect("Location header is part of protocol").0; let url_str = &res.headers.get::<Location>().expect("Location header is part of protocol").0;
if upload_url_from_server { if upload_url_from_server {
dlg.store_upload_url(url_str); dlg.store_upload_url(Some(url_str));
} }
cmn::ResumableUploadHelper { cmn::ResumableUploadHelper {
@@ -6211,6 +6211,7 @@ impl<'a, C, A> FileUpdateCall<'a, C, A> where C: BorrowMut<hyper::Client>, A: oa
Some(Ok(upload_result)) => { Some(Ok(upload_result)) => {
res = upload_result; res = upload_result;
if !res.status.is_success() { if !res.status.is_success() {
dlg.store_upload_url(None);
dlg.finished(false); dlg.finished(false);
return Err(Error::Failure(res)) return Err(Error::Failure(res))
} }
@@ -6541,7 +6542,7 @@ impl<'a, C, A> FileDeleteCall<'a, C, A> where C: BorrowMut<hyper::Client>, A: oa
access_token: token.access_token }); access_token: token.access_token });
let mut req_result = { let mut req_result = {
let mut client = &mut *self.hub.client.borrow_mut(); 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(UserAgent(self.hub._user_agent.clone()))
.header(auth_header.clone()); .header(auth_header.clone());
@@ -6842,7 +6843,7 @@ impl<'a, C, A> FilePatchCall<'a, C, A> where C: BorrowMut<hyper::Client>, A: oau
request_value_reader.seek(io::SeekFrom::Start(0)).unwrap(); request_value_reader.seek(io::SeekFrom::Start(0)).unwrap();
let mut req_result = { let mut req_result = {
let mut client = &mut *self.hub.client.borrow_mut(); 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(UserAgent(self.hub._user_agent.clone()))
.header(auth_header.clone()) .header(auth_header.clone())
.header(ContentType(json_mime_type.clone())) .header(ContentType(json_mime_type.clone()))
@@ -7218,7 +7219,7 @@ impl<'a, C, A> FileGetCall<'a, C, A> where C: BorrowMut<hyper::Client>, A: oauth
access_token: token.access_token }); access_token: token.access_token });
let mut req_result = { let mut req_result = {
let mut client = &mut *self.hub.client.borrow_mut(); 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(UserAgent(self.hub._user_agent.clone()))
.header(auth_header.clone()); .header(auth_header.clone());
@@ -7474,7 +7475,7 @@ impl<'a, C, A> AboutGetCall<'a, C, A> where C: BorrowMut<hyper::Client>, A: oaut
access_token: token.access_token }); access_token: token.access_token });
let mut req_result = { let mut req_result = {
let mut client = &mut *self.hub.client.borrow_mut(); 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(UserAgent(self.hub._user_agent.clone()))
.header(auth_header.clone()); .header(auth_header.clone());
@@ -7754,7 +7755,7 @@ impl<'a, C, A> RealtimeUpdateCall<'a, C, A> where C: BorrowMut<hyper::Client>, A
response response
} else { } else {
let mut client = &mut *self.hub.client.borrow_mut(); 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(UserAgent(self.hub._user_agent.clone()))
.header(auth_header.clone()); .header(auth_header.clone());
if protocol == "simple" { if protocol == "simple" {
@@ -7812,7 +7813,7 @@ impl<'a, C, A> RealtimeUpdateCall<'a, C, A> where C: BorrowMut<hyper::Client>, A
let upload_result = { let upload_result = {
let url_str = &res.headers.get::<Location>().expect("Location header is part of protocol").0; let url_str = &res.headers.get::<Location>().expect("Location header is part of protocol").0;
if upload_url_from_server { if upload_url_from_server {
dlg.store_upload_url(url_str); dlg.store_upload_url(Some(url_str));
} }
cmn::ResumableUploadHelper { cmn::ResumableUploadHelper {
@@ -7840,6 +7841,7 @@ impl<'a, C, A> RealtimeUpdateCall<'a, C, A> where C: BorrowMut<hyper::Client>, A
Some(Ok(upload_result)) => { Some(Ok(upload_result)) => {
res = upload_result; res = upload_result;
if !res.status.is_success() { if !res.status.is_success() {
dlg.store_upload_url(None);
dlg.finished(false); dlg.finished(false);
return Err(Error::Failure(res)) return Err(Error::Failure(res))
} }
@@ -8082,7 +8084,7 @@ impl<'a, C, A> RealtimeGetCall<'a, C, A> where C: BorrowMut<hyper::Client>, A: o
access_token: token.access_token }); access_token: token.access_token });
let mut req_result = { let mut req_result = {
let mut client = &mut *self.hub.client.borrow_mut(); 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(UserAgent(self.hub._user_agent.clone()))
.header(auth_header.clone()); .header(auth_header.clone());
@@ -8318,7 +8320,7 @@ impl<'a, C, A> AppGetCall<'a, C, A> where C: BorrowMut<hyper::Client>, A: oauth2
access_token: token.access_token }); access_token: token.access_token });
let mut req_result = { let mut req_result = {
let mut client = &mut *self.hub.client.borrow_mut(); 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(UserAgent(self.hub._user_agent.clone()))
.header(auth_header.clone()); .header(auth_header.clone());
@@ -8546,7 +8548,7 @@ impl<'a, C, A> AppListCall<'a, C, A> where C: BorrowMut<hyper::Client>, A: oauth
access_token: token.access_token }); access_token: token.access_token });
let mut req_result = { let mut req_result = {
let mut client = &mut *self.hub.client.borrow_mut(); 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(UserAgent(self.hub._user_agent.clone()))
.header(auth_header.clone()); .header(auth_header.clone());
@@ -8797,7 +8799,7 @@ impl<'a, C, A> CommentDeleteCall<'a, C, A> where C: BorrowMut<hyper::Client>, A:
access_token: token.access_token }); access_token: token.access_token });
let mut req_result = { let mut req_result = {
let mut client = &mut *self.hub.client.borrow_mut(); 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(UserAgent(self.hub._user_agent.clone()))
.header(auth_header.clone()); .header(auth_header.clone());
@@ -9043,7 +9045,7 @@ impl<'a, C, A> CommentGetCall<'a, C, A> where C: BorrowMut<hyper::Client>, A: oa
access_token: token.access_token }); access_token: token.access_token });
let mut req_result = { let mut req_result = {
let mut client = &mut *self.hub.client.borrow_mut(); 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(UserAgent(self.hub._user_agent.clone()))
.header(auth_header.clone()); .header(auth_header.clone());
@@ -9311,7 +9313,7 @@ impl<'a, C, A> CommentInsertCall<'a, C, A> where C: BorrowMut<hyper::Client>, A:
request_value_reader.seek(io::SeekFrom::Start(0)).unwrap(); request_value_reader.seek(io::SeekFrom::Start(0)).unwrap();
let mut req_result = { let mut req_result = {
let mut client = &mut *self.hub.client.borrow_mut(); 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(UserAgent(self.hub._user_agent.clone()))
.header(auth_header.clone()) .header(auth_header.clone())
.header(ContentType(json_mime_type.clone())) .header(ContentType(json_mime_type.clone()))
@@ -9576,7 +9578,7 @@ impl<'a, C, A> CommentPatchCall<'a, C, A> where C: BorrowMut<hyper::Client>, A:
request_value_reader.seek(io::SeekFrom::Start(0)).unwrap(); request_value_reader.seek(io::SeekFrom::Start(0)).unwrap();
let mut req_result = { let mut req_result = {
let mut client = &mut *self.hub.client.borrow_mut(); 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(UserAgent(self.hub._user_agent.clone()))
.header(auth_header.clone()) .header(auth_header.clone())
.header(ContentType(json_mime_type.clone())) .header(ContentType(json_mime_type.clone()))
@@ -9851,7 +9853,7 @@ impl<'a, C, A> CommentUpdateCall<'a, C, A> where C: BorrowMut<hyper::Client>, A:
request_value_reader.seek(io::SeekFrom::Start(0)).unwrap(); request_value_reader.seek(io::SeekFrom::Start(0)).unwrap();
let mut req_result = { let mut req_result = {
let mut client = &mut *self.hub.client.borrow_mut(); 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(UserAgent(self.hub._user_agent.clone()))
.header(auth_header.clone()) .header(auth_header.clone())
.header(ContentType(json_mime_type.clone())) .header(ContentType(json_mime_type.clone()))
@@ -10132,7 +10134,7 @@ impl<'a, C, A> CommentListCall<'a, C, A> where C: BorrowMut<hyper::Client>, A: o
access_token: token.access_token }); access_token: token.access_token });
let mut req_result = { let mut req_result = {
let mut client = &mut *self.hub.client.borrow_mut(); 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(UserAgent(self.hub._user_agent.clone()))
.header(auth_header.clone()); .header(auth_header.clone());
@@ -10414,7 +10416,7 @@ impl<'a, C, A> ChildrenListCall<'a, C, A> where C: BorrowMut<hyper::Client>, A:
access_token: token.access_token }); access_token: token.access_token });
let mut req_result = { let mut req_result = {
let mut client = &mut *self.hub.client.borrow_mut(); 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(UserAgent(self.hub._user_agent.clone()))
.header(auth_header.clone()); .header(auth_header.clone());
@@ -10676,7 +10678,7 @@ impl<'a, C, A> ChildrenGetCall<'a, C, A> where C: BorrowMut<hyper::Client>, A: o
access_token: token.access_token }); access_token: token.access_token });
let mut req_result = { let mut req_result = {
let mut client = &mut *self.hub.client.borrow_mut(); 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(UserAgent(self.hub._user_agent.clone()))
.header(auth_header.clone()); .header(auth_header.clone());
@@ -10926,7 +10928,7 @@ impl<'a, C, A> ChildrenDeleteCall<'a, C, A> where C: BorrowMut<hyper::Client>, A
access_token: token.access_token }); access_token: token.access_token });
let mut req_result = { let mut req_result = {
let mut client = &mut *self.hub.client.borrow_mut(); 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(UserAgent(self.hub._user_agent.clone()))
.header(auth_header.clone()); .header(auth_header.clone());
@@ -11177,7 +11179,7 @@ impl<'a, C, A> ChildrenInsertCall<'a, C, A> where C: BorrowMut<hyper::Client>, A
request_value_reader.seek(io::SeekFrom::Start(0)).unwrap(); request_value_reader.seek(io::SeekFrom::Start(0)).unwrap();
let mut req_result = { let mut req_result = {
let mut client = &mut *self.hub.client.borrow_mut(); 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(UserAgent(self.hub._user_agent.clone()))
.header(auth_header.clone()) .header(auth_header.clone())
.header(ContentType(json_mime_type.clone())) .header(ContentType(json_mime_type.clone()))
@@ -11413,7 +11415,7 @@ impl<'a, C, A> ChannelStopCall<'a, C, A> where C: BorrowMut<hyper::Client>, A: o
request_value_reader.seek(io::SeekFrom::Start(0)).unwrap(); request_value_reader.seek(io::SeekFrom::Start(0)).unwrap();
let mut req_result = { let mut req_result = {
let mut client = &mut *self.hub.client.borrow_mut(); 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(UserAgent(self.hub._user_agent.clone()))
.header(auth_header.clone()) .header(auth_header.clone())
.header(ContentType(json_mime_type.clone())) .header(ContentType(json_mime_type.clone()))
@@ -11644,7 +11646,7 @@ impl<'a, C, A> ParentListCall<'a, C, A> where C: BorrowMut<hyper::Client>, A: oa
access_token: token.access_token }); access_token: token.access_token });
let mut req_result = { let mut req_result = {
let mut client = &mut *self.hub.client.borrow_mut(); 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(UserAgent(self.hub._user_agent.clone()))
.header(auth_header.clone()); .header(auth_header.clone());
@@ -11884,7 +11886,7 @@ impl<'a, C, A> ParentDeleteCall<'a, C, A> where C: BorrowMut<hyper::Client>, A:
access_token: token.access_token }); access_token: token.access_token });
let mut req_result = { let mut req_result = {
let mut client = &mut *self.hub.client.borrow_mut(); 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(UserAgent(self.hub._user_agent.clone()))
.header(auth_header.clone()); .header(auth_header.clone());
@@ -12135,7 +12137,7 @@ impl<'a, C, A> ParentInsertCall<'a, C, A> where C: BorrowMut<hyper::Client>, A:
request_value_reader.seek(io::SeekFrom::Start(0)).unwrap(); request_value_reader.seek(io::SeekFrom::Start(0)).unwrap();
let mut req_result = { let mut req_result = {
let mut client = &mut *self.hub.client.borrow_mut(); 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(UserAgent(self.hub._user_agent.clone()))
.header(auth_header.clone()) .header(auth_header.clone())
.header(ContentType(json_mime_type.clone())) .header(ContentType(json_mime_type.clone()))
@@ -12388,7 +12390,7 @@ impl<'a, C, A> ParentGetCall<'a, C, A> where C: BorrowMut<hyper::Client>, A: oau
access_token: token.access_token }); access_token: token.access_token });
let mut req_result = { let mut req_result = {
let mut client = &mut *self.hub.client.borrow_mut(); 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(UserAgent(self.hub._user_agent.clone()))
.header(auth_header.clone()); .header(auth_header.clone());
@@ -12653,7 +12655,7 @@ impl<'a, C, A> ReplyPatchCall<'a, C, A> where C: BorrowMut<hyper::Client>, A: oa
request_value_reader.seek(io::SeekFrom::Start(0)).unwrap(); request_value_reader.seek(io::SeekFrom::Start(0)).unwrap();
let mut req_result = { let mut req_result = {
let mut client = &mut *self.hub.client.borrow_mut(); 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(UserAgent(self.hub._user_agent.clone()))
.header(auth_header.clone()) .header(auth_header.clone())
.header(ContentType(json_mime_type.clone())) .header(ContentType(json_mime_type.clone()))
@@ -12941,7 +12943,7 @@ impl<'a, C, A> ReplyListCall<'a, C, A> where C: BorrowMut<hyper::Client>, A: oau
access_token: token.access_token }); access_token: token.access_token });
let mut req_result = { let mut req_result = {
let mut client = &mut *self.hub.client.borrow_mut(); 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(UserAgent(self.hub._user_agent.clone()))
.header(auth_header.clone()); .header(auth_header.clone());
@@ -13220,7 +13222,7 @@ impl<'a, C, A> ReplyGetCall<'a, C, A> where C: BorrowMut<hyper::Client>, A: oaut
access_token: token.access_token }); access_token: token.access_token });
let mut req_result = { let mut req_result = {
let mut client = &mut *self.hub.client.borrow_mut(); 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(UserAgent(self.hub._user_agent.clone()))
.header(auth_header.clone()); .header(auth_header.clone());
@@ -13500,7 +13502,7 @@ impl<'a, C, A> ReplyInsertCall<'a, C, A> where C: BorrowMut<hyper::Client>, A: o
request_value_reader.seek(io::SeekFrom::Start(0)).unwrap(); request_value_reader.seek(io::SeekFrom::Start(0)).unwrap();
let mut req_result = { let mut req_result = {
let mut client = &mut *self.hub.client.borrow_mut(); 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(UserAgent(self.hub._user_agent.clone()))
.header(auth_header.clone()) .header(auth_header.clone())
.header(ContentType(json_mime_type.clone())) .header(ContentType(json_mime_type.clone()))
@@ -13764,7 +13766,7 @@ impl<'a, C, A> ReplyDeleteCall<'a, C, A> where C: BorrowMut<hyper::Client>, A: o
access_token: token.access_token }); access_token: token.access_token });
let mut req_result = { let mut req_result = {
let mut client = &mut *self.hub.client.borrow_mut(); 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(UserAgent(self.hub._user_agent.clone()))
.header(auth_header.clone()); .header(auth_header.clone());
@@ -14029,7 +14031,7 @@ impl<'a, C, A> ReplyUpdateCall<'a, C, A> where C: BorrowMut<hyper::Client>, A: o
request_value_reader.seek(io::SeekFrom::Start(0)).unwrap(); request_value_reader.seek(io::SeekFrom::Start(0)).unwrap();
let mut req_result = { let mut req_result = {
let mut client = &mut *self.hub.client.borrow_mut(); 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(UserAgent(self.hub._user_agent.clone()))
.header(auth_header.clone()) .header(auth_header.clone())
.header(ContentType(json_mime_type.clone())) .header(ContentType(json_mime_type.clone()))
@@ -14301,7 +14303,7 @@ impl<'a, C, A> PermissionDeleteCall<'a, C, A> where C: BorrowMut<hyper::Client>,
access_token: token.access_token }); access_token: token.access_token });
let mut req_result = { let mut req_result = {
let mut client = &mut *self.hub.client.borrow_mut(); 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(UserAgent(self.hub._user_agent.clone()))
.header(auth_header.clone()); .header(auth_header.clone());
@@ -14562,7 +14564,7 @@ impl<'a, C, A> PermissionInsertCall<'a, C, A> where C: BorrowMut<hyper::Client>,
request_value_reader.seek(io::SeekFrom::Start(0)).unwrap(); request_value_reader.seek(io::SeekFrom::Start(0)).unwrap();
let mut req_result = { let mut req_result = {
let mut client = &mut *self.hub.client.borrow_mut(); 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(UserAgent(self.hub._user_agent.clone()))
.header(auth_header.clone()) .header(auth_header.clone())
.header(ContentType(json_mime_type.clone())) .header(ContentType(json_mime_type.clone()))
@@ -14846,7 +14848,7 @@ impl<'a, C, A> PermissionUpdateCall<'a, C, A> where C: BorrowMut<hyper::Client>,
request_value_reader.seek(io::SeekFrom::Start(0)).unwrap(); request_value_reader.seek(io::SeekFrom::Start(0)).unwrap();
let mut req_result = { let mut req_result = {
let mut client = &mut *self.hub.client.borrow_mut(); 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(UserAgent(self.hub._user_agent.clone()))
.header(auth_header.clone()) .header(auth_header.clone())
.header(ContentType(json_mime_type.clone())) .header(ContentType(json_mime_type.clone()))
@@ -15133,7 +15135,7 @@ impl<'a, C, A> PermissionPatchCall<'a, C, A> where C: BorrowMut<hyper::Client>,
request_value_reader.seek(io::SeekFrom::Start(0)).unwrap(); request_value_reader.seek(io::SeekFrom::Start(0)).unwrap();
let mut req_result = { let mut req_result = {
let mut client = &mut *self.hub.client.borrow_mut(); 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(UserAgent(self.hub._user_agent.clone()))
.header(auth_header.clone()) .header(auth_header.clone())
.header(ContentType(json_mime_type.clone())) .header(ContentType(json_mime_type.clone()))
@@ -15401,7 +15403,7 @@ impl<'a, C, A> PermissionListCall<'a, C, A> where C: BorrowMut<hyper::Client>, A
access_token: token.access_token }); access_token: token.access_token });
let mut req_result = { let mut req_result = {
let mut client = &mut *self.hub.client.borrow_mut(); 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(UserAgent(self.hub._user_agent.clone()))
.header(auth_header.clone()); .header(auth_header.clone());
@@ -15642,7 +15644,7 @@ impl<'a, C, A> PermissionGetCall<'a, C, A> where C: BorrowMut<hyper::Client>, A:
access_token: token.access_token }); access_token: token.access_token });
let mut req_result = { let mut req_result = {
let mut client = &mut *self.hub.client.borrow_mut(); 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(UserAgent(self.hub._user_agent.clone()))
.header(auth_header.clone()); .header(auth_header.clone());
@@ -15891,7 +15893,7 @@ impl<'a, C, A> PermissionGetIdForEmailCall<'a, C, A> where C: BorrowMut<hyper::C
access_token: token.access_token }); access_token: token.access_token });
let mut req_result = { let mut req_result = {
let mut client = &mut *self.hub.client.borrow_mut(); 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(UserAgent(self.hub._user_agent.clone()))
.header(auth_header.clone()); .header(auth_header.clone());
@@ -16141,7 +16143,7 @@ impl<'a, C, A> ChangeWatchCall<'a, C, A> where C: BorrowMut<hyper::Client>, A: o
request_value_reader.seek(io::SeekFrom::Start(0)).unwrap(); request_value_reader.seek(io::SeekFrom::Start(0)).unwrap();
let mut req_result = { let mut req_result = {
let mut client = &mut *self.hub.client.borrow_mut(); 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(UserAgent(self.hub._user_agent.clone()))
.header(auth_header.clone()) .header(auth_header.clone())
.header(ContentType(json_mime_type.clone())) .header(ContentType(json_mime_type.clone()))
@@ -16416,7 +16418,7 @@ impl<'a, C, A> ChangeListCall<'a, C, A> where C: BorrowMut<hyper::Client>, A: oa
access_token: token.access_token }); access_token: token.access_token });
let mut req_result = { let mut req_result = {
let mut client = &mut *self.hub.client.borrow_mut(); 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(UserAgent(self.hub._user_agent.clone()))
.header(auth_header.clone()); .header(auth_header.clone());
@@ -16680,7 +16682,7 @@ impl<'a, C, A> ChangeGetCall<'a, C, A> where C: BorrowMut<hyper::Client>, A: oau
access_token: token.access_token }); access_token: token.access_token });
let mut req_result = { let mut req_result = {
let mut client = &mut *self.hub.client.borrow_mut(); 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(UserAgent(self.hub._user_agent.clone()))
.header(auth_header.clone()); .header(auth_header.clone());
@@ -16938,7 +16940,7 @@ impl<'a, C, A> PropertyPatchCall<'a, C, A> where C: BorrowMut<hyper::Client>, A:
request_value_reader.seek(io::SeekFrom::Start(0)).unwrap(); request_value_reader.seek(io::SeekFrom::Start(0)).unwrap();
let mut req_result = { let mut req_result = {
let mut client = &mut *self.hub.client.borrow_mut(); 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(UserAgent(self.hub._user_agent.clone()))
.header(auth_header.clone()) .header(auth_header.clone())
.header(ContentType(json_mime_type.clone())) .header(ContentType(json_mime_type.clone()))
@@ -17212,7 +17214,7 @@ impl<'a, C, A> PropertyDeleteCall<'a, C, A> where C: BorrowMut<hyper::Client>, A
access_token: token.access_token }); access_token: token.access_token });
let mut req_result = { let mut req_result = {
let mut client = &mut *self.hub.client.borrow_mut(); 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(UserAgent(self.hub._user_agent.clone()))
.header(auth_header.clone()); .header(auth_header.clone());
@@ -17470,7 +17472,7 @@ impl<'a, C, A> PropertyInsertCall<'a, C, A> where C: BorrowMut<hyper::Client>, A
request_value_reader.seek(io::SeekFrom::Start(0)).unwrap(); request_value_reader.seek(io::SeekFrom::Start(0)).unwrap();
let mut req_result = { let mut req_result = {
let mut client = &mut *self.hub.client.borrow_mut(); 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(UserAgent(self.hub._user_agent.clone()))
.header(auth_header.clone()) .header(auth_header.clone())
.header(ContentType(json_mime_type.clone())) .header(ContentType(json_mime_type.clone()))
@@ -17721,7 +17723,7 @@ impl<'a, C, A> PropertyListCall<'a, C, A> where C: BorrowMut<hyper::Client>, A:
access_token: token.access_token }); access_token: token.access_token });
let mut req_result = { let mut req_result = {
let mut client = &mut *self.hub.client.borrow_mut(); 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(UserAgent(self.hub._user_agent.clone()))
.header(auth_header.clone()); .header(auth_header.clone());
@@ -17979,7 +17981,7 @@ impl<'a, C, A> PropertyUpdateCall<'a, C, A> where C: BorrowMut<hyper::Client>, A
request_value_reader.seek(io::SeekFrom::Start(0)).unwrap(); request_value_reader.seek(io::SeekFrom::Start(0)).unwrap();
let mut req_result = { let mut req_result = {
let mut client = &mut *self.hub.client.borrow_mut(); 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(UserAgent(self.hub._user_agent.clone()))
.header(auth_header.clone()) .header(auth_header.clone())
.header(ContentType(json_mime_type.clone())) .header(ContentType(json_mime_type.clone()))
@@ -18254,7 +18256,7 @@ impl<'a, C, A> PropertyGetCall<'a, C, A> where C: BorrowMut<hyper::Client>, A: o
access_token: token.access_token }); access_token: token.access_token });
let mut req_result = { let mut req_result = {
let mut client = &mut *self.hub.client.borrow_mut(); 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(UserAgent(self.hub._user_agent.clone()))
.header(auth_header.clone()); .header(auth_header.clone());
@@ -18512,7 +18514,7 @@ impl<'a, C, A> RevisionGetCall<'a, C, A> where C: BorrowMut<hyper::Client>, A: o
access_token: token.access_token }); access_token: token.access_token });
let mut req_result = { let mut req_result = {
let mut client = &mut *self.hub.client.borrow_mut(); 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(UserAgent(self.hub._user_agent.clone()))
.header(auth_header.clone()); .header(auth_header.clone());
@@ -18762,7 +18764,7 @@ impl<'a, C, A> RevisionDeleteCall<'a, C, A> where C: BorrowMut<hyper::Client>, A
access_token: token.access_token }); access_token: token.access_token });
let mut req_result = { let mut req_result = {
let mut client = &mut *self.hub.client.borrow_mut(); 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(UserAgent(self.hub._user_agent.clone()))
.header(auth_header.clone()); .header(auth_header.clone());
@@ -19015,7 +19017,7 @@ impl<'a, C, A> RevisionUpdateCall<'a, C, A> where C: BorrowMut<hyper::Client>, A
request_value_reader.seek(io::SeekFrom::Start(0)).unwrap(); request_value_reader.seek(io::SeekFrom::Start(0)).unwrap();
let mut req_result = { let mut req_result = {
let mut client = &mut *self.hub.client.borrow_mut(); 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(UserAgent(self.hub._user_agent.clone()))
.header(auth_header.clone()) .header(auth_header.clone())
.header(ContentType(json_mime_type.clone())) .header(ContentType(json_mime_type.clone()))
@@ -19276,7 +19278,7 @@ impl<'a, C, A> RevisionListCall<'a, C, A> where C: BorrowMut<hyper::Client>, A:
access_token: token.access_token }); access_token: token.access_token });
let mut req_result = { let mut req_result = {
let mut client = &mut *self.hub.client.borrow_mut(); 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(UserAgent(self.hub._user_agent.clone()))
.header(auth_header.clone()); .header(auth_header.clone());
@@ -19529,7 +19531,7 @@ impl<'a, C, A> RevisionPatchCall<'a, C, A> where C: BorrowMut<hyper::Client>, A:
request_value_reader.seek(io::SeekFrom::Start(0)).unwrap(); request_value_reader.seek(io::SeekFrom::Start(0)).unwrap();
let mut req_result = { let mut req_result = {
let mut client = &mut *self.hub.client.borrow_mut(); 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(UserAgent(self.hub._user_agent.clone()))
.header(auth_header.clone()) .header(auth_header.clone())
.header(ContentType(json_mime_type.clone())) .header(ContentType(json_mime_type.clone()))

View File

@@ -4,7 +4,7 @@
[package] [package]
name = "google-groupsmigration1-cli" name = "google-groupsmigration1-cli"
version = "0.1.0+20140416" version = "0.2.0+20140416"
authors = ["Sebastian Thiel <byronimo@gmail.com>"] authors = ["Sebastian Thiel <byronimo@gmail.com>"]
description = "A complete library to interact with Groups Migration (protocol v1)" description = "A complete library to interact with Groups Migration (protocol v1)"
repository = "https://github.com/Byron/google-apis-rs/tree/master/gen/groupsmigration1-cli" repository = "https://github.com/Byron/google-apis-rs/tree/master/gen/groupsmigration1-cli"
@@ -20,9 +20,7 @@ name = "groupsmigration1"
hyper = "*" hyper = "*"
mime = "*" mime = "*"
yup-oauth2 = "*" yup-oauth2 = "*"
docopt = "*" clap = "*"
docopt_macros = "*"
rustc-serialize = "*"
yup-hyper-mock = "*" yup-hyper-mock = "*"
serde = ">= 0.3.0" serde = ">= 0.3.0"
serde_macros = "*" serde_macros = "*"

View File

@@ -10,19 +10,24 @@ 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. 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 # 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 ```bash
groupsmigration1 [options] archive insert <group-id> -u (simple|resumable) <file> <mime> [-p <v>...] [-o <out>] groupsmigration1 [options]
archive
insert <group-id> (-u (simple|resumable) -f <file> [-m <mime>]) [-p <v>]... [-o <out>]
groupsmigration1 --help groupsmigration1 --help
All documentation details can be found at 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: Configuration:
--scope <url> [--scope <url>]...
Specify the authentication a method should be executed in. Each 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. If unset, it defaults to the shortest scope url for a particular method.

View File

@@ -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_url: http://byron.github.io/google-apis-rs/google-groupsmigration1-cli
site_description: Write integrating applications with bcore site_description: Write integrating applications with bcore

View File

@@ -1,8 +1,9 @@
// COPY OF 'src/rust/cli/cmn.rs' // COPY OF 'src/rust/cli/cmn.rs'
// DO NOT EDIT // DO NOT EDIT
use oauth2::{ApplicationSecret, ConsoleApplicationSecret, TokenStorage, Token}; use oauth2::{ApplicationSecret, ConsoleApplicationSecret, TokenStorage, Token};
use rustc_serialize::json; use serde::json;
use mime::Mime; use mime::Mime;
use clap::{App, SubCommand};
use std::fs; use std::fs;
use std::env; use std::env;
@@ -17,6 +18,46 @@ use std::default::Default;
const FIELD_SEP: char = '.'; const FIELD_SEP: char = '.';
pub enum CallType {
Upload(UploadProtocol),
Standard,
}
pub enum UploadProtocol {
Simple,
Resumable,
}
impl AsRef<str> for UploadProtocol {
fn as_ref(&self) -> &str {
match *self {
UploadProtocol::Simple => "simple",
UploadProtocol::Resumable => "resumable"
}
}
}
impl AsRef<str> 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<UploadProtocol, String> {
match s {
"simple" => Ok(UploadProtocol::Simple),
"resumable" => Ok(UploadProtocol::Resumable),
_ => Err(format!("Protocol '{}' is unknown", s)),
}
}
}
#[derive(Clone, Default)] #[derive(Clone, Default)]
pub struct FieldCursor(Vec<String>); pub struct FieldCursor(Vec<String>);
@@ -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<String>, err: &mut InvalidOptionsError) -> CallType {
CallType::Upload(
match UploadProtocol::from_str(name) {
Ok(up) => up,
Err(msg) => {
err.issues.push(CLIError::InvalidUploadProtocol(name.to_string(), valid_protocols));
UploadProtocol::Simple
}
})
}
pub fn input_file_from_opts(file_path: &str, err: &mut InvalidOptionsError) -> Option<fs::File> { pub fn input_file_from_opts(file_path: &str, err: &mut InvalidOptionsError) -> Option<fs::File> {
match fs::File::open(file_path) { match fs::File::open(file_path) {
Ok(f) => Some(f), 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 pub fn writer_from_opts(arg: Option<&str>) -> Result<Box<Write>, io::Error> {
// kind of error: TODO: fix this architecture :) let f = arg.unwrap_or("-");
pub fn writer_from_opts(flag: bool, arg: &str) -> Box<Write> { match f {
if !flag || arg == "-" { "-" => Ok(Box::new(stdout())),
Box::new(stdout()) _ => match fs::OpenOptions::new().create(true).write(true).open(f) {
} else { Ok(f) => Ok(Box::new(f)),
Box::new(fs::OpenOptions::new().create(true).write(true).open(arg).unwrap()) Err(io_err) => Err(io_err),
}
} }
} }
@@ -151,7 +204,7 @@ pub fn arg_from_str<T>(arg: &str, err: &mut InvalidOptionsError,
match FromStr::from_str(arg) { match FromStr::from_str(arg) {
Err(perr) => { Err(perr) => {
err.issues.push( 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() Default::default()
}, },
@@ -171,49 +224,47 @@ impl JsonTokenStorage {
} }
impl TokenStorage for JsonTokenStorage { impl TokenStorage for JsonTokenStorage {
type Error = io::Error; type Error = json::Error;
// NOTE: logging might be interesting, currently we swallow all errors // NOTE: logging might be interesting, currently we swallow all errors
fn set(&mut self, scope_hash: u64, _: &Vec<&str>, token: Option<Token>) -> Option<io::Error> { fn set(&mut self, scope_hash: u64, _: &Vec<&str>, token: Option<Token>) -> Result<(), json::Error> {
match token { match token {
None => { None => {
match fs::remove_file(self.path(scope_hash)) { match fs::remove_file(self.path(scope_hash)) {
Err(err) => Err(err) =>
match err.kind() { match err.kind() {
io::ErrorKind::NotFound => None, io::ErrorKind::NotFound => Ok(()),
_ => Some(err) _ => Err(json::Error::IoError(err))
}, },
Ok(_) => None Ok(_) => Ok(()),
} }
} }
Some(token) => { Some(token) => {
let json_token = json::encode(&token).unwrap();
match fs::OpenOptions::new().create(true).write(true).open(&self.path(scope_hash)) { match fs::OpenOptions::new().create(true).write(true).open(&self.path(scope_hash)) {
Ok(mut f) => { Ok(mut f) => {
match f.write(json_token.as_bytes()) { match json::to_writer_pretty(&mut f, &token) {
Ok(_) => None, Ok(_) => Ok(()),
Err(io_err) => Some(io_err), 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<Option<Token>, io::Error> { fn get(&self, scope_hash: u64, _: &Vec<&str>) -> Result<Option<Token>, json::Error> {
match fs::File::open(&self.path(scope_hash)) { match fs::File::open(&self.path(scope_hash)) {
Ok(mut f) => { Ok(mut f) => {
let mut json_string = String::new(); match json::de::from_reader(f) {
match f.read_to_string(&mut json_string) { Ok(token) => Ok(Some(token)),
Ok(_) => Ok(Some(json::decode::<Token>(&json_string).unwrap())), Err(err) => Err(err),
Err(io_err) => Err(io_err),
} }
}, },
Err(io_err) => { Err(io_err) => {
match io_err.kind() { match io_err.kind() {
io::ErrorKind::NotFound => Ok(None), io::ErrorKind::NotFound => Ok(None),
_ => Err(io_err) _ => Err(json::Error::IoError(io_err))
} }
} }
} }
@@ -223,7 +274,7 @@ impl TokenStorage for JsonTokenStorage {
#[derive(Debug)] #[derive(Debug)]
pub enum ApplicationSecretError { pub enum ApplicationSecretError {
DecoderError((String, json::DecoderError)), DecoderError((String, json::Error)),
FormatError(String), FormatError(String),
} }
@@ -311,11 +362,14 @@ impl fmt::Display for FieldError {
#[derive(Debug)] #[derive(Debug)]
pub enum CLIError { pub enum CLIError {
Configuration(ConfigurationError), Configuration(ConfigurationError),
ParseError((&'static str, &'static str, String, String)), ParseError(&'static str, &'static str, String, String),
UnknownParameter(String), UnknownParameter(String),
InvalidUploadProtocol(String, Vec<String>),
InvalidKeyValueSyntax(String, bool), InvalidKeyValueSyntax(String, bool),
Input(InputError), Input(InputError),
Field(FieldError), Field(FieldError),
MissingCommandError,
MissingMethodError(String),
} }
impl fmt::Display for CLIError { impl fmt::Display for CLIError {
@@ -324,7 +378,9 @@ impl fmt::Display for CLIError {
CLIError::Configuration(ref err) => write!(f, "Configuration -> {}", err), CLIError::Configuration(ref err) => write!(f, "Configuration -> {}", err),
CLIError::Input(ref err) => write!(f, "Input -> {}", err), CLIError::Input(ref err) => write!(f, "Input -> {}", err),
CLIError::Field(ref err) => write!(f, "Field -> {}", 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: {}", => writeln!(f, "Failed to parse argument '{}' with value '{}' as {} with error: {}",
arg_name, value, type_name, err_desc), arg_name, value, type_name, err_desc),
CLIError::UnknownParameter(ref param_name) CLIError::UnknownParameter(ref param_name)
@@ -333,6 +389,8 @@ impl fmt::Display for CLIError {
let hashmap_info = if is_hashmap { "hashmap " } else { "" }; let hashmap_info = if is_hashmap { "hashmap " } else { "" };
writeln!(f, "'{}' does not match {}pattern <key>=<value>", kv, hashmap_info) writeln!(f, "'{}' does not match {}pattern <key>=<value>", kv, hashmap_info)
}, },
CLIError::MissingCommandError => writeln!(f, "Please specify the main sub-command"),
CLIError::MissingMethodError(ref cmd) => writeln!(f, "Please specify the method to call on the '{}' command", cmd),
} }
} }
} }
@@ -399,7 +457,7 @@ pub fn assure_config_dir_exists(dir: &str) -> Result<String, CLIError> {
pub fn application_secret_from_directory(dir: &str, pub fn application_secret_from_directory(dir: &str,
secret_basename: &str, secret_basename: &str,
json_app_secret: &str) json_console_secret: &str)
-> Result<ApplicationSecret, CLIError> { -> Result<ApplicationSecret, CLIError> {
let secret_path = Path::new(dir).join(secret_basename); let secret_path = Path::new(dir).join(secret_basename);
let secret_str = || secret_path.as_path().to_str().unwrap().to_string(); 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 = match fs::OpenOptions::new().create(true).write(true).open(&secret_path) {
Err(cfe) => cfe, Err(cfe) => cfe,
Ok(mut f) => { 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, Err(io_err) => io_err,
Ok(_) => continue, Ok(_) => continue,
} }
@@ -429,23 +490,24 @@ pub fn application_secret_from_directory(dir: &str,
return secret_io_error(err) return secret_io_error(err)
}, },
Ok(mut f) => { Ok(mut f) => {
let mut json_encoded_secret = String::new(); match json::de::from_reader::<_, ConsoleApplicationSecret>(f) {
if let Err(io_err) = f.read_to_string(&mut json_encoded_secret) { Err(json::Error::IoError(err)) =>
return secret_io_error(io_err) return secret_io_error(err),
} Err(json_err) =>
match json::decode::<ConsoleApplicationSecret>(&json_encoded_secret) { return Err(CLIError::Configuration(
Err(json_decode_error) => return Err(CLIError::Configuration( ConfigurationError::Secret(
ConfigurationError::Secret(ApplicationSecretError::DecoderError( ApplicationSecretError::DecoderError(
(secret_str(), json_decode_error) (secret_str(), json_err)
)))), )))),
Ok(console_secret) => match console_secret.installed { Ok(console_secret) =>
Some(secret) => return Ok(secret), match console_secret.installed {
None => return Err( Some(secret) => return Ok(secret),
CLIError::Configuration( None => return Err(
ConfigurationError::Secret( CLIError::Configuration(
ApplicationSecretError::FormatError(secret_str()) ConfigurationError::Secret(
))) ApplicationSecretError::FormatError(secret_str())
}, )))
},
} }
} }
} }

View File

@@ -2,13 +2,11 @@
// This file was generated automatically from 'src/mako/cli/main.rs.mako' // This file was generated automatically from 'src/mako/cli/main.rs.mako'
// DO NOT EDIT ! // DO NOT EDIT !
#![feature(plugin, exit_status)] #![feature(plugin, exit_status)]
#![plugin(docopt_macros)]
#![allow(unused_variables, unused_imports, dead_code, unused_mut)] #![allow(unused_variables, unused_imports, dead_code, unused_mut)]
extern crate docopt; extern crate clap;
extern crate yup_oauth2 as oauth2; extern crate yup_oauth2 as oauth2;
extern crate yup_hyper_mock as mock; extern crate yup_hyper_mock as mock;
extern crate rustc_serialize;
extern crate serde; extern crate serde;
extern crate hyper; extern crate hyper;
extern crate mime; extern crate mime;
@@ -16,53 +14,37 @@ extern crate google_groupsmigration1 as api;
use std::env; use std::env;
use std::io::{self, Write}; use std::io::{self, Write};
use clap::{App, SubCommand, Arg};
docopt!(Options derive Debug, "
Usage:
groupsmigration1 [options] archive insert <group-id> -u (simple|resumable) <file> <mime> [-p <v>...] [-o <out>]
groupsmigration1 --help
All documentation details can be found at
http://byron.github.io/google-apis-rs/google_groupsmigration1_cli/index.html
Configuration:
--scope <url>
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 <folder>
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.
");
mod cmn; mod cmn;
use cmn::{InvalidOptionsError, CLIError, JsonTokenStorage, arg_from_str, writer_from_opts, parse_kv_arg, 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::default::Default;
use std::str::FromStr; use std::str::FromStr;
use oauth2::{Authenticator, DefaultAuthenticatorDelegate}; use oauth2::{Authenticator, DefaultAuthenticatorDelegate};
use rustc_serialize::json; use serde::json;
use clap::ArgMatches;
struct Engine { enum DoitError {
opt: Options, IoError(String, io::Error),
ApiError(api::Error),
}
struct Engine<'n, 'a> {
opt: ArgMatches<'n, 'a>,
hub: api::GroupsMigration<hyper::Client, Authenticator<DefaultAuthenticatorDelegate, JsonTokenStorage, hyper::Client>>, hub: api::GroupsMigration<hyper::Client, Authenticator<DefaultAuthenticatorDelegate, JsonTokenStorage, hyper::Client>>,
} }
impl Engine { impl<'n, 'a> Engine<'n, 'a> {
fn _archive_insert(&self, dry_run: bool, err: &mut InvalidOptionsError) fn _archive_insert(&self, opt: &ArgMatches<'n, 'a>, dry_run: bool, err: &mut InvalidOptionsError)
-> Option<api::Error> { -> Result<(), DoitError> {
let mut call = self.hub.archive().insert(&self.opt.arg_group_id); let mut call = self.hub.archive().insert(opt.value_of("group-id").unwrap_or(""));
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); let (key, value) = parse_kv_arg(&*parg, err, false);
match key { match key {
"alt" "alt"
@@ -83,65 +65,71 @@ impl Engine {
_ => err.issues.push(CLIError::UnknownParameter(key.to_string())), _ => err.issues.push(CLIError::UnknownParameter(key.to_string())),
} }
} }
let protocol = let vals = opt.values_of("mode").unwrap();
if self.opt.cmd_simple { let protocol = protocol_from_str(vals[0], ["simple", "resumable"].iter().map(|&v| v.to_string()).collect(), err);
"simple" let mut input_file = input_file_from_opts(vals[1], err);
} else if self.opt.cmd_resumable { let mime_type = input_mime_from_opts(opt.value_of("mime").unwrap_or("application/octet-stream"), err);
"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);
if dry_run { if dry_run {
None Ok(())
} else { } else {
assert!(err.issues.len() == 0); assert!(err.issues.len() == 0);
if self.opt.flag_scope.len() > 0 { for scope in self.opt.values_of("url").unwrap_or(Vec::new()).iter() {
call = call.add_scope(&self.opt.flag_scope); 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 { match match protocol {
"simple" => call.upload(input_file.unwrap(), mime_type.unwrap()), CallType::Upload(UploadProtocol::Simple) => call.upload(input_file.unwrap(), mime_type.unwrap()),
"resumable" => call.upload_resumable(input_file.unwrap(), mime_type.unwrap()), CallType::Upload(UploadProtocol::Resumable) => call.upload_resumable(input_file.unwrap(), mime_type.unwrap()),
_ => unreachable!(), CallType::Standard => unreachable!()
} { } {
Err(api_err) => Some(api_err), Err(api_err) => Err(DoitError::ApiError(api_err)),
Ok((mut response, output_schema)) => { Ok((mut response, output_schema)) => {
serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap(); serde::json::to_writer_pretty(&mut ostream, &output_schema).unwrap();
None Ok(())
} }
} }
} }
} }
fn _doit(&self, dry_run: bool) -> (Option<api::Error>, Option<InvalidOptionsError>) { fn _doit(&self, dry_run: bool) -> Result<Result<(), DoitError>, Option<InvalidOptionsError>> {
let mut err = InvalidOptionsError::new(); let mut err = InvalidOptionsError::new();
let mut call_result: Option<api::Error>; let mut call_result: Result<(), DoitError> = Ok(());
let mut err_opt: Option<InvalidOptionsError> = None; let mut err_opt: Option<InvalidOptionsError> = None;
match self.opt.subcommand() {
if self.opt.cmd_archive { ("archive", Some(opt)) => {
if self.opt.cmd_insert { match opt.subcommand() {
call_result = self._archive_insert(dry_run, &mut err); ("insert", Some(opt)) => {
} else { call_result = self._archive_insert(opt, dry_run, &mut err);
unreachable!(); },
_ => {
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 dry_run {
if err.issues.len() > 0 { if err.issues.len() > 0 {
err_opt = Some(err); 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 // Please note that this call will fail if any part of the opt can't be handled
fn new(opt: Options) -> Result<Engine, InvalidOptionsError> { fn new(opt: ArgMatches<'a, 'n>) -> Result<Engine<'a, 'n>, InvalidOptionsError> {
let (config_dir, secret) = { 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)), Err(e) => return Err(InvalidOptionsError::single(e, 3)),
Ok(p) => p, Ok(p) => p,
}; };
@@ -154,7 +142,7 @@ impl Engine {
}; };
let auth = Authenticator::new( &secret, DefaultAuthenticatorDelegate, let auth = Authenticator::new( &secret, DefaultAuthenticatorDelegate,
if opt.flag_debug_auth { if opt.is_present("debug-auth") {
hyper::Client::with_connector(mock::TeeConnector { hyper::Client::with_connector(mock::TeeConnector {
connector: hyper::net::HttpConnector(None) connector: hyper::net::HttpConnector(None)
}) })
@@ -167,7 +155,7 @@ impl Engine {
}, None); }, None);
let client = let client =
if opt.flag_debug { if opt.is_present("debug") {
hyper::Client::with_connector(mock::TeeConnector { hyper::Client::with_connector(mock::TeeConnector {
connector: hyper::net::HttpConnector(None) connector: hyper::net::HttpConnector(None)
}) })
@@ -180,34 +168,153 @@ impl Engine {
}; };
match engine._doit(true) { match engine._doit(true) {
(_, Some(err)) => Err(err), Err(Some(err)) => Err(err),
_ => Ok(engine), Err(None) => Ok(engine),
Ok(_) => unreachable!(),
} }
} }
// Execute the call with all the bells and whistles, informing the caller only if there was an error. fn doit(&self) -> Result<(), DoitError> {
// The absense of one indicates success. match self._doit(false) {
fn doit(&self) -> Option<api::Error> { Ok(res) => res,
self._doit(false).0 Err(_) => unreachable!(),
}
} }
} }
fn main() { fn main() {
let opts: Options = Options::docopt().decode().unwrap_or_else(|e| e.exit()); let upload_value_names = ["mode", "file"];
let debug = opts.flag_debug; let arg_data = [
match Engine::new(opts) { ("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 <byronimo@gmail.com>")
.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) => { Err(err) => {
writeln!(io::stderr(), "{}", err).ok();
env::set_exit_status(err.exit_code); env::set_exit_status(err.exit_code);
writeln!(io::stderr(), "{}", err).ok();
}, },
Ok(engine) => { Ok(engine) => {
if let Some(err) = engine.doit() { if let Err(doit_err) = engine.doit() {
if debug {
writeln!(io::stderr(), "{:?}", err).ok();
} else {
writeln!(io::stderr(), "{}", err).ok();
}
env::set_exit_status(1); 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();
}
}
}
} }
} }
} }

View File

@@ -4,7 +4,7 @@
[package] [package]
name = "google-groupsmigration1" name = "google-groupsmigration1"
version = "0.1.6+20140416" version = "0.1.7+20140416"
authors = ["Sebastian Thiel <byronimo@gmail.com>"] authors = ["Sebastian Thiel <byronimo@gmail.com>"]
description = "A complete library to interact with Groups Migration (protocol v1)" description = "A complete library to interact with Groups Migration (protocol v1)"
repository = "https://github.com/Byron/google-apis-rs/tree/master/gen/groupsmigration1" repository = "https://github.com/Byron/google-apis-rs/tree/master/gen/groupsmigration1"

View File

@@ -5,7 +5,7 @@ DO NOT EDIT !
--> -->
The `google-groupsmigration1` library allows access to all features of the *Google Groups Migration* service. 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 Everything else about the *Groups Migration* *v1* API can be found at the
[official documentation site](https://developers.google.com/google-apps/groups-migration/). [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 * [PODs][wiki-pod] are handed by copy
* strings are passed as `&str` * 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. Arguments will always be copied or cloned into the builder, to make them independent of their original life times.

View File

@@ -173,7 +173,10 @@ pub trait Delegate {
/// Called after we have retrieved a new upload URL for a resumable upload to store it /// 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()`. /// 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; let _ = url;
} }
@@ -459,6 +462,16 @@ impl<'a> Read for MultiPartReader<'a> {
header!{ header!{
#[doc="The `X-Upload-Content-Type` header."] #[doc="The `X-Upload-Content-Type` header."]
(XUploadContentType, "X-Upload-Content-Type") => [Mime] (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)] #[derive(Clone, PartialEq, Debug)]

View File

@@ -2,7 +2,7 @@
// This file was generated automatically from 'src/mako/api/lib.rs.mako' // This file was generated automatically from 'src/mako/api/lib.rs.mako'
// DO NOT EDIT ! // 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 //! Everything else about the *Groups Migration* *v1* API can be found at the
//! [official documentation site](https://developers.google.com/google-apps/groups-migration/). //! [official documentation site](https://developers.google.com/google-apps/groups-migration/).
@@ -163,7 +163,7 @@
//! //!
//! * [PODs][wiki-pod] are handed by copy //! * [PODs][wiki-pod] are handed by copy
//! * strings are passed as `&str` //! * 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. //! Arguments will always be copied or cloned into the builder, to make them independent of their original life times.
//! //!
@@ -172,7 +172,6 @@
//! [google-go-api]: https://github.com/google/google-api-go-client //! [google-go-api]: https://github.com/google/google-api-go-client
//! //!
//! //!
#![feature(std_misc)]
// Unused attributes happen thanks to defined, but unused structures // 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. // 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
@@ -201,7 +200,10 @@ use std::io;
use std::fs; use std::fs;
use std::thread::sleep_ms; 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<C, A>
GroupsMigration { GroupsMigration {
client: RefCell::new(client), client: RefCell::new(client),
auth: RefCell::new(authenticator), 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<C, A>
} }
/// Set the user-agent header field to use in all requests to the server. /// 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. /// Returns the previously set user-agent.
pub fn user_agent(&mut self, agent_name: String) -> String { pub fn user_agent(&mut self, agent_name: String) -> String {
@@ -465,10 +467,16 @@ impl<'a, C, A> ArchiveInsertCall<'a, C, A> where C: BorrowMut<hyper::Client>, A:
/// Perform the operation you have build so far. /// Perform the operation you have build so far.
fn doit<RS>(mut self, mut reader: RS, reader_mime_type: mime::Mime, protocol: &'static str) -> Result<(hyper::client::Response, Groups)> fn doit<RS>(mut self,
where RS: ReadSeek { 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 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 dd = DefaultDelegate;
let mut dlg: &mut Delegate = match self._delegate { let mut dlg: &mut Delegate = match self._delegate {
Some(d) => d, Some(d) => d,
@@ -568,7 +576,7 @@ impl<'a, C, A> ArchiveInsertCall<'a, C, A> where C: BorrowMut<hyper::Client>, A:
response response
} else { } else {
let mut client = &mut *self.hub.client.borrow_mut(); 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(UserAgent(self.hub._user_agent.clone()))
.header(auth_header.clone()); .header(auth_header.clone());
if protocol == "simple" { if protocol == "simple" {
@@ -626,7 +634,7 @@ impl<'a, C, A> ArchiveInsertCall<'a, C, A> where C: BorrowMut<hyper::Client>, A:
let upload_result = { let upload_result = {
let url_str = &res.headers.get::<Location>().expect("Location header is part of protocol").0; let url_str = &res.headers.get::<Location>().expect("Location header is part of protocol").0;
if upload_url_from_server { if upload_url_from_server {
dlg.store_upload_url(url_str); dlg.store_upload_url(Some(url_str));
} }
cmn::ResumableUploadHelper { cmn::ResumableUploadHelper {
@@ -654,6 +662,7 @@ impl<'a, C, A> ArchiveInsertCall<'a, C, A> where C: BorrowMut<hyper::Client>, A:
Some(Ok(upload_result)) => { Some(Ok(upload_result)) => {
res = upload_result; res = upload_result;
if !res.status.is_success() { if !res.status.is_success() {
dlg.store_upload_url(None);
dlg.finished(false); dlg.finished(false);
return Err(Error::Failure(res)) return Err(Error::Failure(res))
} }
@@ -685,8 +694,12 @@ impl<'a, C, A> ArchiveInsertCall<'a, C, A> where C: BorrowMut<hyper::Client>, A:
/// * *max size*: 16MB /// * *max size*: 16MB
/// * *multipart*: yes /// * *multipart*: yes
/// * *valid mime types*: 'message/rfc822' /// * *valid mime types*: 'message/rfc822'
pub fn upload<RS>(self, stream: RS, mime_type: mime::Mime) -> Result<(hyper::client::Response, Groups)> pub fn upload<RS>(self,
where RS: ReadSeek { stream: RS,
mime_type: mime::Mime)
-> Result<(hyper::client::Response, Groups)>
where RS: ReadSeek
{
self.doit(stream, mime_type, "simple") self.doit(stream, mime_type, "simple")
} }
/// Upload media in a resumable fashion. /// Upload media in a resumable fashion.
@@ -701,8 +714,12 @@ impl<'a, C, A> ArchiveInsertCall<'a, C, A> where C: BorrowMut<hyper::Client>, A:
/// * *max size*: 16MB /// * *max size*: 16MB
/// * *multipart*: yes /// * *multipart*: yes
/// * *valid mime types*: 'message/rfc822' /// * *valid mime types*: 'message/rfc822'
pub fn upload_resumable<RS>(self, resumeable_stream: RS, mime_type: mime::Mime) -> Result<(hyper::client::Response, Groups)> pub fn upload_resumable<RS>(self,
where RS: ReadSeek { resumeable_stream: RS,
mime_type: mime::Mime)
-> Result<(hyper::client::Response, Groups)>
where RS: ReadSeek
{
self.doit(resumeable_stream, mime_type, "resumable") self.doit(resumeable_stream, mime_type, "resumable")
} }
@@ -744,7 +761,8 @@ impl<'a, C, A> ArchiveInsertCall<'a, C, A> where C: BorrowMut<hyper::Client>, A:
/// * *fields* (query-string) - Selector specifying which fields to include in a partial response. /// * *fields* (query-string) - Selector specifying which fields to include in a partial response.
/// * *alt* (query-string) - Data format for the response. /// * *alt* (query-string) - Data format for the response.
pub fn param<T>(mut self, name: T, value: T) -> ArchiveInsertCall<'a, C, A> pub fn param<T>(mut self, name: T, value: T) -> ArchiveInsertCall<'a, C, A>
where T: AsRef<str> { where T: AsRef<str>
{
self._additional_params.insert(name.as_ref().to_string(), value.as_ref().to_string()); self._additional_params.insert(name.as_ref().to_string(), value.as_ref().to_string());
self self
} }
@@ -761,10 +779,9 @@ impl<'a, C, A> ArchiveInsertCall<'a, C, A> where C: BorrowMut<hyper::Client>, A:
/// encompass more rights than others. For example, for listing resources, a *read-only* scope will be /// 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. /// sufficient, a read-write scope will do as well.
pub fn add_scope<T>(mut self, scope: T) -> ArchiveInsertCall<'a, C, A> pub fn add_scope<T>(mut self, scope: T) -> ArchiveInsertCall<'a, C, A>
where T: AsRef<str> { where T: AsRef<str>
{
self._scopes.insert(scope.as_ref().to_string(), ()); self._scopes.insert(scope.as_ref().to_string(), ());
self self
} }
} }

View File

@@ -21,7 +21,6 @@ hyper = "*"
mime = "*" mime = "*"
yup-oauth2 = "*" yup-oauth2 = "*"
clap = "*" clap = "*"
rustc-serialize = "*"
yup-hyper-mock = "*" yup-hyper-mock = "*"
serde = ">= 0.3.0" serde = ">= 0.3.0"
serde_macros = "*" serde_macros = "*"

View File

@@ -18,74 +18,96 @@ 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*. This documentation was generated from the *YouTube* API at revision *20150414*. The CLI is at version *0.2.0*.
```bash ```bash
youtube3 [options] activities insert -r <kv>... [-p <v>...] [-o <out>] youtube3 [options]
youtube3 [options] activities list <part> [-p <v>...] [-o <out>] activities
youtube3 [options] captions delete <id> [-p <v>...] insert (-r <kv>)... [-p <v>]... [-o <out>]
youtube3 [options] captions download <id> [-p <v>...] [-o <out>] list <part> [-p <v>]... [-o <out>]
youtube3 [options] captions insert -r <kv>... -u (simple|resumable) <file> <mime> [-p <v>...] [-o <out>] captions
youtube3 [options] captions list <part> <video-id> [-p <v>...] [-o <out>] delete <id> [-p <v>]...
youtube3 [options] captions update -r <kv>... -u (simple|resumable) <file> <mime> [-p <v>...] [-o <out>] download <id> [-p <v>]... [-o <out>]
youtube3 [options] channel-banners insert -r <kv>... -u (simple|resumable) <file> <mime> [-p <v>...] [-o <out>] insert (-r <kv>)... (-u (simple|resumable) -f <file> [-m <mime>]) [-p <v>]... [-o <out>]
youtube3 [options] channel-sections delete <id> [-p <v>...] list <part> <video-id> [-p <v>]... [-o <out>]
youtube3 [options] channel-sections insert -r <kv>... [-p <v>...] [-o <out>] update (-r <kv>)... (-u (simple|resumable) -f <file> [-m <mime>]) [-p <v>]... [-o <out>]
youtube3 [options] channel-sections list <part> [-p <v>...] [-o <out>] channel-banners
youtube3 [options] channel-sections update -r <kv>... [-p <v>...] [-o <out>] insert (-r <kv>)... (-u (simple|resumable) -f <file> [-m <mime>]) [-p <v>]... [-o <out>]
youtube3 [options] channels list <part> [-p <v>...] [-o <out>] channel-sections
youtube3 [options] channels update -r <kv>... [-p <v>...] [-o <out>] delete <id> [-p <v>]...
youtube3 [options] comment-threads insert -r <kv>... [-p <v>...] [-o <out>] insert (-r <kv>)... [-p <v>]... [-o <out>]
youtube3 [options] comment-threads list <part> [-p <v>...] [-o <out>] list <part> [-p <v>]... [-o <out>]
youtube3 [options] comment-threads update -r <kv>... [-p <v>...] [-o <out>] update (-r <kv>)... [-p <v>]... [-o <out>]
youtube3 [options] comments delete <id> [-p <v>...] channels
youtube3 [options] comments insert -r <kv>... [-p <v>...] [-o <out>] list <part> [-p <v>]... [-o <out>]
youtube3 [options] comments list <part> [-p <v>...] [-o <out>] update (-r <kv>)... [-p <v>]... [-o <out>]
youtube3 [options] comments mark-as-spam <id> [-p <v>...] comment-threads
youtube3 [options] comments set-moderation-status <id> <moderation-status> [-p <v>...] insert (-r <kv>)... [-p <v>]... [-o <out>]
youtube3 [options] comments update -r <kv>... [-p <v>...] [-o <out>] list <part> [-p <v>]... [-o <out>]
youtube3 [options] guide-categories list <part> [-p <v>...] [-o <out>] update (-r <kv>)... [-p <v>]... [-o <out>]
youtube3 [options] i18n-languages list <part> [-p <v>...] [-o <out>] comments
youtube3 [options] i18n-regions list <part> [-p <v>...] [-o <out>] delete <id> [-p <v>]...
youtube3 [options] live-broadcasts bind <id> <part> [-p <v>...] [-o <out>] insert (-r <kv>)... [-p <v>]... [-o <out>]
youtube3 [options] live-broadcasts control <id> <part> [-p <v>...] [-o <out>] list <part> [-p <v>]... [-o <out>]
youtube3 [options] live-broadcasts delete <id> [-p <v>...] mark-as-spam <id> [-p <v>]...
youtube3 [options] live-broadcasts insert -r <kv>... [-p <v>...] [-o <out>] set-moderation-status <id> <moderation-status> [-p <v>]...
youtube3 [options] live-broadcasts list <part> [-p <v>...] [-o <out>] update (-r <kv>)... [-p <v>]... [-o <out>]
youtube3 [options] live-broadcasts transition <broadcast-status> <id> <part> [-p <v>...] [-o <out>] guide-categories
youtube3 [options] live-broadcasts update -r <kv>... [-p <v>...] [-o <out>] list <part> [-p <v>]... [-o <out>]
youtube3 [options] live-streams delete <id> [-p <v>...] i18n-languages
youtube3 [options] live-streams insert -r <kv>... [-p <v>...] [-o <out>] list <part> [-p <v>]... [-o <out>]
youtube3 [options] live-streams list <part> [-p <v>...] [-o <out>] i18n-regions
youtube3 [options] live-streams update -r <kv>... [-p <v>...] [-o <out>] list <part> [-p <v>]... [-o <out>]
youtube3 [options] playlist-items delete <id> [-p <v>...] live-broadcasts
youtube3 [options] playlist-items insert -r <kv>... [-p <v>...] [-o <out>] bind <id> <part> [-p <v>]... [-o <out>]
youtube3 [options] playlist-items list <part> [-p <v>...] [-o <out>] control <id> <part> [-p <v>]... [-o <out>]
youtube3 [options] playlist-items update -r <kv>... [-p <v>...] [-o <out>] delete <id> [-p <v>]...
youtube3 [options] playlists delete <id> [-p <v>...] insert (-r <kv>)... [-p <v>]... [-o <out>]
youtube3 [options] playlists insert -r <kv>... [-p <v>...] [-o <out>] list <part> [-p <v>]... [-o <out>]
youtube3 [options] playlists list <part> [-p <v>...] [-o <out>] transition <broadcast-status> <id> <part> [-p <v>]... [-o <out>]
youtube3 [options] playlists update -r <kv>... [-p <v>...] [-o <out>] update (-r <kv>)... [-p <v>]... [-o <out>]
youtube3 [options] search list <part> [-p <v>...] [-o <out>] live-streams
youtube3 [options] subscriptions delete <id> [-p <v>...] delete <id> [-p <v>]...
youtube3 [options] subscriptions insert -r <kv>... [-p <v>...] [-o <out>] insert (-r <kv>)... [-p <v>]... [-o <out>]
youtube3 [options] subscriptions list <part> [-p <v>...] [-o <out>] list <part> [-p <v>]... [-o <out>]
youtube3 [options] thumbnails set <video-id> -u (simple|resumable) <file> <mime> [-p <v>...] [-o <out>] update (-r <kv>)... [-p <v>]... [-o <out>]
youtube3 [options] video-abuse-report-reasons list <part> [-p <v>...] [-o <out>] playlist-items
youtube3 [options] video-categories list <part> [-p <v>...] [-o <out>] delete <id> [-p <v>]...
youtube3 [options] videos delete <id> [-p <v>...] insert (-r <kv>)... [-p <v>]... [-o <out>]
youtube3 [options] videos get-rating <id> [-p <v>...] [-o <out>] list <part> [-p <v>]... [-o <out>]
youtube3 [options] videos insert -r <kv>... -u (simple|resumable) <file> <mime> [-p <v>...] [-o <out>] update (-r <kv>)... [-p <v>]... [-o <out>]
youtube3 [options] videos list <part> [-p <v>...] [-o <out>] playlists
youtube3 [options] videos rate <id> <rating> [-p <v>...] delete <id> [-p <v>]...
youtube3 [options] videos report-abuse -r <kv>... [-p <v>...] insert (-r <kv>)... [-p <v>]... [-o <out>]
youtube3 [options] videos update -r <kv>... [-p <v>...] [-o <out>] list <part> [-p <v>]... [-o <out>]
youtube3 [options] watermarks set <channel-id> -r <kv>... -u (simple|resumable) <file> <mime> [-p <v>...] update (-r <kv>)... [-p <v>]... [-o <out>]
youtube3 [options] watermarks unset <channel-id> [-p <v>...] search
list <part> [-p <v>]... [-o <out>]
subscriptions
delete <id> [-p <v>]...
insert (-r <kv>)... [-p <v>]... [-o <out>]
list <part> [-p <v>]... [-o <out>]
thumbnails
set <video-id> (-u (simple|resumable) -f <file> [-m <mime>]) [-p <v>]... [-o <out>]
video-abuse-report-reasons
list <part> [-p <v>]... [-o <out>]
video-categories
list <part> [-p <v>]... [-o <out>]
videos
delete <id> [-p <v>]...
get-rating <id> [-p <v>]... [-o <out>]
insert (-r <kv>)... (-u (simple|resumable) -f <file> [-m <mime>]) [-p <v>]... [-o <out>]
list <part> [-p <v>]... [-o <out>]
rate <id> <rating> [-p <v>]...
report-abuse (-r <kv>)... [-p <v>]...
update (-r <kv>)... [-p <v>]... [-o <out>]
watermarks
set <channel-id> (-r <kv>)... (-u (simple|resumable) -f <file> [-m <mime>]) [-p <v>]...
unset <channel-id> [-p <v>]...
youtube3 --help youtube3 --help
All documentation details can be found at 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: Configuration:
--scope <url> [--scope <url>]...
Specify the authentication a method should be executed in. Each 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. If unset, it defaults to the shortest scope url for a particular method.

View File

@@ -1,8 +1,9 @@
// COPY OF 'src/rust/cli/cmn.rs' // COPY OF 'src/rust/cli/cmn.rs'
// DO NOT EDIT // DO NOT EDIT
use oauth2::{ApplicationSecret, ConsoleApplicationSecret, TokenStorage, Token}; use oauth2::{ApplicationSecret, ConsoleApplicationSecret, TokenStorage, Token};
use rustc_serialize::json; use serde::json;
use mime::Mime; use mime::Mime;
use clap::{App, SubCommand};
use std::fs; use std::fs;
use std::env; use std::env;
@@ -17,6 +18,46 @@ use std::default::Default;
const FIELD_SEP: char = '.'; const FIELD_SEP: char = '.';
pub enum CallType {
Upload(UploadProtocol),
Standard,
}
pub enum UploadProtocol {
Simple,
Resumable,
}
impl AsRef<str> for UploadProtocol {
fn as_ref(&self) -> &str {
match *self {
UploadProtocol::Simple => "simple",
UploadProtocol::Resumable => "resumable"
}
}
}
impl AsRef<str> 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<UploadProtocol, String> {
match s {
"simple" => Ok(UploadProtocol::Simple),
"resumable" => Ok(UploadProtocol::Resumable),
_ => Err(format!("Protocol '{}' is unknown", s)),
}
}
}
#[derive(Clone, Default)] #[derive(Clone, Default)]
pub struct FieldCursor(Vec<String>); pub struct FieldCursor(Vec<String>);
@@ -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<String>, err: &mut InvalidOptionsError) -> CallType {
CallType::Upload(
match UploadProtocol::from_str(name) {
Ok(up) => up,
Err(msg) => {
err.issues.push(CLIError::InvalidUploadProtocol(name.to_string(), valid_protocols));
UploadProtocol::Simple
}
})
}
pub fn input_file_from_opts(file_path: &str, err: &mut InvalidOptionsError) -> Option<fs::File> { pub fn input_file_from_opts(file_path: &str, err: &mut InvalidOptionsError) -> Option<fs::File> {
match fs::File::open(file_path) { match fs::File::open(file_path) {
Ok(f) => Some(f), 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 pub fn writer_from_opts(arg: Option<&str>) -> Result<Box<Write>, io::Error> {
// kind of error: TODO: fix this architecture :) let f = arg.unwrap_or("-");
pub fn writer_from_opts(flag: bool, arg: &str) -> Box<Write> { match f {
if !flag || arg == "-" { "-" => Ok(Box::new(stdout())),
Box::new(stdout()) _ => match fs::OpenOptions::new().create(true).write(true).open(f) {
} else { Ok(f) => Ok(Box::new(f)),
Box::new(fs::OpenOptions::new().create(true).write(true).open(arg).unwrap()) Err(io_err) => Err(io_err),
}
} }
} }
@@ -151,7 +204,7 @@ pub fn arg_from_str<T>(arg: &str, err: &mut InvalidOptionsError,
match FromStr::from_str(arg) { match FromStr::from_str(arg) {
Err(perr) => { Err(perr) => {
err.issues.push( 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() Default::default()
}, },
@@ -171,49 +224,47 @@ impl JsonTokenStorage {
} }
impl TokenStorage for JsonTokenStorage { impl TokenStorage for JsonTokenStorage {
type Error = io::Error; type Error = json::Error;
// NOTE: logging might be interesting, currently we swallow all errors // NOTE: logging might be interesting, currently we swallow all errors
fn set(&mut self, scope_hash: u64, _: &Vec<&str>, token: Option<Token>) -> Option<io::Error> { fn set(&mut self, scope_hash: u64, _: &Vec<&str>, token: Option<Token>) -> Result<(), json::Error> {
match token { match token {
None => { None => {
match fs::remove_file(self.path(scope_hash)) { match fs::remove_file(self.path(scope_hash)) {
Err(err) => Err(err) =>
match err.kind() { match err.kind() {
io::ErrorKind::NotFound => None, io::ErrorKind::NotFound => Ok(()),
_ => Some(err) _ => Err(json::Error::IoError(err))
}, },
Ok(_) => None Ok(_) => Ok(()),
} }
} }
Some(token) => { Some(token) => {
let json_token = json::encode(&token).unwrap();
match fs::OpenOptions::new().create(true).write(true).open(&self.path(scope_hash)) { match fs::OpenOptions::new().create(true).write(true).open(&self.path(scope_hash)) {
Ok(mut f) => { Ok(mut f) => {
match f.write(json_token.as_bytes()) { match json::to_writer_pretty(&mut f, &token) {
Ok(_) => None, Ok(_) => Ok(()),
Err(io_err) => Some(io_err), 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<Option<Token>, io::Error> { fn get(&self, scope_hash: u64, _: &Vec<&str>) -> Result<Option<Token>, json::Error> {
match fs::File::open(&self.path(scope_hash)) { match fs::File::open(&self.path(scope_hash)) {
Ok(mut f) => { Ok(mut f) => {
let mut json_string = String::new(); match json::de::from_reader(f) {
match f.read_to_string(&mut json_string) { Ok(token) => Ok(Some(token)),
Ok(_) => Ok(Some(json::decode::<Token>(&json_string).unwrap())), Err(err) => Err(err),
Err(io_err) => Err(io_err),
} }
}, },
Err(io_err) => { Err(io_err) => {
match io_err.kind() { match io_err.kind() {
io::ErrorKind::NotFound => Ok(None), io::ErrorKind::NotFound => Ok(None),
_ => Err(io_err) _ => Err(json::Error::IoError(io_err))
} }
} }
} }
@@ -223,7 +274,7 @@ impl TokenStorage for JsonTokenStorage {
#[derive(Debug)] #[derive(Debug)]
pub enum ApplicationSecretError { pub enum ApplicationSecretError {
DecoderError((String, json::DecoderError)), DecoderError((String, json::Error)),
FormatError(String), FormatError(String),
} }
@@ -311,11 +362,14 @@ impl fmt::Display for FieldError {
#[derive(Debug)] #[derive(Debug)]
pub enum CLIError { pub enum CLIError {
Configuration(ConfigurationError), Configuration(ConfigurationError),
ParseError((&'static str, &'static str, String, String)), ParseError(&'static str, &'static str, String, String),
UnknownParameter(String), UnknownParameter(String),
InvalidUploadProtocol(String, Vec<String>),
InvalidKeyValueSyntax(String, bool), InvalidKeyValueSyntax(String, bool),
Input(InputError), Input(InputError),
Field(FieldError), Field(FieldError),
MissingCommandError,
MissingMethodError(String),
} }
impl fmt::Display for CLIError { impl fmt::Display for CLIError {
@@ -324,7 +378,9 @@ impl fmt::Display for CLIError {
CLIError::Configuration(ref err) => write!(f, "Configuration -> {}", err), CLIError::Configuration(ref err) => write!(f, "Configuration -> {}", err),
CLIError::Input(ref err) => write!(f, "Input -> {}", err), CLIError::Input(ref err) => write!(f, "Input -> {}", err),
CLIError::Field(ref err) => write!(f, "Field -> {}", 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: {}", => writeln!(f, "Failed to parse argument '{}' with value '{}' as {} with error: {}",
arg_name, value, type_name, err_desc), arg_name, value, type_name, err_desc),
CLIError::UnknownParameter(ref param_name) CLIError::UnknownParameter(ref param_name)
@@ -333,6 +389,8 @@ impl fmt::Display for CLIError {
let hashmap_info = if is_hashmap { "hashmap " } else { "" }; let hashmap_info = if is_hashmap { "hashmap " } else { "" };
writeln!(f, "'{}' does not match {}pattern <key>=<value>", kv, hashmap_info) writeln!(f, "'{}' does not match {}pattern <key>=<value>", kv, hashmap_info)
}, },
CLIError::MissingCommandError => writeln!(f, "Please specify the main sub-command"),
CLIError::MissingMethodError(ref cmd) => writeln!(f, "Please specify the method to call on the '{}' command", cmd),
} }
} }
} }
@@ -399,7 +457,7 @@ pub fn assure_config_dir_exists(dir: &str) -> Result<String, CLIError> {
pub fn application_secret_from_directory(dir: &str, pub fn application_secret_from_directory(dir: &str,
secret_basename: &str, secret_basename: &str,
json_app_secret: &str) json_console_secret: &str)
-> Result<ApplicationSecret, CLIError> { -> Result<ApplicationSecret, CLIError> {
let secret_path = Path::new(dir).join(secret_basename); let secret_path = Path::new(dir).join(secret_basename);
let secret_str = || secret_path.as_path().to_str().unwrap().to_string(); 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 = match fs::OpenOptions::new().create(true).write(true).open(&secret_path) {
Err(cfe) => cfe, Err(cfe) => cfe,
Ok(mut f) => { 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, Err(io_err) => io_err,
Ok(_) => continue, Ok(_) => continue,
} }
@@ -429,23 +490,24 @@ pub fn application_secret_from_directory(dir: &str,
return secret_io_error(err) return secret_io_error(err)
}, },
Ok(mut f) => { Ok(mut f) => {
let mut json_encoded_secret = String::new(); match json::de::from_reader::<_, ConsoleApplicationSecret>(f) {
if let Err(io_err) = f.read_to_string(&mut json_encoded_secret) { Err(json::Error::IoError(err)) =>
return secret_io_error(io_err) return secret_io_error(err),
} Err(json_err) =>
match json::decode::<ConsoleApplicationSecret>(&json_encoded_secret) { return Err(CLIError::Configuration(
Err(json_decode_error) => return Err(CLIError::Configuration( ConfigurationError::Secret(
ConfigurationError::Secret(ApplicationSecretError::DecoderError( ApplicationSecretError::DecoderError(
(secret_str(), json_decode_error) (secret_str(), json_err)
)))), )))),
Ok(console_secret) => match console_secret.installed { Ok(console_secret) =>
Some(secret) => return Ok(secret), match console_secret.installed {
None => return Err( Some(secret) => return Ok(secret),
CLIError::Configuration( None => return Err(
ConfigurationError::Secret( CLIError::Configuration(
ApplicationSecretError::FormatError(secret_str()) ConfigurationError::Secret(
))) ApplicationSecretError::FormatError(secret_str())
}, )))
},
} }
} }
} }

File diff suppressed because it is too large Load Diff

View File

@@ -5,7 +5,7 @@ DO NOT EDIT !
--> -->
The `google-youtube3` library allows access to all features of the *Google YouTube* service. 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 Everything else about the *YouTube* *v3* API can be found at the
[official documentation site](https://developers.google.com/youtube/v3). [official documentation site](https://developers.google.com/youtube/v3).

View File

@@ -4,7 +4,7 @@
[package] [package]
name = "google-youtube3" name = "google-youtube3"
version = "0.1.6+20150414" version = "0.1.7+20150414"
authors = ["Sebastian Thiel <byronimo@gmail.com>"] authors = ["Sebastian Thiel <byronimo@gmail.com>"]
description = "A complete library to interact with YouTube (protocol v3)" description = "A complete library to interact with YouTube (protocol v3)"
repository = "https://github.com/Byron/google-apis-rs/tree/master/gen/youtube3" repository = "https://github.com/Byron/google-apis-rs/tree/master/gen/youtube3"

View File

@@ -173,7 +173,10 @@ pub trait Delegate {
/// Called after we have retrieved a new upload URL for a resumable upload to store it /// 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()`. /// 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; let _ = url;
} }
@@ -459,6 +462,16 @@ impl<'a> Read for MultiPartReader<'a> {
header!{ header!{
#[doc="The `X-Upload-Content-Type` header."] #[doc="The `X-Upload-Content-Type` header."]
(XUploadContentType, "X-Upload-Content-Type") => [Mime] (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)] #[derive(Clone, PartialEq, Debug)]

View File

@@ -2,7 +2,7 @@
// This file was generated automatically from 'src/mako/api/lib.rs.mako' // This file was generated automatically from 'src/mako/api/lib.rs.mako'
// DO NOT EDIT ! // 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 //! Everything else about the *YouTube* *v3* API can be found at the
//! [official documentation site](https://developers.google.com/youtube/v3). //! [official documentation site](https://developers.google.com/youtube/v3).
@@ -240,7 +240,6 @@
//! [google-go-api]: https://github.com/google/google-api-go-client //! [google-go-api]: https://github.com/google/google-api-go-client
//! //!
//! //!
#![feature(std_misc)]
// Unused attributes happen thanks to defined, but unused structures // 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. // 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
@@ -402,7 +401,7 @@ impl<'a, C, A> YouTube<C, A>
YouTube { YouTube {
client: RefCell::new(client), client: RefCell::new(client),
auth: RefCell::new(authenticator), 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<C, A>
} }
/// Set the user-agent header field to use in all requests to the server. /// 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. /// Returns the previously set user-agent.
pub fn user_agent(&mut self, agent_name: String) -> String { 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<hyper::Clien
let upload_result = { let upload_result = {
let url_str = &res.headers.get::<Location>().expect("Location header is part of protocol").0; let url_str = &res.headers.get::<Location>().expect("Location header is part of protocol").0;
if upload_url_from_server { if upload_url_from_server {
dlg.store_upload_url(url_str); dlg.store_upload_url(Some(url_str));
} }
cmn::ResumableUploadHelper { cmn::ResumableUploadHelper {
@@ -7605,6 +7604,7 @@ impl<'a, C, A> ChannelBannerInsertCall<'a, C, A> where C: BorrowMut<hyper::Clien
Some(Ok(upload_result)) => { Some(Ok(upload_result)) => {
res = upload_result; res = upload_result;
if !res.status.is_success() { if !res.status.is_success() {
dlg.store_upload_url(None);
dlg.finished(false); dlg.finished(false);
return Err(Error::Failure(res)) return Err(Error::Failure(res))
} }
@@ -10458,7 +10458,7 @@ impl<'a, C, A> ThumbnailSetCall<'a, C, A> where C: BorrowMut<hyper::Client>, A:
let upload_result = { let upload_result = {
let url_str = &res.headers.get::<Location>().expect("Location header is part of protocol").0; let url_str = &res.headers.get::<Location>().expect("Location header is part of protocol").0;
if upload_url_from_server { if upload_url_from_server {
dlg.store_upload_url(url_str); dlg.store_upload_url(Some(url_str));
} }
cmn::ResumableUploadHelper { cmn::ResumableUploadHelper {
@@ -10486,6 +10486,7 @@ impl<'a, C, A> ThumbnailSetCall<'a, C, A> where C: BorrowMut<hyper::Client>, A:
Some(Ok(upload_result)) => { Some(Ok(upload_result)) => {
res = upload_result; res = upload_result;
if !res.status.is_success() { if !res.status.is_success() {
dlg.store_upload_url(None);
dlg.finished(false); dlg.finished(false);
return Err(Error::Failure(res)) return Err(Error::Failure(res))
} }
@@ -12502,7 +12503,7 @@ impl<'a, C, A> VideoInsertCall<'a, C, A> where C: BorrowMut<hyper::Client>, A: o
let upload_result = { let upload_result = {
let url_str = &res.headers.get::<Location>().expect("Location header is part of protocol").0; let url_str = &res.headers.get::<Location>().expect("Location header is part of protocol").0;
if upload_url_from_server { if upload_url_from_server {
dlg.store_upload_url(url_str); dlg.store_upload_url(Some(url_str));
} }
cmn::ResumableUploadHelper { cmn::ResumableUploadHelper {
@@ -12530,6 +12531,7 @@ impl<'a, C, A> VideoInsertCall<'a, C, A> where C: BorrowMut<hyper::Client>, A: o
Some(Ok(upload_result)) => { Some(Ok(upload_result)) => {
res = upload_result; res = upload_result;
if !res.status.is_success() { if !res.status.is_success() {
dlg.store_upload_url(None);
dlg.finished(false); dlg.finished(false);
return Err(Error::Failure(res)) return Err(Error::Failure(res))
} }
@@ -20182,7 +20184,7 @@ impl<'a, C, A> WatermarkSetCall<'a, C, A> where C: BorrowMut<hyper::Client>, A:
let upload_result = { let upload_result = {
let url_str = &res.headers.get::<Location>().expect("Location header is part of protocol").0; let url_str = &res.headers.get::<Location>().expect("Location header is part of protocol").0;
if upload_url_from_server { if upload_url_from_server {
dlg.store_upload_url(url_str); dlg.store_upload_url(Some(url_str));
} }
cmn::ResumableUploadHelper { cmn::ResumableUploadHelper {
@@ -20210,6 +20212,7 @@ impl<'a, C, A> WatermarkSetCall<'a, C, A> where C: BorrowMut<hyper::Client>, A:
Some(Ok(upload_result)) => { Some(Ok(upload_result)) => {
res = upload_result; res = upload_result;
if !res.status.is_success() { if !res.status.is_success() {
dlg.store_upload_url(None);
dlg.finished(false); dlg.finished(false);
return Err(Error::Failure(res)) return Err(Error::Failure(res))
} }
@@ -23087,7 +23090,7 @@ impl<'a, C, A> CaptionInsertCall<'a, C, A> where C: BorrowMut<hyper::Client>, A:
let upload_result = { let upload_result = {
let url_str = &res.headers.get::<Location>().expect("Location header is part of protocol").0; let url_str = &res.headers.get::<Location>().expect("Location header is part of protocol").0;
if upload_url_from_server { if upload_url_from_server {
dlg.store_upload_url(url_str); dlg.store_upload_url(Some(url_str));
} }
cmn::ResumableUploadHelper { cmn::ResumableUploadHelper {
@@ -23115,6 +23118,7 @@ impl<'a, C, A> CaptionInsertCall<'a, C, A> where C: BorrowMut<hyper::Client>, A:
Some(Ok(upload_result)) => { Some(Ok(upload_result)) => {
res = upload_result; res = upload_result;
if !res.status.is_success() { if !res.status.is_success() {
dlg.store_upload_url(None);
dlg.finished(false); dlg.finished(false);
return Err(Error::Failure(res)) return Err(Error::Failure(res))
} }
@@ -24044,7 +24048,7 @@ impl<'a, C, A> CaptionUpdateCall<'a, C, A> where C: BorrowMut<hyper::Client>, A:
let upload_result = { let upload_result = {
let url_str = &res.headers.get::<Location>().expect("Location header is part of protocol").0; let url_str = &res.headers.get::<Location>().expect("Location header is part of protocol").0;
if upload_url_from_server { if upload_url_from_server {
dlg.store_upload_url(url_str); dlg.store_upload_url(Some(url_str));
} }
cmn::ResumableUploadHelper { cmn::ResumableUploadHelper {
@@ -24072,6 +24076,7 @@ impl<'a, C, A> CaptionUpdateCall<'a, C, A> where C: BorrowMut<hyper::Client>, A:
Some(Ok(upload_result)) => { Some(Ok(upload_result)) => {
res = upload_result; res = upload_result;
if !res.status.is_success() { if !res.status.is_success() {
dlg.store_upload_url(None);
dlg.finished(false); dlg.finished(false);
return Err(Error::Failure(res)) return Err(Error::Failure(res))
} }