use crate::Pending;
use std::ops::Range;
use std::sync::Arc;
pub trait Fetch: Send + Sync {
fn fetch(&self, request: &Request) -> Pending<Vec<u8>>;
}
#[cfg(feature = "gpu")]
impl<T: crate::host::Host + ?Sized> Fetch for T {
fn fetch(&self, request: &Request) -> Pending<Vec<u8>> {
crate::host::Host::fetch(self, request)
}
}
#[derive(Clone, PartialEq, Eq, Hash, Debug)]
pub struct Request {
pub url: Arc<str>,
pub range: Option<Range<u64>>,
}
impl Request {
pub fn new(url: impl Into<Arc<str>>) -> Request {
Request { url: url.into(), range: None }
}
pub fn range(url: impl Into<Arc<str>>, range: Range<u64>) -> Request {
Request { url: url.into(), range: Some(range) }
}
}