diff --git a/src/data.rs b/src/data.rs index 9da3990..f397c95 100644 --- a/src/data.rs +++ b/src/data.rs @@ -23,3 +23,12 @@ pub struct BatteryMutable { pub struct BatteryStatic { pub total_capacity: i64, } + +impl Data { + pub fn new(battery_static: BatteryStatic) -> Data { + Data { + data_chunks: Vec::new(), + data_static: battery_static, + } + } +} diff --git a/src/main.rs b/src/main.rs index d916a7f..947bce8 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,14 +1,14 @@ use std::{ error::Error, fs, - io::Read, + io::{Read, Write}, thread::sleep, time::{Duration, SystemTime}, }; -use rkyv::api::low::deserialize; +use rkyv::{Deserialize, api::low::deserialize, rancor}; -use crate::data::{Data, DataChunk}; +use crate::data::{ArchivedData, Data, DataChunk}; mod battery; mod data; @@ -16,17 +16,33 @@ mod data; fn main() -> Result<(), Box> { let mut battery = battery::Battery::new().unwrap(); battery.update().unwrap(); - let battery_file = fs::OpenOptions::new() - .read(true) - .write(true) - .open("./battery.data"); + let battery_file = fs::OpenOptions::new().read(true).open("./battery.data"); let mut data: Data; - let mut meow = battery_file?; - let mut buf: Vec = Vec::new(); - meow.read_to_end(&mut buf)?; + match battery_file { + Ok(mut file) => { + let mut buf: Vec = Vec::new(); + file.read_to_end(&mut buf)?; + let meow_data = rkyv::access::(&buf[..]).unwrap(); + data = deserialize::(meow_data).unwrap(); + } + Err(err) => { + let battery_file = fs::OpenOptions::new() + .read(true) + .create(true) + .open("./battery.data"); + let new_data = Data::new(battery.as_data().0); + let raw_data = rkyv::to_bytes::(&new_data).unwrap(); + battery_file?.write_all(&raw_data)?; + data = new_data; + } + } + let battery_file = fs::OpenOptions::new() + .write(true) + .open("./battery.data") + .unwrap(); loop { battery.update().unwrap(); let timestamp: u64 = SystemTime::now() @@ -39,6 +55,9 @@ fn main() -> Result<(), Box> { battery: batt_data.1, timestamp, }; + data.data_chunks.push(new_chunk); + let raw_data = rkyv::to_bytes::(&data).unwrap(); + battery_file.try_clone()?.write_all(&raw_data)?; sleep(Duration::from_secs(3)); }