pub struct Torrent {
    pub announce: Option<String>,
    pub announce_list: Option<AnnounceList>,
    pub length: Integer,
    pub files: Option<Vec<File>>,
    pub name: String,
    pub piece_length: Integer,
    pub pieces: Vec<Piece>,
    pub extra_fields: Option<Dictionary>,
    pub extra_info_fields: Option<Dictionary>,
}
Expand description

Everything found in a .torrent file.

Modeled after the specifications in BEP 3 and BEP 12. Unknown/extension fields will be placed in extra_fields (if the unknown fields are found in the info dictionary then they are placed in extra_info_fields). If you need any of those extra fields you would have to parse it yourself.

Fields§

§announce: Option<String>

URL of the torrent’s tracker.

§announce_list: Option<AnnounceList>

Announce list as defined in BEP 12.

§length: Integer

Total torrent size in bytes (i.e. sum of all files’ sizes).

§files: Option<Vec<File>>

If the torrent contains only 1 file then files is None.

§name: String

If the torrent contains only 1 file then name is the file name. Otherwise it’s the suggested root directory’s name.

§piece_length: Integer

Block size in bytes.

§pieces: Vec<Piece>

SHA1 hashes of each block.

§extra_fields: Option<Dictionary>

Top-level fields not defined in BEP 3.

§extra_info_fields: Option<Dictionary>

Fields in info not defined in BEP 3.

Implementations§

source§

impl Torrent

source

pub fn read_from_bytes<B>(bytes: B) -> Result<Torrent, LavaTorrentError>where B: AsRef<[u8]>,

Parse bytes and return the extracted Torrent.

If bytes is missing any required field (e.g. info), or if any other error is encountered (e.g. IOError), then Err(error) will be returned.

source

pub fn read_from_file<P>(path: P) -> Result<Torrent, LavaTorrentError>where P: AsRef<Path>,

Parse the content of the file at path and return the extracted Torrent.

If the file at path is missing any required field (e.g. info), or if any other error is encountered (e.g. IOError), then Err(error) will be returned.

source§

impl Torrent

source

pub fn write_into<W>(self, dst: &mut W) -> Result<(), LavaTorrentError>where W: Write,

Encode self as bencode and write the result to dst.

source

pub fn write_into_file<P>(self, path: P) -> Result<(), LavaTorrentError>where P: AsRef<Path>,

Encode self as bencode and write the result to path.

path must be the path to a file.

“This function will create a file if it does not exist, and will truncate it if it does.”

Note: it is the client’s responsibility to ensure that all directories in path actually exist (e.g. by calling create_dir_all).

source

pub fn encode(self) -> Result<Vec<u8>, LavaTorrentError>

Encode self as bencode and return the result in a Vec.

source§

impl Torrent

source

pub fn construct_info(&self) -> BencodeElem

Construct the info dict based on the fields of self.

Certain operations on torrents, such as calculating info hashes, require the extracted info dict. This convenience method does that.

Note that the info dict is constructed each time this method is called (i.e. the return value is not cached). If caching is needed then the caller should handle that.

Since self is taken by reference, and the result is returned by value, certain values will be cloned. Please be aware of this overhead.

source

pub fn info_hash(&self) -> String

Calculate the Torrent’s info hash as defined in BEP 3.

Note that the calculated info hash is not cached. So if this method is called multiple times, multiple calculations will be performed. To avoid that, the caller should cache the return value as needed.

source

pub fn info_hash_bytes(&self) -> Vec<u8>

Calculate the Torrent’s info hash as defined in BEP 3.

Note that the calculated info hash is not cached. So if this method is called multiple times, multiple calculations will be performed. To avoid that, the caller should cache the return value as needed.

Calculate the Torrent’s magnet link as defined in BEP 9.

The dn parameter is set to self.name.

Either self.announce or all trackers in self.announce_list will be used, meaning that there might be multiple tr entries. We don’t use both because per BEP 12: “If the client is compatible with the multitracker specification, and if the announce-list key is present, the client will ignore the announce key and only use the URLs in announce-list.”

If neither self.announce nor self.announce_list is present, the output won’t contain any tr parameter.

The x.pe parameter (for peer addresses) is currently not supported.

self.extra_fields["url-list"] will be used to construct ws parameters. It must be either a string or a list of strings.

source

pub fn is_private(&self) -> bool

Check if this torrent is private as defined in BEP 27.

Returns true if private maps to a bencode integer 1. Returns false otherwise.

Trait Implementations§

source§

impl Clone for Torrent

source§

fn clone(&self) -> Torrent

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Torrent

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Display for Torrent

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<Torrent> for Torrent

source§

fn eq(&self, other: &Torrent) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl Eq for Torrent

source§

impl StructuralEq for Torrent

source§

impl StructuralPartialEq for Torrent

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<Src, Scheme> ApproxFrom<Src, Scheme> for Srcwhere Scheme: ApproxScheme,

§

type Err = NoError

The error type produced by a failed conversion.
source§

fn approx_from(src: Src) -> Result<Src, <Src as ApproxFrom<Src, Scheme>>::Err>

Convert the given value into an approximately equivalent representation.
source§

impl<Dst, Src, Scheme> ApproxInto<Dst, Scheme> for Srcwhere Dst: ApproxFrom<Src, Scheme>, Scheme: ApproxScheme,

§

type Err = <Dst as ApproxFrom<Src, Scheme>>::Err

The error type produced by a failed conversion.
source§

fn approx_into(self) -> Result<Dst, <Src as ApproxInto<Dst, Scheme>>::Err>

Convert the subject into an approximately equivalent representation.
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T, Dst> ConvAsUtil<Dst> for T

source§

fn approx(self) -> Result<Dst, Self::Err>where Self: Sized + ApproxInto<Dst, DefaultApprox>,

Approximate the subject with the default scheme.
source§

fn approx_by<Scheme>(self) -> Result<Dst, Self::Err>where Self: Sized + ApproxInto<Dst, Scheme>, Scheme: ApproxScheme,

Approximate the subject with a specific scheme.
source§

impl<T> ConvUtil for T

source§

fn approx_as<Dst>(self) -> Result<Dst, Self::Err>where Self: Sized + ApproxInto<Dst, DefaultApprox>,

Approximate the subject to a given type with the default scheme.
source§

fn approx_as_by<Dst, Scheme>(self) -> Result<Dst, Self::Err>where Self: Sized + ApproxInto<Dst, Scheme>, Scheme: ApproxScheme,

Approximate the subject to a given type with a specific scheme.
source§

fn into_as<Dst>(self) -> Dstwhere Self: Sized + Into<Dst>,

Convert the subject to a given type.
source§

fn try_as<Dst>(self) -> Result<Dst, Self::Err>where Self: Sized + TryInto<Dst>,

Attempt to convert the subject to a given type.
source§

fn value_as<Dst>(self) -> Result<Dst, Self::Err>where Self: Sized + ValueInto<Dst>,

Attempt a value conversion of the subject to a given type.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
source§

impl<T> ToOwned for Twhere T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T> ToString for Twhere T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<Src> TryFrom<Src> for Src

§

type Err = NoError

The error type produced by a failed conversion.
source§

fn try_from(src: Src) -> Result<Src, <Src as TryFrom<Src>>::Err>

Convert the given value into the subject type.
source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<Src, Dst> TryInto<Dst> for Srcwhere Dst: TryFrom<Src>,

§

type Err = <Dst as TryFrom<Src>>::Err

The error type produced by a failed conversion.
source§

fn try_into(self) -> Result<Dst, <Src as TryInto<Dst>>::Err>

Convert the subject into the destination type.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<Src> ValueFrom<Src> for Src

§

type Err = NoError

The error type produced by a failed conversion.
source§

fn value_from(src: Src) -> Result<Src, <Src as ValueFrom<Src>>::Err>

Convert the given value into an exactly equivalent representation.
source§

impl<Src, Dst> ValueInto<Dst> for Srcwhere Dst: ValueFrom<Src>,

§

type Err = <Dst as ValueFrom<Src>>::Err

The error type produced by a failed conversion.
source§

fn value_into(self) -> Result<Dst, <Src as ValueInto<Dst>>::Err>

Convert the subject into an exactly equivalent representation.