//! A file table module for AbleOS //! //! This module provides a file table interface for AbleOS. //! //! # Examples //! ``` //! use relib::filesystem::ProtoFileTable; //! let mut file_table = ProtoFileTable::new(); //! file_table.add_file("test.txt", "Hello, world!".as_bytes()); //! let file = file_table.get_file("test.txt"); //! assert_eq!(file.unwrap().as_slice(), "Hello, world!".as_bytes()); //! ``` //! # Notes //! The file table is a simple in-memory hashmap. //! The file table is not thread safe. //! The file table is not persistent. use alloc::{ string::{String, ToString}, vec::Vec, }; use hashbrown::HashMap; pub mod contain; pub mod file; use file::File; /// A prototype file table for AbleOS /// /// This module provides a file table interface for AbleOS. /// /// # Examples /// ``` /// use crate::filesystem::ProtoFileTable; /// let mut file_table = ProtoFileTable::new(); /// file_table.add_file("test.txt", "Hello, world!".as_bytes()); /// let file = file_table.get_file("test.txt"); /// assert_eq!(file.unwrap().as_slice(), "Hello, world!".as_bytes()); /// ``` pub struct ProtoFileTable { files: HashMap<String, File>, } impl ProtoFileTable { pub fn new() -> ProtoFileTable { ProtoFileTable { files: HashMap::new(), } } pub fn add_file(&mut self, path: &str, contents: File) { self.files.insert(path.to_string(), contents); } pub fn get_file(&self, path: &str) -> Option<&File> { self.files.get(path) } } #[cfg(test)] mod tests;