torrent_common/
lib.rs

1use std::time::Duration;
2
3#[cfg(any(feature = "parse-names", feature = "require-parse-names"))]
4/// Re-exported from [`torrent-name-parser`](torrent_name_parser::Metadata)
5pub use torrent_name_parser::Metadata;
6
7#[cfg(feature = "require-parse-names")]
8/// Re-exported from [`torrent-name-parser`](torrent_name_parser::error::ErrorMatch)
9pub use torrent_name_parser::error::ErrorMatch as ParseError;
10
11#[derive(Clone, Debug, Default, PartialEq)]
12/// Represents a torrent in a tracker somewhere.
13pub 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	/// Constructs a new `Torrent` from values.  If the `parse-names` or `require-parse-names` feature is enabled, will include metadata; if the `require-parse-names` feature is enabled, parsing is non-optional, and the function will return an error.
49	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