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解析器实现 中排名

Download history 17/week @ 2024-03-13 10/week @ 2024-03-20 8/week @ 2024-03-27 23/week @ 2024-04-03 6/week @ 2024-04-10 14/week @ 2024-04-17 13/week @ 2024-04-24 2/week @ 2024-05-01 2/week @ 2024-05-08 5/week @ 2024-05-15 12/week @ 2024-05-22 6/week @ 2024-05-29 19/week @ 2024-06-05 9/week @ 2024-06-12 6/week @ 2024-06-19 19/week @ 2024-06-26

每月下载量 55

MIT 许可证

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服务器,您可以直接创建 FtpEntryUnixFtpEntryMsdos 结构体

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