Create parameter data builder

This commit is contained in:
timvisee 2018-04-02 01:41:47 +02:00
parent 928b3d9beb
commit 3ba39751f2
No known key found for this signature in database
GPG key ID: 109CBA0BF74036C2
6 changed files with 38 additions and 10 deletions

22
Cargo.lock generated
View file

@ -259,6 +259,25 @@ dependencies = [
"generic-array 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "derive_builder"
version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"derive_builder_core 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
"quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)",
"syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "derive_builder_core"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)",
"syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "digest"
version = "0.7.2"
@ -319,6 +338,7 @@ dependencies = [
"arrayref 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
"base64 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
"chrono 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
"derive_builder 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
"failure 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
"failure_derive 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
"hkdf 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
@ -1473,6 +1493,8 @@ dependencies = [
"checksum crossbeam-utils 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2760899e32a1d58d5abb31129f8fae5de75220bc2176e77ff7c627ae45c918d9"
"checksum crossbeam-utils 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d636a8b3bcc1b409d7ffd3facef8f21dcb4009626adbd0c5e6c4305c07253c7b"
"checksum crypto-mac 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "0999b4ff4d3446d4ddb19a63e9e00c1876e75cd7000d20e57a693b4b3f08d958"
"checksum derive_builder 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c998e6ab02a828dd9735c18f154e14100e674ed08cb4e1938f0e4177543f439"
"checksum derive_builder_core 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "735e24ee9e5fa8e16b86da5007856e97d592e11867e45d76e0c0d0a164a0b757"
"checksum digest 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "00a49051fef47a72c9623101b19bd71924a45cca838826caae3eaa4d00772603"
"checksum dtoa 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "09c3753c3db574d215cba4ea76018483895d7bff25a31b49ba45db21c48e50ab"
"checksum encoding_rs 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "98fd0f24d1fb71a4a6b9330c8ca04cbd4e7cc5d846b54ca74ff376bc7c9f798d"

View file

@ -8,6 +8,7 @@ workspace = ".."
arrayref = "0.3"
base64 = "0.9"
chrono = "0.4"
derive_builder = "0.5"
failure = "0.1"
failure_derive = "0.1"
hkdf = "0.3"

View file

@ -149,7 +149,8 @@ impl<'a> Params<'a> {
}
/// The parameters data object, that is sent to the server.
#[derive(Clone, Debug, Serialize)]
// TODO: make sure downloads are in-bound when using the builder
#[derive(Clone, Debug, Builder, Serialize)]
pub struct ParamsData {
/// The number of times this file may be downloaded.
/// This value must be in the `(0,20)` bounds, as enforced by Send servers.

View file

@ -1,5 +1,7 @@
#[macro_use]
extern crate arrayref;
#[macro_use]
extern crate derive_builder;
extern crate failure;
#[macro_use]
extern crate failure_derive;

View file

@ -1,6 +1,6 @@
use ffsend_api::action::params::{
Params as ApiParams,
ParamsData,
ParamsDataBuilder,
};
use ffsend_api::file::remote_file::RemoteFile;
use ffsend_api::reqwest::Client;
@ -37,8 +37,11 @@ impl<'a> Params<'a> {
// TODO: show an informative error if the owner token isn't set
// Build the params data object
let data = ParamsData::from(self.cmd.downloads());
// Build the parameters data object
let data = ParamsDataBuilder::default()
.downloads(self.cmd.downloads())
.build()
.unwrap();
// TODO: make sure the data isn't empty

View file

@ -41,12 +41,11 @@ impl<'a> Upload<'a> {
// Build a parameters object to set for the file
let params = {
// Build an empty parameters object
let mut params = ParamsData::new();
// Set the downloads
// TODO: do not unwrap, handle the error
params.set_downloads(self.cmd.downloads()).unwrap();
// Build the parameters data object
let mut params = ParamsDataBuilder::default()
.download(self.cmd.downloads())
.build()
.unwrap();
// Wrap the data in an option if not empty
if params.is_empty() {