diff --git a/Cargo.lock b/Cargo.lock index ed8cc2e..f6b558f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8,6 +8,17 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +[[package]] +name = "ahash" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" +dependencies = [ + "getrandom", + "once_cell", + "version_check", +] + [[package]] name = "aho-corasick" version = "1.1.3" @@ -125,50 +136,6 @@ version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" -[[package]] -name = "darling" -version = "0.20.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83b2eb4d90d12bdda5ed17de686c2acb4c57914f8f921b8da7e112b5a36f3fe1" -dependencies = [ - "darling_core", - "darling_macro", -] - -[[package]] -name = "darling_core" -version = "0.20.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "622687fe0bac72a04e5599029151f5796111b90f1baaa9b544d807a5e31cd120" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn", -] - -[[package]] -name = "darling_macro" -version = "0.20.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "733cabb43482b1a1b53eee8583c2b9e8684d592215ea83efd305dd31bc2f0178" -dependencies = [ - "darling_core", - "quote", - "syn", -] - -[[package]] -name = "deranged" -version = "0.3.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" -dependencies = [ - "powerfmt", -] - [[package]] name = "derive_arbitrary" version = "1.3.2" @@ -180,39 +147,6 @@ dependencies = [ "syn", ] -[[package]] -name = "diesel" -version = "2.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62d6dcd069e7b5fe49a302411f759d4cf1cf2c27fe798ef46fb8baefc053dd2b" -dependencies = [ - "diesel_derives", - "libsqlite3-sys", - "time", -] - -[[package]] -name = "diesel_derives" -version = "2.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59de76a222c2b8059f789cbe07afbfd8deb8c31dd0bc2a21f85e256c1def8259" -dependencies = [ - "diesel_table_macro_syntax", - "dsl_auto_type", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "diesel_table_macro_syntax" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "209c735641a413bc68c4923a9d6ad4bcb3ca306b794edaa7eb0b3228a99ffb25" -dependencies = [ - "syn", -] - [[package]] name = "displaydoc" version = "0.2.5" @@ -224,26 +158,6 @@ dependencies = [ "syn", ] -[[package]] -name = "dsl_auto_type" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0892a17df262a24294c382f0d5997571006e7a4348b4327557c4ff1cd4a8bccc" -dependencies = [ - "darling", - "either", - "heck", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "either" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" - [[package]] name = "encoding_rs" version = "0.8.34" @@ -259,6 +173,18 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +[[package]] +name = "fallible-iterator" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" + +[[package]] +name = "fallible-streaming-iterator" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a" + [[package]] name = "flate2" version = "1.0.30" @@ -293,10 +219,24 @@ dependencies = [ ] [[package]] -name = "fnv" -version = "1.0.7" +name = "getrandom" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "hashbrown" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" +dependencies = [ + "ahash", +] [[package]] name = "hashbrown" @@ -305,16 +245,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" [[package]] -name = "heck" -version = "0.5.0" +name = "hashlink" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" - -[[package]] -name = "ident_case" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" +checksum = "7249a3129cbc1ffccd74857f81464a323a152173cdb134e0fd81bc803b29facf" +dependencies = [ + "hashbrown 0.11.2", +] [[package]] name = "indexmap" @@ -323,7 +260,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" dependencies = [ "equivalent", - "hashbrown", + "hashbrown 0.14.5", ] [[package]] @@ -336,12 +273,6 @@ dependencies = [ "mach2", ] -[[package]] -name = "itoa" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" - [[package]] name = "libc" version = "0.2.155" @@ -350,10 +281,11 @@ checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" [[package]] name = "libsqlite3-sys" -version = "0.28.0" +version = "0.22.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c10584274047cb335c23d3e61bcef8e323adae7c5c8c760540f73610177fc3f" +checksum = "290b64917f8b0cb885d9de0f9959fe1f775d7fa12f1da2db9001c1c8ab60f89d" dependencies = [ + "cc", "pkg-config", "vcpkg", ] @@ -419,12 +351,6 @@ dependencies = [ "libc", ] -[[package]] -name = "num-conv" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" - [[package]] name = "num_enum" version = "0.7.2" @@ -464,12 +390,6 @@ version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" -[[package]] -name = "powerfmt" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" - [[package]] name = "proc-macro-crate" version = "3.1.0" @@ -536,6 +456,21 @@ version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" +[[package]] +name = "rusqlite" +version = "0.25.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c4b1eaf239b47034fb450ee9cdedd7d0226571689d8823030c4b6c2cb407152" +dependencies = [ + "bitflags 1.3.2", + "fallible-iterator", + "fallible-streaming-iterator", + "hashlink", + "libsqlite3-sys", + "memchr", + "smallvec", +] + [[package]] name = "scopeguard" version = "1.2.0" @@ -582,10 +517,10 @@ dependencies = [ ] [[package]] -name = "strsim" -version = "0.11.1" +name = "smallvec" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "syn" @@ -618,37 +553,6 @@ dependencies = [ "syn", ] -[[package]] -name = "time" -version = "0.3.36" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" -dependencies = [ - "deranged", - "itoa", - "num-conv", - "powerfmt", - "serde", - "time-core", - "time-macros", -] - -[[package]] -name = "time-core" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" - -[[package]] -name = "time-macros" -version = "0.2.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" -dependencies = [ - "num-conv", - "time-core", -] - [[package]] name = "toml_datetime" version = "0.6.6" @@ -693,6 +597,18 @@ version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + [[package]] name = "winapi" version = "0.3.9" @@ -730,8 +646,9 @@ version = "0.1.0" dependencies = [ "anyhow", "calamine", - "diesel", "fltk", + "libsqlite3-sys", + "rusqlite", "serialport", ] diff --git a/Cargo.toml b/Cargo.toml index 047e3ec..e862984 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,6 +9,6 @@ edition = "2021" anyhow="^1.0.86" fltk = { version = "^1.4", features = ["fltk-bundled"] } calamine="0.25.0" -diesel = { version = "2.2.1", features = ["sqlite"] } -#serial="0.4" -serialport="4.4.0" \ No newline at end of file +serialport="4.4.0" +rusqlite="0.25.4" +libsqlite3-sys = { version = "0.22.2", features = ["bundled"] } \ No newline at end of file diff --git a/lib/sqlite3.lib b/lib/sqlite3.lib new file mode 100644 index 0000000..9e20e15 Binary files /dev/null and b/lib/sqlite3.lib differ diff --git a/src/models/mod.rs b/src/models/mod.rs index e69de29..3b9172e 100644 --- a/src/models/mod.rs +++ b/src/models/mod.rs @@ -0,0 +1 @@ +pub(crate) mod write_result; \ No newline at end of file diff --git a/src/models/write_result.rs b/src/models/write_result.rs new file mode 100644 index 0000000..83b14c4 --- /dev/null +++ b/src/models/write_result.rs @@ -0,0 +1,6 @@ +pub(crate) struct WriteResult{ + pub(crate) id: i32, + pub(crate) imei: String, + pub(crate) sn: String, + pub(crate) write_date: String, +} \ No newline at end of file diff --git a/src/services/excel_service.rs b/src/services/excel_service.rs new file mode 100644 index 0000000..e69de29 diff --git a/src/services/mod.rs b/src/services/mod.rs index dea22fa..64f4677 100644 --- a/src/services/mod.rs +++ b/src/services/mod.rs @@ -1 +1,5 @@ -mod serial_service; \ No newline at end of file +mod serial_service; +mod sqlite_service; +mod work_service; +mod excel_service; +mod ui_service; \ No newline at end of file diff --git a/src/services/serial_service.rs b/src/services/serial_service.rs index 20604ac..affb9be 100644 --- a/src/services/serial_service.rs +++ b/src/services/serial_service.rs @@ -1,4 +1,3 @@ -use std::fmt::format; use anyhow::Result; use serialport::*; use std::io::prelude::*; @@ -44,7 +43,7 @@ impl SerialService { pub fn send_command_with_target AsRef>(&mut self, command: T, timeout: Option, target: T) -> Result { let target_str = target.as_ref(); - _ = return match self.seand_command(command, timeout) { + _ = return match self.send_command(command, timeout) { Ok(resp) => { Ok(resp.contains(target_str)) }, Err(err) => Err(err) }; diff --git a/src/services/sqlite_service.rs b/src/services/sqlite_service.rs new file mode 100644 index 0000000..841b992 --- /dev/null +++ b/src/services/sqlite_service.rs @@ -0,0 +1,56 @@ +use anyhow::Result; +use crate::models::write_result::WriteResult; +use rusqlite::{Connection}; + +pub(crate) struct SqliteService { + conn: Connection, +} +impl Default for SqliteService { + fn default() -> Self { + //TODO: fix cant use path to create service + return match Self::new(".data.db".to_string()){ + Ok(service) => service, + Err(err) => panic!("{}", err.to_string()) + } +} +} + +impl SqliteService { + pub fn new(conn_str: String) -> Result { + let conn = Connection::open(conn_str)?; + Ok(Self { conn }) + } + + pub fn create_table(&self) -> Result<()> { + self.conn.execute( + "CREATE TABLE IF NOT EXISTS write_results ( + id INTEGER PRIMARY KEY, + imei TEXT NOT NULL, + sn TEXT NOT NULL, + write_date TEXT NOT NULL + )", + [], + )?; + Ok(()) + } + + pub fn insert(&self, write_result: WriteResult) -> Result<()> { + self.conn.execute( + "INSERT INTO write_results (imei, sn, write_date) VALUES (?1, ?2, ?3)", + &[&write_result.imei, &write_result.sn, &write_result.write_date], + )?; + Ok(()) + } + + pub fn check_sn(&self, sn: &str) -> Result { + let mut stmt = self.conn.prepare("SELECT sn FROM write_results WHERE sn = ?1")?; + let mut rows = stmt.query(&[&sn])?; + Ok(rows.next()?.is_some()) + } +} + + +#[test] +fn create_sql_service_test() { + let service = SqliteService::default(); +} diff --git a/src/services/ui_service.rs b/src/services/ui_service.rs new file mode 100644 index 0000000..e69de29 diff --git a/src/services/work_service.rs b/src/services/work_service.rs new file mode 100644 index 0000000..2ea1a88 --- /dev/null +++ b/src/services/work_service.rs @@ -0,0 +1,7 @@ +use crate::services::{serial_service::SerialService, sqlite_service::SqliteService}; + + +pub struct WorkService { + serial_service: SerialService, + sqlite_service: SqliteService, +} \ No newline at end of file