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 45 46 47 48 49 50 51 52 53 54 55
#![feature(backtrace)] #![feature(result_flattening)] #![allow(unused_parens)] use async_compression::futures::bufread::GzipDecoder; use futures::io::AsyncBufReadExt; use futures::io::AsyncRead; use futures::io::BufReader; use futures::stream::Stream; use futures::stream::TryStreamExt; use reqwest::Client; mod error; pub use error::Error; mod episode; pub(crate) use episode::EpisodeLink; pub(crate) use episode::get_episodes_filtered; pub(crate) use episode::get_episodes_filtered_by_show; pub(crate) use episode::stream_episodes; mod movie; pub use movie::Movie; pub use movie::get_movies_filtered; pub use movie::stream_movies; pub use movie::stream_movies_filtered; mod show; pub use show::Episode; pub use show::Show; pub use show::get_shows_filtered; mod title; pub use title::Title; pub use title::TitleType; pub use title::get_titles_filtered; pub use title::get_titles_filtered_split; pub use title::stream_titles; pub use title::stream_titles_filtered; pub(crate) mod util; pub(crate) const TITLES_URL: &'static str = "https://datasets.imdbws.com/title.basics.tsv.gz"; pub(crate) const EPISODES_URL: &'static str = "https://datasets.imdbws.com/title.episode.tsv.gz"; pub async fn start_stream(url: &str) -> Result<impl AsyncRead, Error> { let raw_stream = Client::new().get(url).send().await?.bytes_stream(); let decompressed_stream = GzipDecoder::new(raw_stream.map_err(|e| std::io::Error::new(std::io::ErrorKind::Other, e)).into_async_read()); Ok(BufReader::new(decompressed_stream).lines().into_async_read()) } pub async fn start_stream_lines(url: &str) -> Result<impl Stream<Item = Result<String, std::io::Error>>, Error> { let raw_stream = Client::new().get(url).send().await?.bytes_stream(); let decompressed_stream = GzipDecoder::new(raw_stream.map_err(|e| std::io::Error::new(std::io::ErrorKind::Other, e)).into_async_read()); Ok(BufReader::new(decompressed_stream).lines()) }