diff --git a/Cargo.lock b/Cargo.lock index 22218d1..acca8b1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -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" diff --git a/api/Cargo.toml b/api/Cargo.toml index 11045ca..f39e0e8 100644 --- a/api/Cargo.toml +++ b/api/Cargo.toml @@ -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" diff --git a/api/src/action/params.rs b/api/src/action/params.rs index 87b44f8..49cf07b 100644 --- a/api/src/action/params.rs +++ b/api/src/action/params.rs @@ -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. diff --git a/api/src/lib.rs b/api/src/lib.rs index 196f7f2..e58f6d7 100644 --- a/api/src/lib.rs +++ b/api/src/lib.rs @@ -1,5 +1,7 @@ #[macro_use] extern crate arrayref; +#[macro_use] +extern crate derive_builder; extern crate failure; #[macro_use] extern crate failure_derive; diff --git a/cli/src/action/params.rs b/cli/src/action/params.rs index 2668257..44bdfd7 100644 --- a/cli/src/action/params.rs +++ b/cli/src/action/params.rs @@ -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 diff --git a/cli/src/action/upload.rs b/cli/src/action/upload.rs index dfff772..402c581 100644 --- a/cli/src/action/upload.rs +++ b/cli/src/action/upload.rs @@ -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() {