#bittorrent #bencode #serialization #file #bug #now #maintenance

lava_torrent

A library for parsing/encoding bencode and .torrent files

19 releases (10 breaking)

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

#677 in Parser implementations

Download history 42/week @ 2024-07-31 22/week @ 2024-08-07 19/week @ 2024-08-14 38/week @ 2024-08-21 47/week @ 2024-08-28 10/week @ 2024-09-04 21/week @ 2024-09-11 28/week @ 2024-09-18 59/week @ 2024-09-25 32/week @ 2024-10-02 32/week @ 2024-10-09 25/week @ 2024-10-16 7/week @ 2024-10-23 49/week @ 2024-10-30 125/week @ 2024-11-06 65/week @ 2024-11-13

248 downloads per month
Used in 2 crates

MIT/Apache

705KB
5.5K SLoC

lava_torrent

crates.io Build Status codecov

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

NOTE: lava_torrent is now in maintenance mode. Bugs will still be fixed, but no new features will be released. If you need something, feel free to fork.

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

~2.2–3MB
~62K SLoC