From 398f97c7161793781d4b66683efb8e5e43488f44 Mon Sep 17 00:00:00 2001 From: rhpidfyre Date: Tue, 24 Dec 2024 17:47:59 -0500 Subject: [PATCH] move lib to its own repo --- Cargo.lock | 94 +++++++++++++++++++++++++++++++++--------------------- Cargo.toml | 1 + src/lib.rs | 3 +- src/rc.rs | 94 ++++++++++++++++++++++++++++++++++++++---------------- 4 files changed, 126 insertions(+), 66 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c286db1..ef2fd3a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -16,9 +16,9 @@ checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" [[package]] name = "bstr" -version = "1.11.0" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a68f1f47cdf0ec8ee4b941b2eee2a80cb796db73118c0dd09ac63fbe405be22" +checksum = "786a307d683a5bf92e6fd5fd69a7eb613751668d1d8d67d802846dfe367c62c8" dependencies = [ "memchr", "serde", @@ -32,9 +32,9 @@ checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" [[package]] name = "cc" -version = "1.2.2" +version = "1.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f34d93e62b03caf570cccc334cbc6c2fceca82f39211051345108adcba3eebdc" +checksum = "c31a0499c1dc64f458ad13872de75c0eb7e3fdb0e67964610c914b034fc5956e" dependencies = [ "shlex", ] @@ -68,18 +68,18 @@ dependencies = [ [[package]] name = "const_format" -version = "0.2.33" +version = "0.2.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50c655d81ff1114fb0dcdea9225ea9f0cc712a6f8d189378e82bdf62a473a64b" +checksum = "126f97965c8ad46d6d9163268ff28432e8f6a1196a55578867832e3049df63dd" dependencies = [ "const_format_proc_macros", ] [[package]] name = "const_format_proc_macros" -version = "0.2.33" +version = "0.2.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eff1a44b93f47b1bac19a27932f5c591e43d1ba357ee4f61526c8a25603f0eb1" +checksum = "1d57c2eccfb16dbac1f4e61e206105db5820c9d26c3c472bc17c774259ef7744" dependencies = [ "proc-macro2", "quote", @@ -94,18 +94,18 @@ checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" [[package]] name = "home" -version = "0.5.9" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" dependencies = [ "windows-sys", ] [[package]] name = "js-sys" -version = "0.3.74" +version = "0.3.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a865e038f7f6ed956f788f0d7d60c541fff74c7bd74272c5d4cf15c63743e705" +checksum = "6717b6b5b077764fb5966237269cb3c64edddde4b14ce42647430a78ced9e7b7" dependencies = [ "once_cell", "wasm-bindgen", @@ -113,9 +113,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.167" +version = "0.2.169" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09d6582e104315a817dff97f75133544b2e094ee22447d2acf4a74e189ba06fc" +checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" [[package]] name = "liblambdashell" @@ -125,6 +125,7 @@ dependencies = [ "const_format", "home", "mlua", + "thiserror", "uzers", "whoami", ] @@ -277,9 +278,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.7" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f" +checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" dependencies = [ "bitflags", ] @@ -298,18 +299,18 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "serde" -version = "1.0.215" +version = "1.0.216" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6513c1ad0b11a9376da888e3e0baa0077f1aed55c17f50e7b2397136129fb88f" +checksum = "0b9781016e935a97e8beecf0c933758c97a5520d32930e460142b4cd80c6338e" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.215" +version = "1.0.216" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad1e866f866923f252f05c889987993144fb74e722403468a4ebd70c3cd756c0" +checksum = "46f859dbbf73865c6627ed570e78961cd3ac92407a2d117204c49232485da55e" dependencies = [ "proc-macro2", "quote", @@ -330,15 +331,35 @@ checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "syn" -version = "2.0.90" +version = "2.0.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "919d3b74a5dd0ccd15aeb8f93e7006bd9e14c295087c9896a110f490752bcf31" +checksum = "d53cbcb5a243bd33b7858b1d7f4aca2153490815872d86d955d6ea29f743c035" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] +[[package]] +name = "thiserror" +version = "2.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f072643fd0190df67a8bab670c20ef5d8737177d6ac6b2e9a236cb096206b2cc" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b50fa271071aae2e6ee85f842e2e28ba8cd2c5fb67f11fcb1fd70b276f9e7d4" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "unicode-ident" version = "1.0.14" @@ -369,9 +390,9 @@ checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" [[package]] name = "wasm-bindgen" -version = "0.2.97" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d15e63b4482863c109d70a7b8706c1e364eb6ea449b201a76c5b89cedcec2d5c" +checksum = "a474f6281d1d70c17ae7aa6a613c87fce69a127e2624002df63dcb39d6cf6396" dependencies = [ "cfg-if", "once_cell", @@ -380,13 +401,12 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.97" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d36ef12e3aaca16ddd3f67922bc63e48e953f126de60bd33ccc0101ef9998cd" +checksum = "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79" dependencies = [ "bumpalo", "log", - "once_cell", "proc-macro2", "quote", "syn", @@ -395,9 +415,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.97" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "705440e08b42d3e4b36de7d66c944be628d579796b8090bfa3471478a2260051" +checksum = "2cc6181fd9a7492eef6fef1f33961e3695e4579b9872a6f7c83aee556666d4fe" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -405,9 +425,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.97" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98c9ae5a76e46f4deecd0f0255cc223cfa18dc9b261213b8aa0c7b36f61b3f1d" +checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2" dependencies = [ "proc-macro2", "quote", @@ -418,15 +438,15 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.97" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ee99da9c5ba11bd675621338ef6fa52296b76b83305e9b6e5c77d4c286d6d49" +checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6" [[package]] name = "web-sys" -version = "0.3.74" +version = "0.3.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a98bc3c33f0fe7e59ad7cd041b89034fa82a7c2d4365ca538dda6cdaf513863c" +checksum = "04dd7223427d52553d3702c004d3b2fe07c148165faa56313cb00211e31c12bc" dependencies = [ "js-sys", "wasm-bindgen", @@ -445,9 +465,9 @@ dependencies = [ [[package]] name = "windows-sys" -version = "0.52.0" +version = "0.59.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" dependencies = [ "windows-targets", ] diff --git a/Cargo.toml b/Cargo.toml index 697535b..6983611 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,5 +8,6 @@ color-print = "0.3.7" const_format = "0.2.33" home = "0.5.9" mlua = { version = "0.10.0", features = ["luau-jit"] } +thiserror = "2.0.9" uzers = "0.12.1" whoami = "1.5.2" diff --git a/src/lib.rs b/src/lib.rs index eb276bc..1213bd7 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -3,4 +3,5 @@ pub const VERSION: &str = env!("CARGO_PKG_VERSION"); pub mod shell; mod commands; mod ps; -mod rc; \ No newline at end of file +mod rc; +mod tests; \ No newline at end of file diff --git a/src/rc.rs b/src/rc.rs index 627cb37..c144daa 100644 --- a/src/rc.rs +++ b/src/rc.rs @@ -1,44 +1,82 @@ -use std::{io, path::PathBuf}; +use std::{io, fs, io::Write, path::PathBuf}; +use thiserror::Error; -pub enum RcError { - FolderMissing, - FolderTryExists(io::Error) +const DEFAULT_CONFIG_CONTENT: &str = r#"--!strict + +local Username = Shell.system.username +local Hostname = Shell.system.hostname + +Shell.prompt = `{Username}@{Hostname} λ `"#; + +#[derive(Debug, Error)] +enum RcError { + #[error("Folder is missing")] + FolderMissing, + #[error("Failed to check folder existence: {0}")] + FolderTryExists(#[from] io::Error), } trait is_valid { + fn try_exists_handle(&self) -> bool; fn is_valid(&self) -> Option; + fn is_valid_silent(&self) -> Option; + fn is_valid_or_create(&self) -> Option; } - impl is_valid for PathBuf { + fn try_exists_handle(&self) -> bool { + self.try_exists().map_or_else(|e| {RcError::FolderTryExists(e)}, |exists| match exists { + true => todo!(), + false => todo!() + }) + } + fn is_valid(&self) -> Option { - let try_exists = match self.try_exists() { - Ok(config_exist) => match config_exist { - true => Ok(self.to_path_buf()), - false => Err(RcError::FolderMissing), - }, - Err(trye_error) => Err(RcError::FolderTryExists(trye_error)), - }; - match try_exists { - Ok(file) => Some(file.to_path_buf()), - Err(rc_error) => match rc_error { - RcError::FolderMissing => todo!(), - RcError::FolderTryExists(error) => { - println!("{error}"); - None - }, - }, - } + self.try_exists().map_or_else(|e| { + println!("{}", RcError::FolderTryExists(e)); + None + }, |exists| match exists { + true => Some(self.to_path_buf()), + false => { + println!("{}", RcError::FolderMissing); + None + } + }) + } + + fn is_valid_silent(&self) -> Option { + self.try_exists().ok().map_or(None, |exists| match exists { + true => Some(self.to_path_buf()), + false => None, + }) + } + + fn is_valid_or_create(&self) -> Option { + self.is_valid().map_or_else(|| { + let new_dir = fs::create_dir(self).map_err(|e| println!("{e}")); + return None + }, |p_buf| Some(p_buf)) } } -fn dot_config_folder() -> Option { +fn config_dir() -> Option { let mut config = home::home_dir()?; config.push(".config"); + config.is_valid()?; + config.push("lambdashell"); config.is_valid() } -fn rc_folder() -> Option { - let mut dot_config = dot_config_folder()?; - dot_config.push("lambdashell"); - dot_config.is_valid() -} +fn config_file() -> Option { + let mut config_file = config_dir()?; + config_file.push("config.luau"); + + if let Some(file) = config_file.is_valid_silent() { + match file.is_file() { + true => { + + }, + false => println!("{:?} is either not a file or permission was denied.", file.as_path().display()) + } + } + None +} \ No newline at end of file