aboutsummaryrefslogtreecommitdiff
path: root/src/config.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/config.rs')
-rw-r--r--src/config.rs90
1 files changed, 90 insertions, 0 deletions
diff --git a/src/config.rs b/src/config.rs
new file mode 100644
index 0000000..90ac579
--- /dev/null
+++ b/src/config.rs
@@ -0,0 +1,90 @@
+use std::{env, fs, path::PathBuf};
+
+use anyhow::{Result, anyhow};
+use rand::{Rng, rngs::ThreadRng};
+use serde::Deserialize;
+
+#[derive(Deserialize)]
+pub struct Quoter {
+ #[serde(skip)]
+ randomizer: ThreadRng,
+ groups: (
+ (usize, usize),
+ (usize, usize),
+ (usize, usize),
+ (usize, usize),
+ ),
+ quotes: Vec<Quote>,
+}
+
+impl Quoter {
+ pub fn get_random(&mut self) -> Result<Quote> {
+ self.get_range((0, self.quotes.len()))
+ }
+
+ fn get_range(&mut self, range: (usize, usize)) -> Result<Quote> {
+ if self.quotes.is_empty() {
+ return Err(anyhow!("There are no quotes in your quote files"));
+ }
+ let (l, r) = range;
+ if l > r || l > self.quotes.len() || r > self.quotes.len() {
+ return Err(anyhow!("Your quotes file is corrupted"));
+ }
+ Ok(self
+ .quotes
+ .get(self.randomizer.gen_range(l..=r))
+ .cloned()
+ .unwrap())
+ }
+
+ pub fn get_short(&mut self) -> Result<Quote> {
+ self.get_range(self.groups.0)
+ }
+
+ pub fn get_medium(&mut self) -> Result<Quote> {
+ self.get_range(self.groups.1)
+ }
+
+ pub fn get_long(&mut self) -> Result<Quote> {
+ self.get_range(self.groups.2)
+ }
+
+ pub fn get_huge(&mut self) -> Result<Quote> {
+ self.get_range(self.groups.3)
+ }
+}
+
+#[derive(Deserialize, Clone)]
+pub struct Quote {
+ pub text: String,
+ pub source: Option<String>,
+}
+
+pub fn get_config_folder() -> Result<PathBuf> {
+ let mut path = match env::var("HOME") {
+ Ok(a) => PathBuf::from(a),
+ Err(_) => panic!("Can't access config folder"),
+ };
+
+ path.push(".config");
+ path.push("marika-finger-blaster");
+ if !path.exists() {
+ if path.is_file() {
+ fs::remove_file(&path)?;
+ }
+
+ fs::create_dir_all(&path)?;
+ }
+ Ok(path)
+}
+
+pub fn get_quoter() -> Result<Quoter> {
+ let mut config_folder = get_config_folder()?;
+ config_folder.push("quotes.json");
+ if !config_folder.exists() {
+ return Err(anyhow!("There's no quotes.json file"));
+ }
+ let r = fs::File::open(&config_folder)?;
+ let quoter = serde_json::from_reader(r)?;
+ Ok(quoter)
+}
XMR address: 854DmXNrxULU3ZFJVs4Wc8PFhbq29RhqHhY8W6cdWrtFN3qmooKyyeYPcDzZTNRxphhJ5UzASQfAdEMwSteVqymk28aLhqj