4 个版本 (2 个重大更改)
0.3.1 | 2021年1月18日 |
---|---|
0.3.0 | 2021年1月18日 |
0.2.0 | 2021年1月11日 |
0.1.0 | 2020年9月25日 |
1626 在 解析器实现 中排名
每月下载量 55 次
26KB
367 代码行
ftp-cmd-list-parse
这是一个Rust库,可以解析FTP服务器通过 LIST
命令请求返回的字符串。
- Unix样式
drwxr-xr-x 10 root root 4096 Dec 21 2012 usr
brw-rw---- 1 root disk 8, 0 Nov 24 10:13 sda
-rw-rw-rw- 1 owner 1234 7045120 Sep 02 2012 music.mp3
lrwxrwxrwx 1 root root 51 Apr 4 23:57 www.nodeftp.github -> /etc/nginx/sites-available/www.nodeftp.github
- Msdos样式
08-22-2018 02:05PM <DIR> wwwroot
08-22-18 12:59PM 99710 logo.jpg
08-22-18 03:01AM 99710 music.mp3
示例
use ftp_cmd_list_parse::FtpEntry;
let ftp_response: &'static str = "drwxr-xr-x 10 root root 4096 Dec 21 2012 usr";
if let Some(ftp_entry) = FtpEntry::new(ftp_response) {
println!("{}", ftp_entry.name()); // "usr"
println!("{:?}", ftp_entry.kind()); // FtpEntryKind::Directory
assert!(ftp_entry.is_unix_type()); // true
}
您需要将 FtpEntry
转换为 FtpEntryUnix
以查看MSDOS FTP服务器不支持的其他字段
use std::convert::TryFrom; // also you can create `FtpEntry` by use `TryFrom` or `TryInto` traits.
use ftp_cmd_list_parse::FtpEntry;
let ftp_response: &'static str = "drwxr-xr-x 10 root root 4096 Dec 21 2012 usr";
if let Ok(ftp_entry) = FtpEntry::try_from(ftp_response) {
match ftp_entry.try_to_unix_type() {
Ok(ftp_entry_unix) => { // `FtpEntryUnix` type
println!("Owner: {}", ftp_entry_unix.owner); // "root"
println!("Group: {}", ftp_entry_unix.group); // "root"
println!("Permissions: {}", ftp_entry_unix.permissions.as_str()); // "rwxr-xr-x"
},
Err(ftp_entry) => { // `FtpEntry` type
// Here we got our `FtpEntry` back.
println!("FtpEntry is not an UNIX-format!");
}
}
// Also you can use pattern-matching to destruct enum:
// if let FtpEntry::Msdos(ftp_entry_msdos) = ftp_entry {
// println!("name: {}", ftp_entry_msdos.name());
// }
}
如果您确信正在使用哪种类型的FTP服务器,您可以直接创建 FtpEntryUnix
或 FtpEntryMsdos
结构体
use ftp_cmd_list_parse::FtpEntryUnix;
let ftp_response: &'static str = "drwxr-xr-x 10 root root 4096 Dec 21 2012 usr";
if let Some(ftp_entry_unix) = FtpEntryUnix::new(ftp_response) {
println!("Owner: {}", ftp_entry_unix.owner); // "root"
println!("Group: {}", ftp_entry_unix.group); // "root"
println!("Permissions: {}", ftp_entry_unix.permissions); // "rwxr-xr-x"
}
依赖项
~2.1–3MB
~53K SLoC