diff --git a/Cargo.lock b/Cargo.lock index 6b446b9..446f1aa 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -110,6 +110,18 @@ version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" +[[package]] +name = "itoa" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" + +[[package]] +name = "memchr" +version = "2.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" + [[package]] name = "once_cell_polyfill" version = "1.70.2" @@ -122,6 +134,7 @@ version = "0.1.0" dependencies = [ "clap", "serde", + "serde_json", ] [[package]] @@ -172,6 +185,19 @@ dependencies = [ "syn", ] +[[package]] +name = "serde_json" +version = "1.0.149" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" +dependencies = [ + "itoa", + "memchr", + "serde", + "serde_core", + "zmij", +] + [[package]] name = "strsim" version = "0.11.1" @@ -215,3 +241,9 @@ checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" dependencies = [ "windows-link", ] + +[[package]] +name = "zmij" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1966f8ac2c1f76987d69a74d0e0f929241c10e78136434e3be70ff7f58f64214" diff --git a/Cargo.toml b/Cargo.toml index 8c31b46..b507dca 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,3 +6,4 @@ edition = "2024" [dependencies] clap = { version = "4.5.54", features = ["derive"] } serde = { version = "1.0.228", features = ["derive"] } +serde_json = "1.0.149" diff --git a/src/logic.rs b/src/logic.rs index 3311f2b..889c291 100644 --- a/src/logic.rs +++ b/src/logic.rs @@ -2,6 +2,8 @@ use serde::{Deserialize, Serialize}; use std::fmt; +use std::fs; +use std::error::Error; #[derive(Default, Serialize, Deserialize, PartialEq)] enum Stav { @@ -66,7 +68,39 @@ struct Kniznica { } impl Kniznica { - // fn pridaj_knihu - // fn odstran_knihu - // fn daj_knihu_podla_isbn + // Asociovana funkcia + fn nacitaj_zo_suboru(cesta: &std::path::PathBuf) -> Option{ + let obsah = match std::fs::read_to_string(cesta) { + Ok(text) => text, + Err(_) => return None, + }; + let kniznica = match serde_json::from_str(obsah.as_str()) { + Ok(k) => k, + Err(_) => return None, + }; + Some(kniznica) + } + // Metoda + fn uloz_do_suboru(&self, cesta: &std::path::PathBuf) -> bool { + let converted = match serde_json::to_string(&self) { + Ok(k) => k, + Err(_) => return false, + }; + match std::fs::write(cesta, converted) { + Ok(_) => return true, + Err(_) => return false, + }; + } + + fn pridaj_knihu(&mut self, nova_kniha: Kniha) -> Result<(), ()> { + if (&self.knihy).len() > 0 { + for x in &self.knihy { + if x.isbn == nova_kniha.isbn { + return Err(()); + } + } + } + self.knihy.push(nova_kniha); + Ok(()) + } }