http_range_client/lib.rs
1//! HTTP client for HTTP Range requests with a buffer optimized for sequential reading.
2
3//! ## Usage example
4//!
5//! ```
6//! use http_range_client::*;
7//!
8//! // Async API
9//! # #[cfg(feature = "reqwest-async")]
10//! # async fn get_async() -> Result<()> {
11//! let mut client = BufferedHttpRangeClient::new("https://flatgeobuf.org/test/data/countries.fgb");
12//! let bytes = client.min_req_size(256).get_range(0, 3).await?;
13//! assert_eq!(bytes, b"fgb");
14//! let version = client.get_bytes(1).await?; // From buffer - no HTTP request!
15//! assert_eq!(version, [3]);
16//! # Ok(())
17//! # }
18//!
19//! // Blocking API
20//! # #[cfg(feature = "reqwest-sync")]
21//! # fn get_sync() -> Result<()> {
22//! let mut client = HttpReader::new("https://flatgeobuf.org/test/data/countries.fgb");
23//! let bytes = client.min_req_size(256).get_range(0, 3)?;
24//! assert_eq!(bytes, b"fgb");
25//! let version = client.get_bytes(1)?; // From buffer - no HTTP request!
26//! assert_eq!(version, [3]);
27//! # Ok(())
28//! # }
29//!
30//! // Seek+Read API
31//! # #[cfg(feature = "reqwest-sync")]
32//! # fn read() -> std::io::Result<()> {
33//! use std::io::{Read, Seek, SeekFrom};
34//! let mut reader = HttpReader::new("https://www.rust-lang.org/static/images/favicon-32x32.png");
35//! reader.seek(SeekFrom::Start(1)).ok();
36//! let mut bytes = [0; 3];
37//! reader.read_exact(&mut bytes)?;
38//! assert_eq!(&bytes, b"PNG");
39//! # Ok(())
40//! # }
41//! ```
42
43mod buffered_range_client;
44mod error;
45mod range_client;
46#[cfg(any(feature = "reqwest-async", feature = "reqwest-sync"))]
47mod reqwest_client;
48#[cfg(feature = "ureq-sync")]
49mod ureq_client;
50
51pub use buffered_range_client::nonblocking::AsyncBufferedHttpRangeClient;
52pub use buffered_range_client::sync::SyncBufferedHttpRangeClient;
53pub use error::*;
54pub use range_client::*;
55
56#[cfg(feature = "reqwest-async")]
57pub use crate::reqwest_client::nonblocking::BufferedHttpRangeClient;
58#[cfg(feature = "reqwest-sync")]
59pub use crate::reqwest_client::sync::HttpReader;
60#[cfg(feature = "ureq-sync")]
61pub use crate::ureq_client::sync::UreqHttpReader;