11<%namespace name =" util" file =" ../../lib/util.mako" /> \
22<%!
3- from util import hub_type
3+ from util import ( hub_type, mangle_ident, indent_all_but_first_by, activity_rust_type)
44 from cli import (mangle_subcommand, new_method_context, PARAM_FLAG , STRUCT_FLAG , UPLOAD_FLAG , OUTPUT_FLAG , VALUE_ARG ,
55 CONFIG_DIR , SCOPE_FLAG , is_request_value_property, FIELD_SEP , docopt_mode, FILE_ARG , MIME_ARG , OUT_ARG ,
6- cmd_ident, call_method_ident)
6+ cmd_ident, call_method_ident, arg_ident, POD_TYPES )
77
88 v_arg = ' <%s >' % VALUE_ARG
99%> \
1212 hub_type_name = ' api::' + hub_type(c.schemas, util.canonical_name())
1313%> \
1414mod cmn;
15- use cmn::{InvalidOptionsError, JsonTokenStorage};
15+ use cmn::{InvalidOptionsError, CLIError, JsonTokenStorage};
16+ use std::default::Default;
17+ use std::str::FromStr;
1618
1719use oauth2::{Authenticator, DefaultAuthenticatorDelegate};
1820
1921struct Engine {
2022 opt: Options,
21- config_dir: String,
2223 hub: ${ hub_type_name} <hyper::Client , Authenticator <DefaultAuthenticatorDelegate, JsonTokenStorage, hyper::Client >>,
2324}
2425
2526
2627impl Engine {
2728% for resource in sorted (c.rta_map.keys()):
2829 % for method in sorted (c.rta_map[resource]):
29- fn ${ call_method_ident(resource, method)} (&self, dry_run: bool, err: &mut InvalidOptionsError) -> Option<api::Error > {
30- ${ self ._method_call_impl(c, resource, method)} \
30+ fn ${ call_method_ident(resource, method)} (&self, dry_run: bool, err: &mut InvalidOptionsError)
31+ -> Option<api::Error > {
32+ ${ self ._method_call_impl(c, resource, method) | indent_all_but_first_by(2 )}
3133 }
3234
3335 % endfor # each method
3436% endfor
3537 fn _doit(&self, dry_run: bool) -> (Option<api::Error >, Option<InvalidOptionsError >) {
3638 let mut err = InvalidOptionsError::new();
37- let mut call_result: Option<api::Error > = None ;
39+ let mut call_result: Option<api::Error >;
3840 let mut err_opt: Option<InvalidOptionsError > = None;
3941
4042## RESOURCE LOOP: check for set primary subcommand
@@ -95,7 +97,6 @@ self.opt.${cmd_ident(method)} {
9597 }, None);
9698 let engine = Engine {
9799 opt: opt,
98- config_dir: config_dir,
99100 hub: ${ hub_type_name} ::new(hyper::Client::new(), auth),
100101 };
101102
@@ -113,6 +114,67 @@ self.opt.${cmd_ident(method)} {
113114}
114115</%def >
115116
116- <%def name = "_method_call_impl(c , resource , method ) "> \
117- None
117+ <%def name = "_method_call_impl(c , resource , method ) " buffered =" True" > \
118+ <%
119+ mc = new_method_context(resource, method, c)
120+ # # if is_request_value_property(mc, p):
121+ # # continue
122+ # # args.append('<%s>' % mangle_subcommand(p.name))
123+ %> \
124+ ## REQUIRED PARAMETERS
125+ % for p in mc.required_props:
126+ <%
127+ prop_name = mangle_ident(p.name)
128+ prop_type = activity_rust_type(c.schemas, p, allow_optionals = False )
129+ opt_ident = ' self.opt.' + arg_ident(p.name)
130+ %> \
131+ % if is_request_value_property(mc, p):
132+ let ${ prop_name} : api::${ prop_type} = Default::default();
133+ % else :
134+ let ${ prop_name} : ${ prop_type} = \
135+ % if p.type == ' string' :
136+ ${ opt_ident} .clone();
137+ % else :
138+
139+ match FromStr::from_str(& ${ opt_ident} ) {
140+ Err(perr) => {
141+ err.issues.push(CLIError::ParseError(format!("Failed to parse argument <${ mangle_subcommand(p.name)} > as ${ p.type} with error: {}", perr)));
142+ Default::default()
143+ },
144+ Ok(v) => v,
145+ };
146+ % endif # handle argument type
147+ % endif # handle request value
148+ % endfor # each required parameter
149+ <%
150+ call_args = list ()
151+ for p in mc.required_props:
152+ borrow = ' '
153+ # if type is not available, we know it's the request value, which should also be borrowed
154+ ptype = p.get(' type' , ' string' )
155+ if ptype not in POD_TYPES or ptype == ' string' :
156+ borrow = ' &'
157+ call_args.append(borrow + mangle_ident(p.name))
158+ # end for each required prop
159+ %> \
160+ let call = self.hub.${ mangle_ident(resource)} ().${ mangle_ident(method)} (${ ' , ' .join(call_args)} );
161+ ## TODO: set parameters
162+ ## TODO: parse upload and output information
163+ if dry_run {
164+ None
165+ } else {
166+ ## Make the call, handle uploads, handle downloads (also media downloads|json decoding)
167+ ## TODO: unify error handling
168+ % if mc.media_params:
169+ return None
170+ % else :
171+ match call.${ api.terms.action} () {
172+ Err(api_err) => Some(api_err),
173+ Ok(res) => {
174+ println!("DEBUG: {:?}", res);
175+ None
176+ }
177+ }
178+ % endif
179+ }\
118180</%def >
0 commit comments