From 51e3dd528919599c3d2beff56c59a4cb7fe24371 Mon Sep 17 00:00:00 2001 From: Teddy Wing Date: Fri, 9 Nov 2018 17:40:25 +0100 Subject: Extract code in `lib.rs` to `errors.rs` and `purchaser.rs` Split up the code to get things a bit more organised. I want a function to create a connection to the MySQL database and I don't want to lump it in with the rest. --- license-generator/src/errors.rs | 7 ++++ license-generator/src/lib.rs | 71 ++------------------------------------ license-generator/src/purchaser.rs | 62 +++++++++++++++++++++++++++++++++ 3 files changed, 71 insertions(+), 69 deletions(-) create mode 100644 license-generator/src/errors.rs create mode 100644 license-generator/src/purchaser.rs diff --git a/license-generator/src/errors.rs b/license-generator/src/errors.rs new file mode 100644 index 0000000..7eb9eda --- /dev/null +++ b/license-generator/src/errors.rs @@ -0,0 +1,7 @@ +use mysql; + +error_chain! { + foreign_links { + MySql(mysql::error::Error); + } +} diff --git a/license-generator/src/lib.rs b/license-generator/src/lib.rs index d15a9cc..fd1bfa8 100644 --- a/license-generator/src/lib.rs +++ b/license-generator/src/lib.rs @@ -4,73 +4,6 @@ extern crate mysql; extern crate rand; extern crate sha1; -mod errors { - use mysql; - error_chain! { - foreign_links { - MySql(mysql::error::Error); - } - } -} - -use rand::Rng; - -use errors::*; - -struct Purchaser<'a> { - name: &'a str, - email: &'a str, - secret: Option, -} - -impl<'a> Purchaser<'a> { - fn new(name: &'a str, email: &'a str) -> Self { - Purchaser { - name: name, - email: email, - secret: None, - } - } - - fn generate_secret(&mut self) { - let mut rng = rand::thread_rng(); - let random: usize = rng.gen_range(1_000_000_000, std::usize::MAX); - - let source = format!("{}{}{}", self.name, self.email, random); - let digest = sha1::Sha1::from(source).hexdigest(); - - self.secret = Some(digest); - } - - fn insert(&self, cx: &mut mysql::Conn) -> Result<()> { - let mut tx = cx.start_transaction( - false, // consistent_snapshot - None, // isolation_level - None, // readonly - )?; - - match self.secret { - Some(ref s) => { - tx.prep_exec(" - INSERT INTO purchasers - (name, email, secret) - VALUES - (?, ?, ?)", - (self.name, self.email, s), - )?; - }, - None => { - tx.prep_exec(" - INSERT INTO purchasers - (name, email) - VALUES - (?, ?)", - (self.name, self.email), - )?; - }, - } - - Ok(()) - } -} +mod errors; +mod purchaser; diff --git a/license-generator/src/purchaser.rs b/license-generator/src/purchaser.rs new file mode 100644 index 0000000..2a7727c --- /dev/null +++ b/license-generator/src/purchaser.rs @@ -0,0 +1,62 @@ +use mysql; +use rand::{self, Rng}; +use sha1; + +use errors::*; + +struct Purchaser<'a> { + name: &'a str, + email: &'a str, + secret: Option, +} + +impl<'a> Purchaser<'a> { + fn new(name: &'a str, email: &'a str) -> Self { + Purchaser { + name: name, + email: email, + secret: None, + } + } + + fn generate_secret(&mut self) { + let mut rng = rand::thread_rng(); + let random: usize = rng.gen_range(1_000_000_000, ::std::usize::MAX); + + let source = format!("{}{}{}", self.name, self.email, random); + let digest = sha1::Sha1::from(source).hexdigest(); + + self.secret = Some(digest); + } + + fn insert(&self, cx: &mut mysql::Conn) -> Result<()> { + let mut tx = cx.start_transaction( + false, // consistent_snapshot + None, // isolation_level + None, // readonly + )?; + + match self.secret { + Some(ref s) => { + tx.prep_exec(" + INSERT INTO purchasers + (name, email, secret) + VALUES + (?, ?, ?)", + (self.name, self.email, s), + )?; + }, + None => { + tx.prep_exec(" + INSERT INTO purchasers + (name, email) + VALUES + (?, ?)", + (self.name, self.email), + )?; + }, + } + + Ok(()) + } +} -- cgit v1.2.3