#[cfg(feature = "data-uri")]
mod data_uri_net_provider {
use blitz_traits::net::{Bytes, NetHandler, NetProvider, NetWaker, Request};
use data_url::DataUrl;
use std::sync::Arc;
pub struct DataUriNetProvider {
#[allow(unused)]
waker: Option<Arc<dyn NetWaker>>,
}
impl DataUriNetProvider {
pub fn new(waker: Option<Arc<dyn NetWaker>>) -> Self {
Self { waker }
}
pub fn shared(waker: Option<Arc<dyn NetWaker>>) -> Arc<dyn NetProvider> {
Arc::new(Self::new(waker))
}
}
impl NetProvider for DataUriNetProvider {
fn fetch(&self, _doc_id: usize, request: Request, handler: Box<dyn NetHandler>) {
match request.url.scheme() {
"data" => {
let Ok(data_url) = DataUrl::process(request.url.as_str()) else {
return;
};
let Ok(decoded) = data_url.decode_to_vec() else {
return;
};
let bytes = Bytes::from(decoded.0);
handler.bytes(request.url.to_string(), bytes);
}
_ => {
}
};
}
}
}
#[cfg(feature = "data-uri")]
pub use data_uri_net_provider::DataUriNetProvider;