#![allow(clippy::new_ret_no_self)]
#![deny(rust_2018_idioms)]
#[macro_use]
extern crate log;
#[macro_use]
extern crate serde_derive;
use crate::utils::error::RsgetError;
use crate::utils::error::StreamError;
use std::boxed::Box;
use std::io::Write;
use stream_lib::Stream;
use stream_lib::StreamType;
use reqwest::Client as ReqwestClient;
pub trait Streamable {
fn new(url: String) -> Result<Box<Self>, StreamError>
where
Self: Sized + Sync;
fn get_title(&self) -> Option<String>;
fn get_author(&self) -> Option<String>;
fn is_online(&self) -> bool;
fn get_stream(&self) -> Result<StreamType, StreamError>;
fn get_ext(&self) -> String;
fn get_default_name(&self) -> String;
fn get_reqwest_client(&self) -> &ReqwestClient {
Box::leak(Box::new(ReqwestClient::new()))
}
fn download(&self, writer: Box<dyn Write>) -> Result<u64, StreamError> {
if !self.is_online() {
Err(StreamError::Rsget(RsgetError::Offline))
} else {
let stream = Stream::new(self.get_stream()?);
Ok(stream.write_file(self.get_reqwest_client(), writer)?)
}
}
}
pub mod plugins;
pub mod utils;