use crate::types::{Bounds, LatLng, Point};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MapClickEvent {
pub latlng: LatLng,
pub point: Point,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MapDblClickEvent {
pub latlng: LatLng,
pub point: Point,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MapContextMenuEvent {
pub latlng: LatLng,
pub point: Point,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MarkerClickEvent {
pub marker_id: String,
pub latlng: LatLng,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MarkerHoverEvent {
pub marker_id: String,
pub latlng: LatLng,
pub hover: bool,
pub cursor_x: f64,
pub cursor_y: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MarkerDragStartEvent {
pub marker_id: String,
pub latlng: LatLng,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MarkerDragEndEvent {
pub marker_id: String,
pub latlng: LatLng,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MapMoveEvent {
pub center: LatLng,
pub zoom: f64,
#[serde(default)]
pub bounds: Option<Bounds>,
#[serde(default)]
pub phase: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MapZoomEvent {
pub zoom: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MapRotateEvent {
pub bearing: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MapPitchEvent {
pub pitch: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct LayerClickEvent {
pub layer_id: String,
pub feature_id: Option<i64>,
pub properties: serde_json::Value,
pub latlng: LatLng,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct LayerHoverEvent {
pub layer_id: String,
pub feature_id: Option<i64>,
pub properties: Option<serde_json::Value>,
pub latlng: LatLng,
pub cursor_x: f64,
pub cursor_y: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MapReadyEvent;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MapErrorEvent {
#[serde(default)]
pub message: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "type")]
#[allow(dead_code)]
pub enum MapEvent {
#[serde(rename = "ready")]
Ready,
#[serde(rename = "error")]
Error(MapErrorEvent),
#[serde(rename = "click")]
Click(MapClickEvent),
#[serde(rename = "dblclick")]
DblClick(MapDblClickEvent),
#[serde(rename = "contextmenu")]
ContextMenu(MapContextMenuEvent),
#[serde(rename = "marker_click")]
MarkerClick(MarkerClickEvent),
#[serde(rename = "marker_hover")]
MarkerHover(MarkerHoverEvent),
#[serde(rename = "marker_dragstart")]
MarkerDragStart(MarkerDragStartEvent),
#[serde(rename = "marker_dragend")]
MarkerDragEnd(MarkerDragEndEvent),
#[serde(rename = "move")]
Move(MapMoveEvent),
#[serde(rename = "zoom")]
Zoom(MapZoomEvent),
#[serde(rename = "rotate")]
Rotate(MapRotateEvent),
#[serde(rename = "pitch")]
Pitch(MapPitchEvent),
#[serde(rename = "layer_click")]
LayerClick(LayerClickEvent),
#[serde(rename = "layer_hover")]
LayerHover(LayerHoverEvent),
}