#bittorrent #bencode

lava_torrent

A library for parsing/encoding bencode and .torrent files

17 releases (9 breaking)

Uses old Rust 2015

0.10.0 Mar 13, 2023
0.8.1 Aug 4, 2022
0.7.1 Jul 17, 2022
0.7.0 Mar 28, 2022
0.2.1 May 25, 2018

#309 in Parser implementations

Download history 80/week @ 2022-12-06 43/week @ 2022-12-13 60/week @ 2022-12-20 53/week @ 2022-12-27 33/week @ 2023-01-03 46/week @ 2023-01-10 49/week @ 2023-01-17 95/week @ 2023-01-24 91/week @ 2023-01-31 110/week @ 2023-02-07 122/week @ 2023-02-14 50/week @ 2023-02-21 93/week @ 2023-02-28 82/week @ 2023-03-07 73/week @ 2023-03-14 126/week @ 2023-03-21

381 downloads per month
Used in find-torrent-data

MIT/Apache

700KB
5K SLoC

lava_torrent

crates.io Build Status codecov

lava_torrent is a library for parsing/encoding/creating bencode and .torrent files.

Quick Start

Read a torrent (v1) and print it and its info hash.

use lava_torrent::torrent::v1::Torrent;

let torrent = Torrent::read_from_file("sample.torrent").unwrap();
println!("{}", torrent);
println!("Info hash: {}", torrent.info_hash());

Create a torrent (v1) from files in a directory and save the .torrent file.

use lava_torrent::torrent::v1::TorrentBuilder;

let torrent = TorrentBuilder::new("dir/", 1048576).build().unwrap();
torrent.write_into_file("sample.torrent").unwrap();

Bencode (de)serialization.

use lava_torrent::bencode::BencodeElem;

let bytes = "d4:spam4:eggse".as_bytes();
let dict = BencodeElem::Dictionary([("spam".to_owned(), "eggs".into())].into());

assert_eq!(BencodeElem::from_bytes(bytes).unwrap()[0], dict);
assert_eq!(dict.encode(), bytes);

assert!(dict.write_into_file("/tmp/foo").is_ok());
assert_eq!(BencodeElem::from_file("/tmp/foo").unwrap()[0], dict);

More Info

Please check the documentation.

License: MIT OR Apache-2.0

Dependencies

~1.3–2MB
~47K SLoC