bbox_tile_server/datasource/
mbtiles.rs1use crate::config::TileSetCfg;
4use crate::datasource::{
5 wms_fcgi::HttpRequestParams, LayerInfo, SourceType, TileResponse, TileSource, TileSourceError,
6};
7use crate::filter_params::FilterParams;
8use crate::store::mbtiles::MbtilesStore;
9use crate::store::TileReader;
10use async_trait::async_trait;
11use bbox_core::Format;
12use martin_mbtiles::Metadata;
13use tile_grid::{Tms, Xyz};
14use tilejson::TileJSON;
15
16#[async_trait]
17impl TileSource for MbtilesStore {
18 async fn xyz_request(
19 &self,
20 _tms: &Tms,
21 tile: &Xyz,
22 _filter: &FilterParams,
23 _format: &Format,
24 _request_params: HttpRequestParams<'_>,
25 ) -> Result<TileResponse, TileSourceError> {
26 if let Some(tile) = self
27 .get_tile(tile)
28 .await
29 .map_err(|_| TileSourceError::TileXyzError)?
30 {
31 Ok(tile)
32 } else {
33 Err(TileSourceError::TileXyzError) }
35 }
36 fn source_type(&self) -> SourceType {
37 SourceType::Vector }
39 async fn tilejson(&self, _tms: &Tms, _format: &Format) -> Result<TileJSON, TileSourceError> {
40 let metadata = self.mbt.get_metadata().await?;
41 Ok(metadata.tilejson)
42 }
43 async fn layers(&self) -> Result<Vec<LayerInfo>, TileSourceError> {
44 let metadata = self.mbt.get_metadata().await?;
45 let layers = metadata
46 .tilejson
47 .vector_layers
48 .unwrap_or(Vec::new())
49 .iter()
50 .map(|l| LayerInfo {
51 name: l.id.clone(),
52 geometry_type: None,
53 style: None,
54 })
55 .collect();
56 Ok(layers)
57 }
58 async fn mbtiles_metadata(
59 &self,
60 _tileset: &TileSetCfg,
61 _format: &Format,
62 ) -> Result<Metadata, TileSourceError> {
63 Ok(self.mbt.get_metadata().await?)
64 }
65}