1use crate::types::{Bounds, LatLng, Point};
4use serde::{Deserialize, Serialize};
5
6#[derive(Debug, Clone, Serialize, Deserialize)]
8pub struct MapClickEvent {
9 pub latlng: LatLng,
11 pub point: Point,
13}
14
15#[derive(Debug, Clone, Serialize, Deserialize)]
17pub struct MapDblClickEvent {
18 pub latlng: LatLng,
20 pub point: Point,
22}
23
24#[derive(Debug, Clone, Serialize, Deserialize)]
26pub struct MapContextMenuEvent {
27 pub latlng: LatLng,
29 pub point: Point,
31}
32
33#[derive(Debug, Clone, Serialize, Deserialize)]
35pub struct MarkerClickEvent {
36 pub marker_id: String,
38 pub latlng: LatLng,
40}
41
42#[derive(Debug, Clone, Serialize, Deserialize)]
44pub struct MarkerHoverEvent {
45 pub marker_id: String,
47 pub latlng: LatLng,
49 pub hover: bool,
51 pub cursor_x: f64,
53 pub cursor_y: f64,
55}
56
57#[derive(Debug, Clone, Serialize, Deserialize)]
59pub struct MarkerDragStartEvent {
60 pub marker_id: String,
62 pub latlng: LatLng,
64}
65
66#[derive(Debug, Clone, Serialize, Deserialize)]
68pub struct MarkerDragEndEvent {
69 pub marker_id: String,
71 pub latlng: LatLng,
73}
74
75#[derive(Debug, Clone, Serialize, Deserialize)]
77pub struct MapMoveEvent {
78 pub center: LatLng,
80 pub zoom: f64,
82 #[serde(default)]
84 pub bounds: Option<Bounds>,
85 #[serde(default)]
87 pub phase: Option<String>,
88}
89
90#[derive(Debug, Clone, Serialize, Deserialize)]
92pub struct MapZoomEvent {
93 pub zoom: f64,
95}
96
97#[derive(Debug, Clone, Serialize, Deserialize)]
99pub struct MapRotateEvent {
100 pub bearing: f64,
102}
103
104#[derive(Debug, Clone, Serialize, Deserialize)]
106pub struct MapPitchEvent {
107 pub pitch: f64,
109}
110
111#[derive(Debug, Clone, Serialize, Deserialize)]
113pub struct LayerClickEvent {
114 pub layer_id: String,
116 pub feature_id: Option<i64>,
118 pub properties: serde_json::Value,
120 pub latlng: LatLng,
122}
123
124#[derive(Debug, Clone, Serialize, Deserialize)]
126pub struct LayerHoverEvent {
127 pub layer_id: String,
129 pub feature_id: Option<i64>,
131 pub properties: Option<serde_json::Value>,
133 pub latlng: LatLng,
135 pub cursor_x: f64,
137 pub cursor_y: f64,
139}
140
141#[derive(Debug, Clone, Serialize, Deserialize)]
143pub struct MapReadyEvent;
144
145#[derive(Debug, Clone, Serialize, Deserialize)]
147pub struct MapErrorEvent {
148 #[serde(default)]
150 pub message: Option<String>,
151}
152
153#[derive(Debug, Clone, Serialize, Deserialize)]
155#[serde(tag = "type")]
156#[allow(dead_code)]
157pub enum MapEvent {
158 #[serde(rename = "ready")]
159 Ready,
160 #[serde(rename = "error")]
161 Error(MapErrorEvent),
162 #[serde(rename = "click")]
163 Click(MapClickEvent),
164 #[serde(rename = "dblclick")]
165 DblClick(MapDblClickEvent),
166 #[serde(rename = "contextmenu")]
167 ContextMenu(MapContextMenuEvent),
168 #[serde(rename = "marker_click")]
169 MarkerClick(MarkerClickEvent),
170 #[serde(rename = "marker_hover")]
171 MarkerHover(MarkerHoverEvent),
172 #[serde(rename = "marker_dragstart")]
173 MarkerDragStart(MarkerDragStartEvent),
174 #[serde(rename = "marker_dragend")]
175 MarkerDragEnd(MarkerDragEndEvent),
176 #[serde(rename = "move")]
177 Move(MapMoveEvent),
178 #[serde(rename = "zoom")]
179 Zoom(MapZoomEvent),
180 #[serde(rename = "rotate")]
181 Rotate(MapRotateEvent),
182 #[serde(rename = "pitch")]
183 Pitch(MapPitchEvent),
184 #[serde(rename = "layer_click")]
185 LayerClick(LayerClickEvent),
186 #[serde(rename = "layer_hover")]
187 LayerHover(LayerHoverEvent),
188}