5 个版本

0.1.4 2022 年 10 月 18 日
0.1.3 2019 年 8 月 1 日
0.1.2 2019 年 7 月 26 日
0.1.1 2019 年 7 月 1 日
0.1.0 2019 年 7 月 1 日

#1026文件系统

每月 23 次下载

自定义许可证

130KB
3K SLoC

Chicon

Version Documentation

Chicon 是一个 Rust 文件抽象系统。Chicon 是一个旨在提供简单、统一和通用的 API 以与任何文件系统交互的库。Chicon 作为抽象层提供特质、类型和方法。主要的 FileSystem 特质基于对 std::fs::* 的使用,以便在从物理文件系统切换到像 S3、SFTP、SSH 或内存中的虚拟文件系统时保持透明。Chicon 适用于需要在不同文件系统上存储目录和文件的任何情况。内存文件系统可以用于编写测试,以实现比 IO 文件系统更快的执行。

示例

使用 S3 作为后端创建文件

use std::io::prelude::*;
use chicon::{DirEntry, File, FileSystem, S3FileSystem};
let s3_fs = S3FileSystem::new(
     String::from("my_access_key_id"),
     String::from("secret_access_key"),
     String::from("my_bucket"),
     String::from("my_region"),
     String::from("http://127.0.0.1"), // endpoint
);
let mut file = s3_fs.create_file("test.test").unwrap()
file.write_all(String::from("here is a test").as_bytes()).unwrap();
file.sync_all().unwrap();
let mut content: String = String::new();
file.read_to_string(&mut content).unwrap();
assert_eq!(content, String::from("here is a test"));
s3_fs.remove_file("test.test").unwrap(); // To delete the file

使用 SFTP 作为后端创建文件

您只需将 S3FileSystem::new 更改为 SFTPFileSystem::new

use std::io::prelude::*;
use chicon::{DirEntry, File, FileSystem, SFTPFileSystem};
let sftp_fs = SFTPFileSystem::new(
    String::from("127.0.0.1:2222"), // host:port
    String::from("foo"), // user
    None, // Some("passphrase") if you have a passphrase configured on your ssh key
    "/Users/foo/.ssh/my_private_key", // ABSOLUTE path to private key
    "/Users/foo/.ssh/my_public_key.pub" // ABSOLUTE path to public key
);
let mut file = sftp_fs.create_file("test.test").unwrap()
file.write_all(String::from("here is a test").as_bytes()).unwrap();
file.sync_all().unwrap();
let mut content: String = String::new();
file.read_to_string(&mut content).unwrap();
assert_eq!(content, String::from("here is a test"));

使用 SSH 作为后端读取文件

use std::io::prelude::*;
use chicon::{DirEntry, File, FileSystem, SSHFileSystem};
let ssh_fs = SSHFileSystem::new(
    String::from("127.0.0.1:2222"), // host:port
    String::from("foo"), // user
    None, // Some("passphrase") if you have a passphrase configured on your ssh key
    "/Users/foo/.ssh/my_private_key", // ABSOLUTE path to private key
    "/Users/foo/.ssh/my_public_key.pub" // ABSOLUTE path to public key
);
let mut file = ssh_fs.open_file("share/myfile.txt").unwrap();
let mut buffer = String::new();
file.read_to_string(&mut buffer).unwrap();
println!("Here is the content of your file: {}", buffer);

使用 OS(本地文件系统)作为后端创建和读取目录

use std::io::prelude::*;
use chicon::{DirEntry, File, FileType, FileSystem, OsFileSystem};
let os_fs = OsFileSystem::new();
os_fs.create_dir_all("testreaddir/test").unwrap();
os_fs.create_file("testreaddir/mytest.test").unwrap();
let dir_entries = os_fs.read_dir("testreaddir").unwrap();
assert!(!dir_entries.is_empty())
assert_eq!(dir_entries.len(), 2)
assert_eq!(
    dir_entries.get(0).unwrap().path().unwrap(),
    PathBuf::from("testreaddir/test")
);
assert_eq!(
    dir_entries.get(0).unwrap().file_type().unwrap(),
    FileType::Directory
);
std::fs::remove_dir_all("testreaddir").unwrap(); // To remove dir and all entries inside

如果您需要更多示例,请查看 GitHub 仓库中的源代码测试。

路线图

  • 实现 Swift 作为新的后端
  • 使用更多 Rust 习惯用法重构
  • 添加异步支持

依赖项

~27–38MB
~685K SLoC