diff options
author | Teddy Wing | 2018-11-13 04:25:14 +0100 |
---|---|---|
committer | Teddy Wing | 2018-11-13 04:25:14 +0100 |
commit | 6f41e70f5ba39b72f5cd3dae2d33a02f910aabb1 (patch) | |
tree | fe4da29335ba019fbbd15ad8b2622082163911b1 | |
parent | c9172dd57745015ab917fb9a2fa41ce545120448 (diff) | |
download | dome-key-web-6f41e70f5ba39b72f5cd3dae2d33a02f910aabb1.tar.bz2 |
license: Move database query to a function
Will make it a bit easier to handle errors from `Result`s.
-rw-r--r-- | license-generator/src/bin/license.rs | 49 |
1 files changed, 30 insertions, 19 deletions
diff --git a/license-generator/src/bin/license.rs b/license-generator/src/bin/license.rs index 8c30e6a..72c7c25 100644 --- a/license-generator/src/bin/license.rs +++ b/license-generator/src/bin/license.rs @@ -7,6 +7,7 @@ extern crate exitcode; #[macro_use] extern crate log; +extern crate mysql; #[macro_use] extern crate serde_derive; @@ -34,6 +35,33 @@ struct LicenseData<'a> { email: &'a str, } +fn query_purchaser( + cx: &mut mysql::PooledConn, + name: &str, + email: &str, + secret: &str, +) -> Result<Option<std::result::Result<mysql::Row, mysql::Error>>> { + let mut tx = cx.start_transaction(false, None, None)?; + let row = tx.prep_exec(" + SELECT id FROM purchasers + WHERE + name = ? + AND + email = ? + AND + secret = ?", + ( + &name, + &email, + &secret, + ) + )?.next(); + + tx.commit()?; + + Ok(row) +} + fn main() -> Result<()> { logger::init()?; @@ -108,23 +136,8 @@ fn main() -> Result<()> { let email = email.unwrap().to_string(); let secret = secret.unwrap().to_string(); - let mut tx = cx.start_transaction(false, None, None).unwrap(); - let row = tx.prep_exec(" - SELECT id FROM purchasers - WHERE - name = ? - AND - email = ? - AND - secret = ?", - ( - &name, - &email, - &secret, - ) - ).unwrap().next(); - - if row.is_some() { + let purchaser = query_purchaser(&mut cx, &name, &email, &secret).unwrap(); + if purchaser.is_some() { let license_data = LicenseData { name: &name, email: &email, @@ -140,8 +153,6 @@ Content-Disposition: attachment; filename=\"dome-key-license.zip\"\n\n") .unwrap(); req.stdout().write_all(&zip_data.into_inner()).unwrap(); } - - tx.commit().unwrap(); } else { error!( "Missing request parameters: name: '{}', email: '{}', secret: '{}'", |