1use std::time::Duration;
2
3#[cfg(any(feature = "parse-names", feature = "require-parse-names"))]
4pub use torrent_name_parser::Metadata;
6
7#[cfg(feature = "require-parse-names")]
8pub use torrent_name_parser::error::ErrorMatch as ParseError;
10
11#[derive(Clone, Debug, Default, PartialEq)]
12pub struct Torrent {
14 pub name: String,
15 #[cfg(all(feature = "parse-names", not(feature = "require-parse-names")))]
16 pub metadata: Option<Metadata>,
17 #[cfg(feature = "require-parse-names")]
18 pub metadata: Metadata,
19 pub size: u64,
20 pub categories: Vec<u32>,
21 pub link: String,
22 pub seeders: Option<u16>,
23 pub leechers: Option<u16>,
24 pub minimum_ratio: Option<f32>,
25 pub minimum_seedtime: Option<Duration>
26}
27
28#[allow(clippy::too_many_arguments)]
29impl Torrent {
30 #[cfg(feature = "require-parse-names")]
31 #[inline]
32 pub fn new(name: String, size: u64, categories: Vec<u32>, link: String, seeders: Option<u16>, leechers: Option<u16>, minimum_ratio: Option<f32>, minimum_seedtime: Option<Duration>) -> Result<Self, torrent_name_parser::error::ErrorMatch> {
33 Ok(Self{
34 metadata: Metadata::from(&name)?,
35 name,
36 size,
37 categories,
38 link,
39 seeders,
40 leechers,
41 minimum_ratio,
42 minimum_seedtime
43 })
44 }
45
46 #[cfg(not(feature = "require-parse-names"))]
47 #[inline]
48 pub fn new(name: String, size: u64, categories: Vec<u32>, link: String, seeders: Option<u16>, leechers: Option<u16>, minimum_ratio: Option<f32>, minimum_seedtime: Option<Duration>) -> Self {
50 Self{
51 #[cfg(feature = "parse-names")]
52 metadata: Metadata::from(&name).ok(),
53 name,
54 size,
55 categories,
56 link,
57 seeders,
58 leechers,
59 minimum_ratio,
60 minimum_seedtime
61 }
62 }
63}
64