use std::fs::File; use std::io::{BufReader, BufWriter}; use crate::{filename, err, DB, uid}; use crate::{VideoStore, VideoMeta, VideoMetaEntry}; impl VideoStore for DB { fn new_video(name: &str, desc: &str) -> err::Result<()> { let fname = filename(); let file = File::open(&fname)?; let reader = BufReader::new(file); // Messing with data we care about let id = uid()?; let mut data: DB = serde_json::from_reader(reader)?; let entry = VideoMetaEntry { name: name.to_string(), desc: if desc.len() != 0 { None } else { Some(desc.to_string()) } }; // update in mem-cache data.videos.insert(id, entry); // update the content on disk let file = File::open(&fname)?; let writer = BufWriter::new(file); serde_json::to_writer(writer, &data)?; Ok(()) } fn del_video(id: String) -> err::Result<()> { let fname = filename(); let file = File::open(&fname)?; let reader = BufReader::new(file); let mut data: DB = serde_json::from_reader(file)?; data.videos.remove(id); let file = File::open(&fname)?; let writer = BufWriter::new(file); serde_json::to_writer(writer, &data)?; Ok(()) } fn get_video(id: Option, name: Option<&str>) -> err::Result { todo!() } fn rename_video(id: String, new: &str) -> err::Result<()> { todo!() } fn redescribe_video(id: String, new: &str) -> err::Result<()> { todo!() } }