use std::sync::Arc;
use galileo_mvt::MvtTile;
use maybe_sync::{MaybeSend, MaybeSync};
use serde::{Deserialize, Serialize};
use crate::layer::vector_tile_layer::style::VectorTileStyle;
use crate::layer::vector_tile_layer::tile_provider::VtStyleId;
use crate::render::render_bundle::RenderBundle;
use crate::tile_schema::TileIndex;
#[derive(Debug, Copy, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum TileProcessingError {
InvalidStyle,
Rendering,
Internal,
}
#[cfg_attr(target_arch = "wasm32", async_trait::async_trait(?Send))]
#[cfg_attr(not(target_arch = "wasm32"), async_trait::async_trait)]
pub trait VectorTileProcessor: MaybeSend + MaybeSync {
fn has_style(&self, style_id: VtStyleId) -> bool;
fn get_style(&self, style_id: VtStyleId) -> Option<Arc<VectorTileStyle>>;
fn add_style(&self, style_id: VtStyleId, style: VectorTileStyle);
fn drop_style(&self, style_id: VtStyleId);
async fn process_tile(
&self,
tile: Arc<MvtTile>,
index: TileIndex,
style_id: VtStyleId,
) -> Result<RenderBundle, TileProcessingError>;
}