use std::fs::{OpenOptions};
use std::io::{Read, Seek, SeekFrom, Write};
use crate::types::Record;
pub fn append_record(record: &Record, path: &String) -> u64 {
let mut file = OpenOptions::new()
.create(true)
.append(true)
.read(true)
.open(path)
.unwrap();
let offset = file.seek(SeekFrom::End(0)).unwrap();
let serialized = bincode::serialize(record).unwrap();
let length = serialized.len() as u64;
file.write_all(&length.to_le_bytes()).unwrap();
file.write_all(&serialized).unwrap();
offset
}
pub fn retrieve_record(offset: u64, path: &String) -> Record {
let mut file = OpenOptions::new()
.read(true)
.open(path)
.unwrap();
file.seek(SeekFrom::Start(offset)).unwrap();
let mut record_size_buffer = [0u8; 8];
file.read_exact(&mut record_size_buffer).unwrap();
let record_size = u64::from_le_bytes(record_size_buffer);
let mut record_buffer = vec![0u8; record_size as usize];
file.read_exact(&mut record_buffer).unwrap();
bincode::deserialize(&record_buffer).unwrap()
}