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 56 57
//! HTTP client for HTTP Range requests with a buffer optimized for sequential requests.
//! ## Usage example
//!
//! ```
//! use http_range_client::*;
//!
//! // Async API
//! # #[cfg(feature = "reqwest-async")]
//! # async fn get_async() -> Result<()> {
//! let mut client = BufferedHttpRangeClient::new("https://flatgeobuf.org/test/data/countries.fgb");
//! let bytes = client.min_req_size(256).get_range(0, 3).await?;
//! assert_eq!(bytes, b"fgb");
//! let version = client.get_bytes(1).await?; // From buffer - no HTTP request!
//! assert_eq!(version, [3]);
//! # Ok(())
//! # }
//!
//! // Blocking API
//! # #[cfg(feature = "reqwest-sync")]
//! # fn get_sync() -> Result<()> {
//! let mut client = HttpReader::new("https://flatgeobuf.org/test/data/countries.fgb");
//! let bytes = client.min_req_size(256).get_range(0, 3)?;
//! assert_eq!(bytes, b"fgb");
//! let version = client.get_bytes(1)?; // From buffer - no HTTP request!
//! assert_eq!(version, [3]);
//! # Ok(())
//! # }
//!
//! // Seek+Read API
//! # #[cfg(feature = "reqwest-sync")]
//! # fn read() -> std::io::Result<()> {
//! use std::io::{Read, Seek, SeekFrom};
//! let mut client = HttpReader::new("https://www.rust-lang.org/static/images/favicon-32x32.png");
//! client.seek(SeekFrom::Start(1)).ok();
//! let mut bytes = [0; 3];
//! client.read_exact(&mut bytes)?;
//! assert_eq!(&bytes, b"PNG");
//! # Ok(())
//! # }
//! ```
mod buffered_range_client;
mod error;
mod range_client;
#[cfg(any(feature = "reqwest-async", feature = "reqwest-sync"))]
mod reqwest_client;
pub use buffered_range_client::nonblocking::AsyncBufferedHttpRangeClient;
pub use buffered_range_client::sync::SyncBufferedHttpRangeClient;
pub use error::*;
pub use range_client::*;
#[cfg(feature = "reqwest-async")]
pub use crate::reqwest_client::nonblocking::BufferedHttpRangeClient;
#[cfg(feature = "reqwest-sync")]
pub use crate::reqwest_client::sync::HttpReader;