mirror of
https://github.com/arnaucube/torrent-rs.git
synced 2026-02-07 03:36:41 +01:00
Add torrent structs
This commit is contained in:
82
src/lib.rs
Normal file
82
src/lib.rs
Normal file
@@ -0,0 +1,82 @@
|
||||
extern crate serde;
|
||||
extern crate serde_bencode;
|
||||
#[macro_use]
|
||||
extern crate serde_derive;
|
||||
extern crate serde_bytes;
|
||||
|
||||
use serde_bencode::{de, ser};
|
||||
use serde_bytes::ByteBuf;
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
struct Node(String, i64);
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
struct File {
|
||||
path: Vec<String>,
|
||||
length: i64,
|
||||
#[serde(default)]
|
||||
md5sum: Option<String>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
struct Info {
|
||||
name: String,
|
||||
pieces: ByteBuf,
|
||||
#[serde(rename = "piece length")]
|
||||
piece_length: i64,
|
||||
#[serde(default)]
|
||||
md5sum: Option<String>,
|
||||
#[serde(default)]
|
||||
length: Option<i64>,
|
||||
#[serde(default)]
|
||||
files: Option<Vec<File>>,
|
||||
#[serde(default)]
|
||||
private: Option<u8>,
|
||||
#[serde(default)]
|
||||
path: Option<Vec<String>>,
|
||||
#[serde(default)]
|
||||
#[serde(rename = "root hash")]
|
||||
root_hash: Option<String>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
struct Torrent {
|
||||
info: Info,
|
||||
#[serde(default)]
|
||||
announce: Option<String>,
|
||||
#[serde(default)]
|
||||
nodes: Option<Vec<Node>>,
|
||||
#[serde(default)]
|
||||
encoding: Option<String>,
|
||||
#[serde(default)]
|
||||
httpseeds: Option<Vec<String>>,
|
||||
#[serde(default)]
|
||||
#[serde(rename = "announce-list")]
|
||||
announce_list: Option<Vec<Vec<String>>>,
|
||||
#[serde(default)]
|
||||
#[serde(rename = "creation date")]
|
||||
creation_date: Option<i64>,
|
||||
#[serde(rename = "comment")]
|
||||
comment: Option<String>,
|
||||
#[serde(default)]
|
||||
#[serde(rename = "created by")]
|
||||
created_by: Option<String>,
|
||||
}
|
||||
|
||||
impl Torrent {
|
||||
pub fn open(path: &str) -> Torrent {
|
||||
let b = std::fs::read(path).unwrap();
|
||||
de::from_bytes::<Torrent>(&b).unwrap()
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_read() {
|
||||
let t = Torrent::open("test.torrent");
|
||||
println!("{:?}", t);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user