#bittorrent #metainfo #directory #file #torrent

bip_metainfo

解析和构建 BitTorrent metainfo 文件

18 个版本 (11 个破坏性版本)

使用旧的 Rust 2015

0.12.0 2017 年 11 月 15 日
0.11.0 2017 年 7 月 27 日
0.10.0 2017 年 6 月 11 日
0.5.0 2016 年 12 月 31 日
0.0.0 2015 年 12 月 18 日

#50#torrent

每月 40 次下载
用于 5 crates

MIT/Apache

190KB
4K SLoC

用于解析和构建 metainfo 文件的库。

示例

从目录构建和解析 metainfo 文件

    extern crate bip_metainfo;

    use bip_metainfo::{MetainfoBuilder, Metainfo};

    fn main() {
        let builder = MetainfoBuilder::new()
            .set_created_by(Some("bip_metainfo example"))
            .set_comment(Some("Metainfo File From A File"));

        // Build the file from the crate's src folder
        let bytes = builder.build(1, "src", |progress| {
            // Progress Is A Value Between 0.0 And 1.0
            assert!(progress <= 1.0f64);
        }).unwrap();
        let file = Metainfo::from_bytes(&bytes).unwrap();

        assert_eq!(file.info().directory(), Some("src".as_ref()));
    }

从直接数据构建和解析 metainfo 文件

    extern crate bip_metainfo;

    use bip_metainfo::{MetainfoBuilder, Metainfo, DirectAccessor};

    fn main() {
        let builder = MetainfoBuilder::new()
            .set_created_by(Some("bip_metainfo example"))
            .set_comment(Some("Metainfo File From A File"));

        let file_name = "FileName.txt";
        let file_data = b"This is our file data, it is already in memory!!!";
        let accessor = DirectAccessor::new(file_name, file_data);

        // Build the file from some data that is already in memory
        let bytes = builder.build(1, accessor, |progress| {
            // Progress Is A Value Between 0.0 And 1.0
            assert!(progress <= 1.0f64);
        }).unwrap();
        let file = Metainfo::from_bytes(&bytes).unwrap();

        assert_eq!(file.info().directory(), None);
        assert_eq!(file.info().files().count(), 1);

        let single_file = file.info().files().next().unwrap();
        assert_eq!(single_file.length() as usize, file_data.len());
        assert_eq!(single_file.path().iter().count(), 1);
        assert_eq!(single_file.path().to_str().unwrap(), file_name);
    }

依赖项

~7–17MB
~187K SLoC