@@ -375,17 +375,18 @@ match result {
375375 rtype = ' cmn::Result<(hyper::client::Response, %s )>' % (response_schema.id)
376376 reserved_params = [' alt' ]
377377
378-
378+ mtype_param = ' RS'
379+ mtype_where = ' ReadSeek'
379380
380381 possible_urls = [m.path]
381382 simple_media_param = None
382383 if media_params:
383384 stripped = lambda s : s.strip().strip(' ,' )
384385 qualifier = ' '
386+ type_params = mtype_param
387+ where = mtype_param + ' : ' + mtype_where
385388 for p in media_params:
386- type_params += p.type.param + ' , '
387- where += p.type.param + ' : ' + p.type.where + ' , '
388- add_args += ' mut ' + p.type.arg_name + ' : ' + (' Option<(%s , u64, mime::Mime)>' % p.type.param) + ' , '
389+ add_args += ' mut ' + p.type.arg_name + ' : ' + (' Option<(%s , mime::Mime)>' % mtype_param) + ' , '
389390 possible_urls.append(p.path)
390391 if p.protocol == ' simple' :
391392 simple_media_param = p
@@ -422,6 +423,7 @@ match result {
422423 all_required_param_name = set (p.name for p in params if is_required_property(p))
423424 MULTI_SLASH = ' multi-slash-prefix'
424425 URL_ENCODE = ' url-encode'
426+ READER_SEEK = " let size = reader.seek(io::SeekFrom::End(0)).unwrap();\n reader.seek(io::SeekFrom::Start(0)).unwrap();"
425427
426428 special_cases = set ()
427429 for possible_url in possible_urls:
@@ -595,8 +597,10 @@ else {
595597 }
596598
597599 % if request_value:
598- let json_encoded_request = json::encode(&self.${ property (REQUEST_VALUE_PROPERTY_NAME )} ).unwrap();
599600 let mut json_mime_type = mime::Mime(mime::TopLevel::Application, mime::SubLevel::Json, Default::default());
601+ let mut request_value_reader = io::Cursor::new(json::encode(&self.${ property (REQUEST_VALUE_PROPERTY_NAME )} ).unwrap().into_bytes());
602+ let request_size = request_value_reader.seek(io::SeekFrom::End(0)).unwrap();
603+ request_value_reader.seek(io::SeekFrom::Start(0)).unwrap();
600604 % endif
601605
602606 let mut client = &mut *self.hub.client.borrow_mut();
@@ -611,15 +615,16 @@ else {
611615 }
612616 let auth_header = hyper::header::Authorization(token.unwrap().access_token);
613617 % endif
618+ % if request_value:
619+ request_value_reader.seek(io::SeekFrom::Start(0)).unwrap();
620+ % endif
614621 % if request_value and simple_media_param:
615- let mut request_value_reader = io::Cursor::new(json_encoded_request.clone().into_bytes());
616622 let mut mp_reader: cmn::MultiPartReader = Default::default();
617623 let (mut body_reader, content_type) = match ${ simple_media_param.type.arg_name} .as_mut() {
618- Some(&mut (ref mut reader, size, ref mime)) => {
624+ Some(&mut (ref mut reader, ref mime)) => {
619625 mp_reader.reserve_exact(2);
620- let rsize = request_value_reader.seek(io::SeekFrom::End(0)).unwrap();
621- request_value_reader.seek(io::SeekFrom::Start(0)).unwrap();
622- mp_reader.add_part(&mut request_value_reader, rsize, json_mime_type.clone())
626+ ${ READER_SEEK | indent_all_but_first_by(5 )}
627+ mp_reader.add_part(&mut request_value_reader, request_size, json_mime_type.clone())
623628 .add_part(reader, size, mime.clone());
624629 let mime_type = mp_reader.mime_type();
625630 (&mut mp_reader as &mut io::Read, ContentType(mime_type))
@@ -638,8 +643,8 @@ else {
638643 % if not simple_media_param:
639644
640645 .header(ContentType(json_mime_type.clone()))
641- .header(ContentLength(json_encoded_request.len() as u64))
642- .body(json_encoded_request.as_slice ())\
646+ .header(ContentLength(request_size as u64))
647+ .body(request_value_reader.into_body ())\
643648 % else :
644649
645650 .header(content_type)
@@ -648,7 +653,8 @@ else {
648653 % endif
649654;
650655 % if simple_media_param and not request_value:
651- if let Some(&mut (ref mut reader, size, ref mime)) = ${ simple_media_param.type.arg_name} .as_mut() {
656+ if let Some(&mut (ref mut reader, ref mime)) = ${ simple_media_param.type.arg_name} .as_mut() {
657+ ${ READER_SEEK | indent_all_but_first_by(4 )}
652658 req = req.header(ContentType(mime.clone()))
653659 .header(ContentLength(size))
654660 .body(reader.into_body());
@@ -697,23 +703,20 @@ else {
697703 }
698704
699705 % for p in media_params:
700- <%
701- none_type = ' None::<(' + p.type.default + ' , u64, mime::Mime)>'
702- %> \
703706 ${ p.description | rust_doc_comment, indent_all_but_first_by(1 )}
704707 ///
705708 % for item_name, item in p.info.iteritems():
706709 /// * *${ split_camelcase_s(item_name)} *: ${ isinstance (item, (list , tuple )) and put_and(enclose_in(" '" , item)) or str (item)}
707710 % endfor
708- pub fn ${ api.terms.upload_action}${ p.type.suffix} <${ p.type.param } >(self, ${ p.type.arg_name} : ${ p.type.param } , size: u64 , mime_type: mime::Mime) -> ${ rtype}
709- where ${ p.type.param } : ${ p.type.where } {
711+ pub fn ${ api.terms.upload_action}${ p.type.suffix} <${ mtype_param } >(self, ${ p.type.arg_name} : ${ mtype_param } , mime_type: mime::Mime) -> ${ rtype}
712+ where ${ mtype_param } : ${ mtype_where } {
710713 self.${ api.terms.action} (\
711714 % for _ in range (0 , loop.index):
712- ${ none_type } , \
715+ None , \
713716 % endfor
714- Some((${ p.type.arg_name} , size, mime_type)), \
717+ Some((${ p.type.arg_name} , mime_type)), \
715718 % for _ in range (loop.index+ 1 , len (media_params)):
716- ${ none_type } , \
719+ None , \
717720 % endfor
718721)
719722 }
0 commit comments