summaryrefslogtreecommitdiffstats
path: root/rust/src/main.rs
blob: 64fa16cfdb7f23c92d1234f7ae5ff570284861cd (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
extern crate hex;
extern crate urlencoding;

use std::collections::HashMap;
use std::net::IpAddr;
use chrono::{DateTime, Utc};
use sha2::{Sha256, Digest};
use sha1::{Sha1};
enum Version {
	V1,
	V2,
	Hybrid
}
struct Torrent {
	name: String,
	sha1: [u8; 20],
	sha256: [u8; 32],
	version: Version,
	files: HashMap<String, u64>,
	source: IpAddr,
	date: DateTime<Utc>,
	hostname: String,
	software: String
}
impl Torrent {
	fn magnet(&self) -> String {
		let mut string = String::from("magnet:?dn=");
		string.push_str(&urlencoding::encode(&self.name));
		if matches!(self.version, Version::V1) || matches!(self.version, Version::Hybrid) {
			string.push_str("&xt=urn:btih:");
			string.push_str(&hex::encode(&self.sha1));
		}
		if matches!(self.version, Version::V2) || matches!(self.version, Version::Hybrid) {
			string.push_str("&xt=urn:btmh:1220");
			string.push_str(&hex::encode(&self.sha256));
		}
		string
	}
}
fn main() {
	let hash2 = Sha256::new().chain_update(b"test").finalize();
	let hash1 = Sha1::new().chain_update(b"test").finalize();
	println!("Hello, world! {:#?} {:#?}", hash2, hash1);
}