初步编写add逻辑;新增终端颜色库

This commit is contained in:
mrbeanc
2023-12-19 13:49:27 +08:00
parent af5e36c24c
commit 247347a76e
7 changed files with 161 additions and 12 deletions

View File

@@ -1,11 +1,13 @@
use std::collections::HashMap;
use std::path::PathBuf;
use std::fs;
use std::path::{Path, PathBuf};
use std::time::SystemTime;
use serde::{Deserialize, Serialize};
use crate::models::object::Hash;
// 文件元数据结构
#[derive(Debug, Clone)]
struct FileMetaData {
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct FileMetaData {
hash: Hash, // SHA-1 哈希值
size: u64, // 文件大小
created_time: SystemTime, // 创建时间
@@ -14,11 +16,56 @@ struct FileMetaData {
}
// 索引数据结构
#[derive(Debug, Default)]
struct Index {
#[derive(Serialize, Deserialize, Debug, Default)]
pub struct Index {
entries: HashMap<PathBuf, FileMetaData>,
}
impl Index {
// 创建索引
pub(crate) fn new() -> Index {
let mut index = Index {
entries: HashMap::new(),
};
index.load();
return index;
}
// 添加文件
fn add(&mut self, path: PathBuf, data: FileMetaData) {
self.entries.insert(path, data);
}
// 删除文件
fn remove(&mut self, path: PathBuf) {
self.entries.remove(&path);
}
// 获取文件元数据
fn get(&self, path: PathBuf) -> Option<&FileMetaData> {
self.entries.get(&path)
}
// 获取所有文件元数据
fn get_all(&self) -> &HashMap<PathBuf, FileMetaData> {
&self.entries
}
pub fn contains(&self, path: &Path) -> bool {
self.entries.contains_key(path)
}
fn load(&mut self) {
}
/// 二进制序列化
fn save(&self) {
let ser = serde_json::to_string(&self).unwrap();
println!("{}", ser);
}
}
#[cfg(test)]
mod tests {
use std::fs;