Skip to content

Commit e5b013e

Browse files
committed
fix(result): remove custom Result Enum
Instead, we just use a customized `Result` tyoe and thus stick to common Rust conventions. Fixes #39
1 parent fca1b24 commit e5b013e

4 files changed

Lines changed: 37 additions & 35 deletions

File tree

src/mako/lib.rs.mako

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ use std::io;
5252
use std::fs;
5353
use std::thread::sleep;
5454

55-
pub use cmn::{MultiPartReader, ToParts, MethodInfo, Result, CallBuilder, Hub, ReadSeek, Part, ResponseResult, RequestValue, NestedType, Delegate, DefaultDelegate, MethodsBuilder, Resource, JsonServerError};
55+
pub use cmn::{MultiPartReader, ToParts, MethodInfo, Result, Error, CallBuilder, Hub, ReadSeek, Part, ResponseResult, RequestValue, NestedType, Delegate, DefaultDelegate, MethodsBuilder, Resource, JsonServerError};
5656

5757

5858
// ##############

src/mako/lib/mbuild.mako

Lines changed: 24 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ ${m.description | rust_doc_comment}
7676
% else:
7777
/// A builder for the *${method}* method supported by a *${singular(resource)}* resource.
7878
% endif
79-
/// It is not used directly, but through a `${rb_type(resource)}`.
79+
/// It is not used directly, but through a `${rb_type(resource)}` instance.
8080
///
8181
% if part_desc:
8282
${part_desc | rust_doc_comment}
@@ -307,7 +307,7 @@ ${capture(util.test_prelude) | hide_filter}\
307307
use ${util.library_name()}::${request_value_type};
308308
% endif
309309
% if handle_result:
310-
use ${util.library_name()}::Result;
310+
use ${util.library_name()}::{Result, Error};
311311
% endif
312312
% if media_params:
313313
use std::fs;
@@ -358,15 +358,17 @@ ${'.' + action_name | indent_by(13)}(${action_args});
358358
% if handle_result:
359359
360360
match result {
361-
Result::HttpError(err) => println!("HTTPERROR: {:?}", err),
362-
Result::MissingAPIKey => println!("Auth: Missing API Key - used if there are no scopes"),
363-
Result::MissingToken => println!("OAuth2: Missing Token"),
364-
Result::Cancelled => println!("Operation canceled by user"),
365-
Result::UploadSizeLimitExceeded(size, max_size) => println!("Upload size too big: {} of {}", size, max_size),
366-
Result::Failure(_) => println!("General Failure (hyper::client::Response doesn't print)"),
367-
Result::FieldClash(clashed_field) => println!("You added custom parameter which is part of builder: {:?}", clashed_field),
368-
Result::JsonDecodeError(err) => println!("Couldn't understand server reply - maybe API needs update: {:?}", err),
369-
Result::Success(_) => println!("Success (value doesn't print)"),
361+
Err(e) => match e {
362+
Error::HttpError(err) => println!("HTTPERROR: {:?}", err),
363+
Error::MissingAPIKey => println!("Auth: Missing API Key - used if there are no scopes"),
364+
Error::MissingToken => println!("OAuth2: Missing Token"),
365+
Error::Cancelled => println!("Operation canceled by user"),
366+
Error::UploadSizeLimitExceeded(size, max_size) => println!("Upload size too big: {} of {}", size, max_size),
367+
Error::Failure(_) => println!("General Failure (hyper::client::Response doesn't print)"),
368+
Error::FieldClash(clashed_field) => println!("You added custom parameter which is part of builder: {:?}", clashed_field),
369+
Error::JsonDecodeError(err) => println!("Couldn't understand server reply - maybe API needs update: {:?}", err),
370+
},
371+
Ok(_) => println!("Success (value doesn't print)"),
370372
}
371373
% endif
372374
</%block>
@@ -447,7 +449,7 @@ match result {
447449
if media_params:
448450
max_size = media_params[0].max_size
449451
if max_size > 0:
450-
READER_SEEK += "if size > %i {\n\treturn Result::UploadSizeLimitExceeded(size, %i)\n}" % (max_size, max_size)
452+
READER_SEEK += "if size > %i {\n\treturn Err(Error::UploadSizeLimitExceeded(size, %i))\n}" % (max_size, max_size)
451453
452454
special_cases = set()
453455
for possible_url in possible_urls:
@@ -527,7 +529,7 @@ match result {
527529
for &field in [${', '.join(enclose_in('"', reserved_params + [p.name for p in field_params]))}].iter() {
528530
if ${paddfields}.contains_key(field) {
529531
${delegate_finish}(false);
530-
return Result::FieldClash(field);
532+
return Err(Error::FieldClash(field));
531533
}
532534
}
533535
for (name, value) in ${paddfields}.iter() {
@@ -589,7 +591,7 @@ else {
589591
Some(value) => params.push(("key", value)),
590592
None => {
591593
${delegate_finish}(false);
592-
return Result::MissingAPIKey
594+
return Err(Error::MissingAPIKey)
593595
}
594596
}
595597
% else:
@@ -668,7 +670,7 @@ else {
668670
}
669671
if token.is_none() {
670672
${delegate_finish}(false);
671-
return Result::MissingToken
673+
return Err(Error::MissingToken)
672674
}
673675
let auth_header = Authorization(oauth2::Scheme { token_type: oauth2::TokenType::Bearer,
674676
access_token: token.unwrap().access_token });
@@ -757,7 +759,7 @@ else {
757759
continue;
758760
}
759761
${delegate_finish}(false);
760-
return Result::HttpError(err)
762+
return Err(Error::HttpError(err))
761763
}
762764
Ok(mut res) => {
763765
if !res.status.is_success() {
@@ -768,7 +770,7 @@ else {
768770
continue;
769771
}
770772
${delegate_finish}(false);
771-
return Result::Failure(res)
773+
return Err(Error::Failure(res))
772774
}
773775
% if resumable_media_param:
774776
if protocol == "${resumable_media_param.protocol}" {
@@ -796,12 +798,12 @@ else {
796798
match upload_result {
797799
None => {
798800
${delegate_finish}(false);
799-
return Result::Cancelled
801+
return Err(Error::Cancelled)
800802
}
801803
Some(Err(err)) => {
802804
## Do not ask the delgate again, as it was asked by the helper !
803805
${delegate_finish}(false);
804-
return Result::HttpError(err)
806+
return Err(Error::HttpError(err))
805807
}
806808
## Now the result contains the actual resource, if any ... it will be
807809
## decoded next
@@ -810,7 +812,7 @@ else {
810812
if !res.status.is_success() {
811813
## delegate was called in upload() already - don't tell him again
812814
${delegate_finish}(false);
813-
return Result::Failure(res)
815+
return Err(Error::Failure(res))
814816
}
815817
}
816818
}
@@ -829,7 +831,7 @@ if enable_resource_parsing \
829831
Ok(decoded) => (res, decoded),
830832
Err(err) => {
831833
dlg.response_json_decode_error(&json_response, &err);
832-
return Result::JsonDecodeError(err);
834+
return Err(Error::JsonDecodeError(err));
833835
}
834836
}
835837
}\
@@ -842,7 +844,7 @@ if enable_resource_parsing \
842844
% endif
843845
844846
${delegate_finish}(true);
845-
return Result::Success(result_value)
847+
return Ok(result_value)
846848
}
847849
}
848850
}

src/mako/lib/util.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@
7373
TO_PARTS_MARKER = 'ToParts'
7474
UNUSED_TYPE_MARKER = 'UnusedType'
7575

76-
RESERVED_TYPES = set(("Result", RESOURCE_MARKER_TRAIT))
76+
RESERVED_TYPES = set(("Result", RESOURCE_MARKER_TRAIT, "Error"))
7777

7878
PROTOCOL_TYPE_INFO = {
7979
'simple' : {

src/rust/cmn.rs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -216,8 +216,8 @@ pub struct DefaultDelegate;
216216
impl Delegate for DefaultDelegate {}
217217

218218

219-
/// A universal result type used as return for all action method results.
220-
pub enum Result<T = ()> {
219+
220+
pub enum Error {
221221
/// The http connection failed
222222
HttpError(hyper::HttpError),
223223

@@ -244,11 +244,11 @@ pub enum Result<T = ()> {
244244

245245
/// Indicates an HTTP repsonse with a non-success status code
246246
Failure(hyper::client::Response),
247-
248-
/// It worked !
249-
Success(T),
250247
}
251248

249+
/// A universal result type used as return for all calls.
250+
pub type Result<T> = std::result::Result<T, Error>;
251+
252252
/// Contains information about an API request.
253253
pub struct MethodInfo {
254254
pub id: &'static str,
@@ -503,7 +503,7 @@ impl<'a, NC, A> ResumableUploadHelper<'a, NC, A>
503503
where NC: hyper::net::NetworkConnector,
504504
A: oauth2::GetToken {
505505

506-
fn query_transfer_status(&mut self) -> (Option<u64>, hyper::HttpResult<hyper::client::Response>) {
506+
fn query_transfer_status(&mut self) -> std::result::Result<u64, hyper::HttpResult<hyper::client::Response>> {
507507
loop {
508508
match self.client.post(self.url)
509509
.header(UserAgent(self.user_agent.to_string()))
@@ -520,17 +520,17 @@ impl<'a, NC, A> ResumableUploadHelper<'a, NC, A>
520520
sleep(d);
521521
continue;
522522
}
523-
return (None, Ok(r))
523+
return Err(Ok(r))
524524
}
525525
};
526-
return (Some(h.0.last), Ok(r))
526+
return Ok(h.0.last)
527527
}
528528
Err(err) => {
529529
if let Retry::After(d) = self.delegate.http_error(&err) {
530530
sleep(d);
531531
continue;
532532
}
533-
return (None, Err(err))
533+
return Err(Err(err))
534534
}
535535
}
536536
}
@@ -543,8 +543,8 @@ impl<'a, NC, A> ResumableUploadHelper<'a, NC, A>
543543
let mut start = match self.start_at {
544544
Some(s) => s,
545545
None => match self.query_transfer_status() {
546-
(Some(s), _) => s,
547-
(_, result) => return Some(result)
546+
Ok(s) => s,
547+
Err(result) => return Some(result)
548548
}
549549
};
550550

0 commit comments

Comments
 (0)