mirror of
https://github.com/maplibre/maplibre-rs.git
synced 2025-12-08 19:05:57 +00:00
Add HttpFetcherConfig
This commit is contained in:
parent
956bca24b8
commit
1165869432
@ -32,7 +32,6 @@ console_error_panic_hook = "0.1"
|
||||
winit = { version = "0.26", default-features = false }
|
||||
web-sys = { version = "0.3", features = [
|
||||
"Window",
|
||||
"Worker", "WorkerOptions", "WorkerType", "MessageEvent",
|
||||
"Headers",
|
||||
"WorkerGlobalScope", "Request", "RequestInit", "RequestMode", "Response",
|
||||
] }
|
||||
|
||||
@ -8,10 +8,15 @@ pub mod static_tile_fetcher;
|
||||
pub mod web_tile_fetcher;
|
||||
pub mod worker_loop;
|
||||
|
||||
pub struct HttpFetcherConfig {
|
||||
/// Under which path should we cache requests.
|
||||
pub cache_path: String,
|
||||
}
|
||||
|
||||
#[cfg_attr(target_arch = "wasm32", async_trait(?Send))]
|
||||
#[cfg_attr(not(target_arch = "wasm32"), async_trait)]
|
||||
pub trait HttpFetcher {
|
||||
fn new() -> Self;
|
||||
fn new(config: HttpFetcherConfig) -> Self;
|
||||
|
||||
async fn fetch(&self, url: &str) -> Result<Vec<u8>, Error>;
|
||||
}
|
||||
@ -19,7 +24,7 @@ pub trait HttpFetcher {
|
||||
#[cfg_attr(target_arch = "wasm32", async_trait(?Send))]
|
||||
#[cfg_attr(not(target_arch = "wasm32"), async_trait)]
|
||||
pub trait TileFetcher {
|
||||
fn new() -> Self;
|
||||
fn new(config: HttpFetcherConfig) -> Self;
|
||||
|
||||
async fn fetch_tile(&self, coords: &TileCoords) -> Result<Vec<u8>, Error>;
|
||||
fn sync_fetch_tile(&self, coords: &TileCoords) -> Result<Vec<u8>, Error>;
|
||||
|
||||
@ -7,6 +7,7 @@ use log::error;
|
||||
|
||||
use crate::coords::TileCoords;
|
||||
use crate::error::Error;
|
||||
use crate::io::HttpFetcherConfig;
|
||||
|
||||
use super::TileFetcher;
|
||||
|
||||
@ -23,7 +24,7 @@ impl StaticTileFetcher {
|
||||
#[cfg_attr(target_arch = "wasm32", async_trait(?Send))]
|
||||
#[cfg_attr(not(target_arch = "wasm32"), async_trait)]
|
||||
impl TileFetcher for StaticTileFetcher {
|
||||
fn new() -> Self {
|
||||
fn new(_config: HttpFetcherConfig) -> Self {
|
||||
Self {}
|
||||
}
|
||||
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
use crate::coords::TileCoords;
|
||||
use crate::error::Error;
|
||||
use crate::io::{HttpFetcher, TileFetcher};
|
||||
use crate::io::{HttpFetcher, HttpFetcherConfig, TileFetcher};
|
||||
use crate::platform::PlatformHttpFetcher;
|
||||
use async_trait::async_trait;
|
||||
|
||||
@ -11,9 +11,9 @@ pub struct WebTileFetcher {
|
||||
#[cfg_attr(target_arch = "wasm32", async_trait(?Send))]
|
||||
#[cfg_attr(not(target_arch = "wasm32"), async_trait)]
|
||||
impl TileFetcher for WebTileFetcher {
|
||||
fn new() -> Self {
|
||||
fn new(config: HttpFetcherConfig) -> Self {
|
||||
Self {
|
||||
http_fetcher: PlatformHttpFetcher::new(),
|
||||
http_fetcher: PlatformHttpFetcher::new(config),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -8,7 +8,7 @@ use crate::coords::TileCoords;
|
||||
use vector_tile::parse_tile_bytes;
|
||||
|
||||
use crate::io::web_tile_fetcher::WebTileFetcher;
|
||||
use crate::io::TileFetcher;
|
||||
use crate::io::{HttpFetcherConfig, TileFetcher};
|
||||
use crate::render::ShaderVertex;
|
||||
use crate::tesselation::{IndexDataType, OverAlignedVertexBuffer, Tesselated};
|
||||
|
||||
@ -49,7 +49,9 @@ impl WorkerLoop {
|
||||
}
|
||||
|
||||
pub async fn run_loop(&mut self) {
|
||||
let fetcher = WebTileFetcher::new();
|
||||
let fetcher = WebTileFetcher::new(HttpFetcherConfig {
|
||||
cache_path: "/tmp/mapr-cache".to_string(),
|
||||
});
|
||||
// let fetcher = StaticTileFetcher::new();
|
||||
|
||||
let mut current_id = 0;
|
||||
|
||||
@ -7,7 +7,7 @@ use reqwest_middleware_cache::managers::CACacheManager;
|
||||
use reqwest_middleware_cache::{Cache, CacheMode};
|
||||
|
||||
use crate::error::Error;
|
||||
use crate::io::HttpFetcher;
|
||||
use crate::io::{HttpFetcher, HttpFetcherConfig};
|
||||
|
||||
impl From<reqwest::Error> for Error {
|
||||
fn from(err: reqwest::Error) -> Self {
|
||||
@ -28,14 +28,16 @@ pub struct PlatformHttpFetcher {
|
||||
#[cfg_attr(target_arch = "wasm32", async_trait(?Send))]
|
||||
#[cfg_attr(not(target_arch = "wasm32"), async_trait)]
|
||||
impl HttpFetcher for PlatformHttpFetcher {
|
||||
fn new() -> Self {
|
||||
fn new(config: HttpFetcherConfig) -> Self {
|
||||
let mut builder = ClientBuilder::new(Client::new());
|
||||
|
||||
// FIXME: Cache only works on desktop so far
|
||||
if cfg!(not(any(target_os = "android", target_arch = "aarch64"))) {
|
||||
builder = builder.with(Cache {
|
||||
mode: CacheMode::Default,
|
||||
cache_manager: CACacheManager::default(),
|
||||
cache_manager: CACacheManager {
|
||||
path: config.cache_path,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
use crate::error::Error;
|
||||
use crate::io::HttpFetcher;
|
||||
use crate::io::{HttpFetcher, HttpFetcherConfig};
|
||||
use async_trait::async_trait;
|
||||
use js_sys::ArrayBuffer;
|
||||
use js_sys::Uint8Array;
|
||||
@ -19,7 +19,7 @@ pub struct PlatformHttpFetcher;
|
||||
#[cfg_attr(target_arch = "wasm32", async_trait(?Send))]
|
||||
#[cfg_attr(not(target_arch = "wasm32"), async_trait)]
|
||||
impl HttpFetcher for PlatformHttpFetcher {
|
||||
fn new() -> Self {
|
||||
fn new(_config: HttpFetcherConfig) -> Self {
|
||||
Self {}
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user