From 94d77222cd327f3e9800a4645ec7b1161a2f0078 Mon Sep 17 00:00:00 2001 From: ds2600 Date: Fri, 16 Feb 2024 06:10:07 -0500 Subject: [PATCH] Added Get functionality --- src/main.rs | 97 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 95 insertions(+), 2 deletions(-) diff --git a/src/main.rs b/src/main.rs index 69ba98c..d3521a4 100644 --- a/src/main.rs +++ b/src/main.rs @@ -31,8 +31,25 @@ enum Action { #[clap(flatten)] data: CommonData, }, + Backup { + #[clap(flatten)] + data: BackupData, + }, + Get { + #[clap(flatten)] + data: QueryData, + }, } + +#[derive(Parser)] +#[derive(Debug)] +struct QueryData { + #[clap(short = 'n', long, value_name = "NAME")] + name: String, +} + + #[derive(Parser)] #[derive(Debug)] struct AddData { @@ -68,6 +85,27 @@ struct CommonData { } +#[derive(Parser)] +#[derive(Debug)] +struct NameData { + #[clap(short = 'n', long, value_name = "NAME")] + name: String, +} + +#[derive(Parser)] +#[derive(Debug)] +struct IdData { + #[clap(short = 'd', long, value_name = "DEVICE_ID")] + device_id: String, +} + +#[derive(Parser)] +#[derive(Debug)] +enum BackupData { + NameData(NameData), + IdData(IdData), +} + fn main() { let opts: Opts = Opts::parse(); @@ -122,10 +160,65 @@ fn main() { } } Action::Modify { data } => { - println!("Modifying data: {:?}", data); + println!("Modifying data."); } Action::Delete { data } => { - println!("Deleting data: {:?}", data) + println!("Deleting data"); + } + Action::Backup { data } => { + if data.name.is_empty() { + println!("Invalid name"); + return; + } + } + Action::Get { data } => { + if data.name.is_empty() { + println!("Invalid name"); + return; + } + + let mut settings = Config::default(); + settings + .merge(File::from_str(include_str!("Settings.toml"), FileFormat::Toml)) + .unwrap(); + + let db = OptsBuilder::new() + .ip_or_hostname(Some(settings.get::("db_host").unwrap())) + .db_name(Some(settings.get::("db_name").unwrap())) + .user(Some(settings.get::("db_user").unwrap())) + .pass(Some(settings.get::("db_pass").unwrap())); + + let pool = match Pool::new(db) { + Ok(pool) => pool, + Err(err) => { + println!("Error: {}", err); + return; + } + }; + + let mut conn = match pool.get_conn() { + Ok(conn) => conn, + Err(err) => { + println!("Error: {}", err); + return; + } + }; + + let sql = "SELECT kSelf, sName FROM Device WHERE sName = :name"; + + let params = params! { + "name" => &data.name, + }; + + let result: mysql::QueryResult = conn.exec_iter(sql, params).unwrap(); + + for row_result in result { + let row = row_result.unwrap(); + let k_self: i32 = row.get("kSelf").unwrap(); + let s_name: String = row.get("sName").unwrap(); + + println!("Name: {}, ID: {}", s_name, k_self); + } } } } \ No newline at end of file