Commit Graph

165 Commits

Author SHA1 Message Date
Sebastian Thiel
f71c286285 feat(CLI): init hub + refactor for dry-run mode
The hub is just using preset types - we will have to implement our own
storage and auth-delegate, as well as a Hub delegate at some point.

Dry run mode allows us to check for errors and use a call builder
using the very same code.

Fixes #57
2015-04-14 11:54:46 +02:00
Sebastian Thiel
7dc9972445 feat(API): Display + Error traits for Error struct
* improved documentation about error handling, it's less verbose yet
  explains what you can do.

Fixes #56
2015-04-14 10:28:59 +02:00
Sebastian Thiel
be228f1994 feat(CLI): engine checks resource and method args
We are now at a spot where we can actually start parsing arguments.

* ArgumentError -> ClIError - seems more fitting

Fixes #55
2015-04-14 09:41:55 +02:00
Sebastian Thiel
e45eb053d5 fix(CLI): Display for Errors + refactor
* refactored errors into a hierarchy
* implemented `Display` trait for all error types, including some
  'hierarchy-aware' printing.

Fixes #54
2015-04-14 08:34:53 +02:00
Sebastian Thiel
4548644cb1 feat(CLI):write default and read app-secret
* if there is no secret file in json format, we write a default one
  that we will then read in a second iteration of the loop.
  That way, the user has an example of how such a file must look like.

Next step is to cleanup the error type and implement the Error trait.

Fixes #53
2015-04-13 21:21:05 +02:00
Sebastian Thiel
5799d44fce feat(config): create config directory, if possible
* Only supports one level of directory
* full error handling, and uses memory efficiently
2015-04-13 18:45:29 +02:00
Sebastian Thiel
ca8e8c0622 feat(engine): infrastructure
* allow usage of cmn.rs for common types (like Error types)
* instantiate an engine and handle errors, in an initial quick and dirty
  way.

 Fixes #52
2015-04-13 17:08:50 +02:00
Sebastian Thiel
b9a469c0a4 fix(cmn): use bytes=... when sending as well
Previously, `bytes=` was just parsed, but not sent to the server.
This change is motivated by a similar change in this commit:
http://goo.gl/AvyvLb
2015-04-11 09:31:23 +02:00
Sebastian Thiel
191e822c5a fix(hyper-client): adjust to hyper client
* deal with hyper client not using a type-parameter anymore
* fix incorrect documentation link (use '_' instead of '-')

Fixes #47
2015-04-08 16:51:46 +02:00
Sebastian Thiel
dd1d191966 fix(publish): v0.1.4
* macro 'alias' was renamed to 'rename'
* fixed `cargo test` on main project

The latter pointed me to the serde issue, which would have made
everything fail when actually used to communicate with google servers.
2015-04-07 15:53:30 +02:00
Sebastian Thiel
91861dcb71 fix(rustup): rustc (be9bd7c93 2015-04-05)
* using std::convert
* update to latest hyper (and other dependencies)

Related to #46
2015-04-07 11:59:10 +02:00
Sebastian Thiel
cefd606b53 feat(make): cli depends on API, generically
This allows us to build efficiently. CLI programs can now have their
own cmn.rs implementation, which we can test standalone with
`cargo test`.

The primary makefile currently just explicitly pulls in the type-*.yaml,
one day we could possibly put it into a loop.

Fixes #11
2015-03-24 12:56:24 +01:00
Sebastian Thiel
e5b013e97c fix(result): remove custom Result Enum
Instead, we just use a customized `Result` tyoe and thus stick to
common Rust conventions.

Fixes #39
2015-03-23 14:57:31 +01:00
Sebastian Thiel
ea161897f5 fix(docs): typo fixes and misc. improvements
Fixes #42
2015-03-23 11:19:57 +01:00
Sebastian Thiel
6ad0c2ef79 fix(misc): whitespace and trait rename
* `ResourceMethodsBuilder` -> `MethodsBuilder`. This is now precise
   enough. Previously it was just to similar to what's now a
   `CallBuilder`
* Fixed whitespace issue in `doit()`
2015-03-23 08:49:27 +01:00
Sebastian Thiel
04f4c95688 fix(mbuild): upload size now taken properly
Previously, it would query the size from the wrong dict and obtain
the value 0 all the time. This would have made every upload fail with
`UploadSizeLimitExeeded`.
Now we obtain the actual size limit, and will ignore it if unset/0
for some reason.

Patch += 1
2015-03-22 22:39:36 +01:00
Sebastian Thiel
cd1ff18ba9 fix(cmn): upload() return value handling
Now deals with Cancellation and non-OK status codes correctly.

Fixes #18
2015-03-22 20:21:21 +01:00
Sebastian Thiel
29ee94b4c0 feat(cmn): Resumable upload implemented
With all bells and whisles. For now, we don't have a good return value
to indicate that the operation was cancelled, which needs fixing.
2015-03-22 19:56:35 +01:00
Sebastian Thiel
065753cc3a feat(cmn): implement query_transfer_status()
The delegate logic is implemented and seems sound.
It's somewhat funny that after all this back and forth, all we get
is a valid start position for the upload.
2015-03-22 17:58:34 +01:00
Sebastian Thiel
42a76e4655 feat(cmn): ContentRange header (parse and format)
Now we are able to send the transfer-update requests and implement the
actual chunk logic.
2015-03-22 16:24:39 +01:00
Sebastian Thiel
d26cf77406 feat(mbuild): use of oauth2::Scheme
That way, we improved our API, reduced code bloat, and are very clear
about the what we do for Authorization.
2015-03-22 12:07:40 +01:00
Sebastian Thiel
57e0f06583 feat(mbuild): check upload size against max-size
Fixes #37
2015-03-22 10:12:04 +01:00
Sebastian Thiel
f73204c6b9 fix(cmn) re-export important types from cmn
That way, 'cmn' becomes our private module. All URLs were updated
to reflect that.

This commit also contains an early implementation of the
'transfer_status' method, which will require plenty of work.
2015-03-22 09:26:49 +01:00
Sebastian Thiel
9ea85273cd feat(mbuild): improved delegate calls
The delegate will be asked for an upload URL, that he may store during
yet another call.
2015-03-21 18:25:59 +01:00
Sebastian Thiel
4bf280079e fix(mbuild): simplification and cleanup
* renamed `*MethodsBuilder` type to `*Methods` type
* renamed `*CallBuilder` type to `*Call` type
* greatly simplified `doit()` signature if uploads are involved
* pass `auth` to upload helper
2015-03-21 16:27:41 +01:00
Sebastian Thiel
307d3f487c feat(mbuild): resumable-upload infrastructure
Layout the `ResumableUploadHelper` and implement the entire logic
with the mbuild renerator.

All that's left to be done is to implement the 'chunked upload' method.

The borrow checker helped me to prevent a bug as well.
2015-03-21 13:55:15 +01:00
Sebastian Thiel
80161f72be fix(types):prune unused and ToParts trait
* do not emit unused types. Sometimes though, rustc doesn't seem to
  detect that attributses are actually used
* ToParts trait is used and implemented only when needed.

Linters are back to 'normal'.

Fixes #35
2015-03-21 10:23:40 +01:00
Sebastian Thiel
0823dec75c feat(doit): don't crash if json decode fails.
Instead, tell the delegate about it and return the error.

Fixes #33
2015-03-20 19:31:19 +01:00
Sebastian Thiel
8bb2166da0 feat(types): mark unused types with marker trait
For some reason, some google APIs define types they never use. We now
mark them, just because we can, to show our superiority ;) ;) ;) :D .
2015-03-20 18:31:46 +01:00
Sebastian Thiel
10dfeeb1aa fix(name): MethodBuilder -> CallBuilder
Find-and-replace. It seems to build and work correctly, still
2015-03-20 18:20:50 +01:00
Sebastian Thiel
55978ff9a2 feat(json): Option<_> in schema only if needed
This means that only part fields will be optional.

Fixes #32
2015-03-20 16:43:13 +01:00
Sebastian Thiel
9f719dd928 feat(json): added field aliases, were needed
This makes sure our fields can properly be decoded.
2015-03-20 14:16:06 +01:00
Sebastian Thiel
b9a81a900e fix(cmn): serde cleanup;JsonError pub fields 2015-03-20 12:05:29 +01:00
Sebastian Thiel
d3bb130be0 feat(lib): use serge instead of serialize
However, for some reason, the `Serialize/Deserialize` macros don't work
for me, even though they work just fine in the respective tests of
the serge crate. What am I possibly doing wrong ?
2015-03-20 11:28:09 +01:00
Sebastian Thiel
265b448297 feat(doit): simplify delegate calls
Now we use the DefaultDelegate as standin in case there is user-delgate.
That way, we save plenty of complexity as no additional
`if let Some(ref mut dlg) = delegate` is necesary.

Fixes #30
2015-03-19 19:26:19 +01:00
Sebastian Thiel
508d14eafb feat(delegate): begin()/finished() calls
During `begin()`, the delegate receives additional information about the
current call, which can be useful for performance tracking, among
other things.

Fixes #25
2015-03-19 15:30:39 +01:00
Sebastian Thiel
9d401f5486 feat(doit): optimizations and simplification; seek
* MultiPartReader is using match to handle state, reducing unnecessary
  calls to 0 in that regard.
* Fixed seek() calls on readers, assuring they are reset to start each
  time the loop is done.
* both media-parameters now use `ReadSeek` streams.
* Use `seek()` to figure out size, simplifying the interface.

Closes #17
2015-03-19 07:30:43 +01:00
Sebastian Thiel
6b2301351f fix(common): MultiPartReader test case
Simple fixes, required as its API changed
2015-03-18 22:18:17 +01:00
Sebastian Thiel
224af64068 feat(doit):optimized memory allocation and options
* reserve_exact(X) where possible (params, multi-part-reader)
* `if let` used whereever possible to prevent duplicate checks

This increases the possible performance, and makes for more readable,
concise code.
2015-03-18 22:03:52 +01:00
Sebastian Thiel
e53e23a893 fix(common): MultiPartReader now works correctly
The state-handling was incorrect, causing it to not handle small reads
correctly.
However, this is working nicely now.
2015-03-18 21:09:48 +01:00
Sebastian Thiel
b127df17b0 feat(common): multibytereader single byte test
It shows that we actually don't handle our state correctly.
The first test which reads to string obviously uses a big-enough buffer.
2015-03-18 19:05:07 +01:00
Sebastian Thiel
8db346b8b0 feat(common): MultiPartReader is working.
Something that is missing is a single-byte read test
2015-03-18 18:48:03 +01:00
Sebastian Thiel
71c827b306 feat(doit): initial part writing
We are a state-machine, and handle parts of it correctly.
However, we don't yet write the boundary at all, and could improve
our use of match.
2015-03-18 17:53:39 +01:00
Sebastian Thiel
fc589cb965 feat(doit): multi-part mime-type and add_parts()
Next we will implement the actual Read method
2015-03-18 16:15:51 +01:00
Sebastian Thiel
b0a1f518e9 feat(doit): more multipart infrastructure
* outer frame of `MultiPartReader` to allow using it in `doit()`
* restructured `doit()` to get content-types right

There is more work to do, as it currently doesn't compile, nor
do we deal with our streams correctly.

But we are on a good way.
2015-03-18 12:40:18 +01:00
Sebastian Thiel
60adacf8d4 feat(doit): pre-request delegate call.
This one is likely to change the further we advance in the upload-media
implementation.
2015-03-17 09:21:18 +01:00
Sebastian Thiel
eef1471357 feat(doit): json decode and delegation
Now json errors are handled and delegated with the option to retry,
and all other values are just decoded according to plan.

For now, I brutally unwrap json values assuming this will work, because
it really should work.
2015-03-16 17:14:04 +01:00
Sebastian Thiel
2c79f6e3cf feat(doit): authentication with and without scopes
It's quite rough around the edges, but has a slight chance to work.
Will still to handle return values accordingly.
2015-03-16 15:23:38 +01:00
Sebastian Thiel
9a58b0badd feat(doit): attempt to send json-encoded request
This doesn't work yet, as I am unable to unwrap the client properly.
It's a refcell that contains a BorrowMut to a hyper::Client, and
lets just, it's complicated.
2015-03-16 10:35:26 +01:00
Sebastian Thiel
7758f99ff2 fix(dev): typo 2015-03-11 22:59:18 +01:00