bip_metainfo/
lib.rs

1//! Library for parsing and building metainfo files.
2//!
3//! # Examples
4//!
5//! Building and parsing a metainfo file from a directory:
6//!
7//! ```rust
8//!     extern crate bip_metainfo;
9//!
10//!     use bip_metainfo::{MetainfoBuilder, Metainfo};
11//!
12//!     fn main() {
13//!         let builder = MetainfoBuilder::new()
14//!             .set_created_by(Some("bip_metainfo example"))
15//!             .set_comment(Some("Metainfo File From A File"));
16//!
17//!         // Build the file from the crate's src folder
18//!         let bytes = builder.build(1, "src", |progress| {
19//!             // Progress Is A Value Between 0.0 And 1.0
20//!             assert!(progress <= 1.0f64);
21//!         }).unwrap();
22//!         let file = Metainfo::from_bytes(&bytes).unwrap();
23//!
24//!         assert_eq!(file.info().directory(), Some("src".as_ref()));
25//!     }
26//! ```
27//!
28//! Building and parsing a metainfo file from direct data:
29//!
30//! ```rust
31//!     extern crate bip_metainfo;
32//!
33//!     use bip_metainfo::{MetainfoBuilder, Metainfo, DirectAccessor};
34//!
35//!     fn main() {
36//!         let builder = MetainfoBuilder::new()
37//!             .set_created_by(Some("bip_metainfo example"))
38//!             .set_comment(Some("Metainfo File From A File"));
39//!
40//!         let file_name = "FileName.txt";
41//!         let file_data = b"This is our file data, it is already in memory!!!";
42//!         let accessor = DirectAccessor::new(file_name, file_data);
43//!
44//!         // Build the file from some data that is already in memory
45//!         let bytes = builder.build(1, accessor, |progress| {
46//!             // Progress Is A Value Between 0.0 And 1.0
47//!             assert!(progress <= 1.0f64);
48//!         }).unwrap();
49//!         let file = Metainfo::from_bytes(&bytes).unwrap();
50//!
51//!         assert_eq!(file.info().directory(), None);
52//!         assert_eq!(file.info().files().count(), 1);
53//!
54//!         let single_file = file.info().files().next().unwrap();
55//!         assert_eq!(single_file.length() as usize, file_data.len());
56//!         assert_eq!(single_file.path().iter().count(), 1);
57//!         assert_eq!(single_file.path().to_str().unwrap(), file_name);
58//!     }
59//! ```
60
61#[macro_use]
62extern crate bip_bencode;
63extern crate bip_util;
64extern crate crossbeam;
65extern crate walkdir;
66#[macro_use]
67extern crate error_chain;
68
69#[cfg(test)]
70extern crate rand;
71
72mod accessor;
73mod builder;
74pub mod error;
75mod metainfo;
76mod parse;
77
78pub mod iter;
79
80pub use bip_util::bt::InfoHash;
81
82pub use accessor::{Accessor, IntoAccessor, DirectAccessor, FileAccessor, PieceAccess};
83pub use builder::{MetainfoBuilder, PieceLength, InfoBuilder};
84pub use metainfo::{Info, Metainfo, File};