+ DBLib which is basically our "datbase" driver

This stands to be the only data we're going to bother supporting right now
THe reason for this is because of sheer lazyness
This commit is contained in:
shockrah 2021-09-06 16:32:37 -07:00
commit 01f64375f2
2 changed files with 87 additions and 0 deletions

10
dblib/Cargo.toml Normal file
View File

@ -0,0 +1,10 @@
[package]
name = "dblib"
version = "0.1.0"
edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
serde = { version = "1.0", features = ["derive"] }
serde_json = { version = "1.0" }

77
dblib/src/lib.rs Normal file
View File

@ -0,0 +1,77 @@
use std::error::Error;
use std::fs::File;
use std::io::BufReader;
use std::io::prelude::*;
use serde::{Serialize, Deserialize};
fn dev_urandom() -> std::io::Result<String> {
let mut file = File::open("/dev/urandom")?;
let mut buf: [u8;48] = [0;48];
file.read_exact(&mut buf)?;
let mut output = String::new();
for byte in buf.iter() {
let hex = format!("{:02X}", byte);
output.push_str(hex.as_str());
}
// Return the hex encoded random bytes
return Ok(output);
}
#[derive(Serialize, Deserialize)]
pub struct DB {
keys: Vec<String>
}
impl DB {
pub fn new_entry(filename: String) -> Result<String, Box<dyn Error>> {
let file = File::open(filename.as_str())?;
let reader = BufReader::new(file);
let mut data: DB = serde_json::from_reader(reader)?;
// Generate some new key data
let key = dev_urandom(); // create a new key
// Add that new key to the json file
match key {
Ok(key) => {
data.keys.push(key.clone());
let file = File::open(filename)?;
serde_json::to_writer(file, &data)?;
return Ok(key)
},
Err(e) => {
panic!()
}
}
}
pub fn remove_entry(filename: String, key: String) -> Result<(), Box<dyn Error>> {
let file = File::open(filename.as_str())?;
let reader = BufReader::new(file);
let mut data: DB = serde_json::from_reader(reader)?;
let idx = data.keys.iter().position(|item| key == key);
if let Some(idx) = idx {
data.keys.remove(idx);
}
Ok(())
}
pub fn get_entry(filename: String, key: String) -> Result<Option<String>, Box<dyn Error>> {
let file = File::open(filename.as_str())?;
let reader = BufReader::new(file);
let data: DB = serde_json::from_reader(reader)?;
// WARNING: extreme autism
match data.keys.iter().find(|item| item.clone() == &key) {
Some(item) => Ok(Some(item.clone())),
None => Ok(None)
}
}
}